Revert "Revert "Revert "external/boringssl: Sync to 81080a729af568f7b5fde92b9170cc17065027c9."""
am: dd42a61317

Change-Id: I036aa777e64da21bb0a98a8be5516d40429a3d85
diff --git a/Android.bp b/Android.bp
index b447ce1..8a01f91 100644
--- a/Android.bp
+++ b/Android.bp
@@ -184,25 +184,25 @@
     name: "cavp",
     host_supported: true,
     srcs: [
-        "src/util/fipstools/cavp/cavp_aes_gcm_test.cc",
-        "src/util/fipstools/cavp/cavp_aes_test.cc",
-        "src/util/fipstools/cavp/cavp_ctr_drbg_test.cc",
-        "src/util/fipstools/cavp/cavp_ecdsa2_keypair_test.cc",
-        "src/util/fipstools/cavp/cavp_ecdsa2_pkv_test.cc",
-        "src/util/fipstools/cavp/cavp_ecdsa2_siggen_test.cc",
-        "src/util/fipstools/cavp/cavp_ecdsa2_sigver_test.cc",
-        "src/util/fipstools/cavp/cavp_hmac_test.cc",
-        "src/util/fipstools/cavp/cavp_kas_test.cc",
-        "src/util/fipstools/cavp/cavp_keywrap_test.cc",
-        "src/util/fipstools/cavp/cavp_main.cc",
-        "src/util/fipstools/cavp/cavp_rsa2_keygen_test.cc",
-        "src/util/fipstools/cavp/cavp_rsa2_siggen_test.cc",
-        "src/util/fipstools/cavp/cavp_rsa2_sigver_test.cc",
-        "src/util/fipstools/cavp/cavp_sha_monte_test.cc",
-        "src/util/fipstools/cavp/cavp_sha_test.cc",
-        "src/util/fipstools/cavp/cavp_tdes_test.cc",
-        "src/util/fipstools/cavp/cavp_test_util.cc",
-        "src/util/fipstools/cavp/cavp_tlskdf_test.cc",
+        "src/fipstools/cavp_aes_gcm_test.cc",
+        "src/fipstools/cavp_aes_test.cc",
+        "src/fipstools/cavp_ctr_drbg_test.cc",
+        "src/fipstools/cavp_ecdsa2_keypair_test.cc",
+        "src/fipstools/cavp_ecdsa2_pkv_test.cc",
+        "src/fipstools/cavp_ecdsa2_siggen_test.cc",
+        "src/fipstools/cavp_ecdsa2_sigver_test.cc",
+        "src/fipstools/cavp_hmac_test.cc",
+        "src/fipstools/cavp_kas_test.cc",
+        "src/fipstools/cavp_keywrap_test.cc",
+        "src/fipstools/cavp_main.cc",
+        "src/fipstools/cavp_rsa2_keygen_test.cc",
+        "src/fipstools/cavp_rsa2_siggen_test.cc",
+        "src/fipstools/cavp_rsa2_sigver_test.cc",
+        "src/fipstools/cavp_sha_monte_test.cc",
+        "src/fipstools/cavp_sha_test.cc",
+        "src/fipstools/cavp_tdes_test.cc",
+        "src/fipstools/cavp_test_util.cc",
+        "src/fipstools/cavp_tlskdf_test.cc",
     ],
 
     shared_libs: [
diff --git a/BORINGSSL_REVISION b/BORINGSSL_REVISION
index cc77095..a99e0b7 100644
--- a/BORINGSSL_REVISION
+++ b/BORINGSSL_REVISION
@@ -1 +1 @@
-81080a729af568f7b5fde92b9170cc17065027c9
+c9827e073f64e353c4891ecc2c73721882543ee0
diff --git a/NOTICE b/NOTICE
index 2f4dfcd..49c41fa 100644
--- a/NOTICE
+++ b/NOTICE
@@ -181,29 +181,6 @@
 SOFTWARE.
 
 
-The code in third_party/sike also carries the MIT license:
-
-Copyright (c) Microsoft Corporation. All rights reserved.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE
-
-
 Licenses for support code
 -------------------------
 
diff --git a/crypto_test_data.cc b/crypto_test_data.cc
index 91675df..f04b571 100644
--- a/crypto_test_data.cc
+++ b/crypto_test_data.cc
@@ -62,7 +62,6 @@
  *       crypto/fipsmodule/rand/ctrdrbg_vectors.txt \
  *       crypto/hmac_extra/hmac_tests.txt \
  *       crypto/poly1305/poly1305_tests.txt \
- *       crypto/siphash/siphash_tests.txt \
  *       crypto/x509/many_constraints.pem \
  *       crypto/x509/many_names1.pem \
  *       crypto/x509/many_names2.pem \
@@ -89,7 +88,6 @@
  *       third_party/wycheproof_testvectors/ecdsa_secp384r1_sha512_test.txt \
  *       third_party/wycheproof_testvectors/ecdsa_secp521r1_sha512_test.txt \
  *       third_party/wycheproof_testvectors/eddsa_test.txt \
- *       third_party/wycheproof_testvectors/kwp_test.txt \
  *       third_party/wycheproof_testvectors/kw_test.txt \
  *       third_party/wycheproof_testvectors/rsa_pss_2048_sha1_mgf1_20_test.txt \
  *       third_party/wycheproof_testvectors/rsa_pss_2048_sha256_mgf1_0_test.txt \
@@ -2475,36 +2473,35 @@
     "fd3e0faceb636b34ed17e044a9f249dae8fc132e937e2d9349cd2ed77bb1049ceb692a2ec5b17ad61502a64c\nY = 001ec91d3058573fa6c0564a02a1a010160c313bc7c73510dc983e5461682b5be00dbce7e2c682ad73f29ca822cdc111f68fabe33a7b384a648342c3cdb9f050bcdb\nPeerX = 017200b3f16a68cbaed2bf78ba8cddfb6cffac262bba00fbc25f9dc72a07ce59372904899f364c44cb264c097b647d4412bee3e519892d534d9129f8a28f7500fee7\nPeerY = 00baba8d672a4f4a3b63de48b96f56e18df5d68f7d70d5109833f43770d6732e06b39ad60d93e5b43db8789f1ec0aba47286a39ea584235acea757dbf13d53b58364\nZ = 0101e462e9d9159968f6440e956f11dcf2227ae4aea81667122b6af9239a291eb5d6cf5a4087f358525fcacfa46bb2db01a75af1ba519b2d31da33eda87a9d565748\n\nCurve = P-521\nPrivate = 005bacfff268acf6553c3c583b464ea36a1d35e2b257a5d49eb3419d5a095087c2fb4d15cf5bf5af816d0f3ff7586490ccd3ddc1a98b39ce63749c6288ce0dbdac7d\nX = 0036e488da7581472a9d8e628c58d6ad727311b7e6a3f6ae33a8544f34b09280249020be7196916fafd90e2ec54b66b5468d2361b99b56fa00d7ac37abb8c6f16653\nY = 011edb9fb8adb6a43f4f5f5fdc1421c9fe04fc8ba46c9b66334e3af927c8befb4307104f299acec4e30f812d9345c9720d19869dbfffd4ca3e7d2713eb5fc3f42615\nPeerX = 004efd5dbd2f979e3831ce98f82355d6ca14a5757842875882990ab85ab9b7352dd6b9b2f4ea9a1e95c3880d65d1f3602f9ca653dc346fac858658d75626f4d4fb08\nPeerY = 0061cf15dbdaa7f31589c98400373da284506d70c89f074ed262a9e28140796b7236c2eef99016085e71552ff488c72b7339fefb7915c38459cb20ab85aec4e45052\nZ = 0141d6a4b719ab67eaf04a92c0a41e2dda78f4354fb90bdc35202cc7699b9b04d49616f82255debf7bbec045ae58f982a66905fcfae69d689785e38c868eb4a27e7b\n\nCurve = P-521\nPrivate = 008e2c93c5423876223a637cad367c8589da69a2d0fc68612f31923ae50219df2452e7cc92615b67f17b57ffd2f52b19154bb40d7715336420fde2e89fee244f59dc\nX = 00fa3b35118d6c422570f724a26f90b2833b19239174cea081c53133f64db60d6940ea1261299c04c1f4587cdb0c4c39616479c1bb0c146799a118032dcf98f899c0\nY = 0069f040229006151fa32b51f679c8816f7c17506b403809dc77cd58a2aec430d94d13b6c916de99f355aa45fcfbc6853d686c71be496a067d24bfaea4818fc51f75\nPeerX = 0129891de0cf3cf82e8c2cf1bf90bb296fe00ab08ca45bb7892e0e227a504fdd05d2381a4448b68adff9c4153c87eacb78330d8bd52515f9f9a0b58e85f446bb4e10\nPeerY = 009edd679696d3d1d0ef327f200383253f6413683d9e4fcc87bb35f112c2f110098d15e5701d7ceee416291ff5fed85e687f727388b9afe26a4f6feed560b218e6bb\nZ = 00345e26e0abb1aac12b75f3a9cf41efe1c336396dffa4a067a4c2cfeb878c68b2b045faa4e5b4e6fa4678f5b603c351903b14bf9a6a70c439257199a640890b61d1\n\nCurve = P-521\nPrivate = 0004d49d39d40d8111bf16d28c5936554326b197353eebbcf47545393bc8d3aaf98f14f5be7074bfb38e6cc97b989754074daddb3045f4e4ce745669fdb3ec0d5fa8\nX = 012ec226d050ce07c79b3df4d0f0891f9f7adf462e8c98dbc1a2a14f5e53a3f5ad894433587cc429a8be9ea1d84fa33b1803690dae04da7218d30026157fc995cf52\nY = 004837dfbf3426f57b5c793269130abb9a38f618532211931154db4eeb9aede88e57290f842ea0f2ea9a5f74c6203a3920fe4e305f6118f676b154e1d75b9cb5eb88\nPeerX = 01a3c20240e59f5b7a3e17c275d2314ba1741210ad58b71036f8c83cc1f6b0f409dfdd9113e94b67ec39c3291426c23ffcc447054670d2908ff8fe67dc2306034c5c\nPeerY = 01d2825bfd3af8b1e13205780c137fe938f84fde40188e61ea02cead81badfdb425c29f7d7fb0324debadc10bbb93de68f62c35069268283f5265865db57a79f7bf7\nZ = 006fe9de6fb8e672e7fd150fdc5e617fabb0d43906354ccfd224757c7276f7a1010091b17ed072074f8d10a5ec971eb35a5cb7076603b7bc38d432cbc059f80f9488\n\nCurve = P-521\nPrivate = 011a5d1cc79cd2bf73ea106f0e60a5ace220813b53e27b739864334a07c03367efda7a4619fa6eef3a9746492283b3c445610a023a9cc49bf4591140384fca5c8bb5\nX = 00eb07c7332eedb7d3036059d35f7d2288d4377d5f42337ad3964079fb120ccd4c8bd384b585621055217023acd9a94fcb3b965bfb394675e788ade41a1de73e620c\nY = 00491a835de2e6e7deb7e090f4a11f2c460c0b1f3d5e94ee8d751014dc720784fd3b54500c86ebaef18429f09e8e876d5d1538968a030d7715dde99f0d8f06e29d59\nPeerX = 007e2d138f2832e345ae8ff65957e40e5ec7163f016bdf6d24a2243daa631d878a4a16783990c722382130f9e51f0c1bd6ff5ac96780e48b68f5dec95f42e6144bb5\nPeerY = 00b0de5c896791f52886b0f09913e26e78dd0b69798fc4df6d95e3ca708ecbcbcce1c1895f5561bbabaae372e9e67e6e1a3be60e19b470cdf673ec1fc393d3426e20\nZ = 01e4e759ecedce1013baf73e6fcc0b92451d03bdd50489b78871c333114990c9ba6a9b2fc7b1a2d9a1794c1b60d9279af6f146f0bbfb0683140403bfa4ccdb524a29\n\nCurve = P-521\nPrivate = 010c908caf1be74c616b625fc8c1f514446a6aec83b5937141d6afbb0a8c7666a7746fa1f7a6664a2123e8cdf6cd8bf836c56d3c0ebdcc980e43a186f938f3a78ae7\nX = 0031890f4c7abec3f723362285d77d2636f876817db3bbc88b01e773597b969ff6f013ea470c854ab4a7739004eb8cbea69b82ddf36acadd406871798ecb2ac3aa7f\nY = 00d8b429ae3250266b9643c0c765a60dc10155bc2531cf8627296f4978b6640a9e600e19d0037d58503fa80799546a814d7478a550aa90e5ebeb052527faaeae5d08\nPeerX = 00118c36022209b1af8ebad1a12b566fc48744576e1199fe80de1cdf851cdf03e5b9091a8f7e079e83b7f827259b691d0c22ee29d6bdf73ec7bbfd746f2cd97a357d\nPeerY = 00da5ff4904548a342e2e7ba6a1f4ee5f840411a96cf63e6fe622f22c13e614e0a847c11a1ab3f1d12cc850c32e095614ca8f7e2721477b486e9ff40372977c3f65c\nZ = 0163c9191d651039a5fe985a0eea1eba018a40ab1937fcd2b61220820ee8f2302e9799f6edfc3f5174f369d672d377ea8954a8d0c8b851e81a56fda95212a6578f0e\n\nCurve = P-521\nPrivate = 01b37d6b7288de671360425d3e5ac1ccb21815079d8d73431e9b74a6f0e7ae004a357575b11ad66642ce8b775593eba9d98bf25c75ef0b4d3a2098bbc641f59a2b77\nX = 00189a5ee34de7e35aefeaeef9220c18071b4c29a4c3bd9d954458bd3e82a7a34da34cff5579b8101c065b1f2f527cf4581501e28ef5671873e65267733d003520af\nY = 01eb4bc50a7b4d4599d7e3fa773ddb9eb252c9b3422872e544bdf75c7bf60f5166ddc11eb08fa7c30822dabaee373ab468eb2d922e484e2a527fff2ebb804b7d9a37\nPeerX = 01780edff1ca1c03cfbe593edc6c049bcb2860294a92c355489d9afb2e702075ade1c953895a456230a0cde905de4a3f38573dbfcccd67ad6e7e93f0b5581e926a5d\nPeerY = 00a5481962c9162962e7f0ebdec936935d0eaa813e8226d40d7f6119bfd940602380c86721e61db1830f51e139f210000bcec0d8edd39e54d73a9a129f95cd5fa979\nZ = 015d613e267a36342e0d125cdad643d80d97ed0600afb9e6b9545c9e64a98cc6da7c5aaa3a8da0bdd9dd3b97e9788218a80abafc106ef065c8f1c4e1119ef58d298b\n\nCurve = P-521\nPrivate = 00f2661ac762f60c5fff23be5d969ccd4ec6f98e4e72618d12bdcdb9b4102162333788c0bae59f91cdfc172c7a1681ee44d96ab2135a6e5f3415ebbcd55165b1afb0\nX = 00a8e25a6902d687b4787cdc94c364ac7cecc5c495483ed363dc0aa95ee2bd739c4c4d46b17006c728b076350d7d7e54c6822f52f47162a25109aaaba690cab696ec\nY = 0168d2f08fe19e4dc9ee7a195b03c9f7fe6676f9f520b6270557504e72ca4394a2c6918625e15ac0c51b8f95cd560123653fb8e8ee6db961e2c4c62cc54e92e2a2a9\nPeerX = 016dacffa183e5303083a334f765de724ec5ec9402026d4797884a9828a0d321a8cfac74ab737fe20a7d6befcfc73b6a35c1c7b01d373e31abc192d48a4241a35803\nPeerY = 011e5327cac22d305e7156e559176e19bee7e4f2f59e86f1a9d0b6603b6a7df1069bde6387feb71587b8ffce5b266e1bae86de29378a34e5c74b6724c4d40a719923\nZ = 014d6082a3b5ced1ab8ca265a8106f302146c4acb8c30bb14a4c991e3c82a9731288bdb91e0e85bda313912d06384fc44f2153fb13506fa9cf43c9aab5750988c943\n\nCurve = P-521\nPrivate = 00f430ca1261f09681a9282e9e970a9234227b1d5e58d558c3cc6eff44d1bdf53de16ad5ee2b18b92d62fc79586116b0efc15f79340fb7eaf5ce6c44341dcf8dde27\nX = 006c1d9b5eca87de1fb871a0a32f807c725adccde9b3967453a71347d608f0c030cd09e338cdecbf4a02015bc8a6e8d3e2595fe773ffc2fc4e4a55d0b1a2cc00323b\nY = 01141b2109e7f4981c952aa818a2b9f6f5c41feccdb7a7a45b9b4b672937771b008cae5f934dfe3fed10d383ab1f38769c92ce88d9be5414817ecb073a31ab368ccb\nPeerX = 00a091421d3703e3b341e9f1e7d58f8cf7bdbd1798d001967b801d1cec27e605c580b2387c1cb464f55ce7ac80334102ab03cfb86d88af76c9f4129c01bedd3bbfc4\nPeerY = 008c9c577a8e6fc446815e9d40baa66025f15dae285f19eb668ee60ae9c98e7ecdbf2b2a68e22928059f67db188007161d3ecf397e0883f0c4eb7eaf7827a62205cc\nZ = 0020c00747cb8d492fd497e0fec54644bf027d418ab686381f109712a99cabe328b9743d2225836f9ad66e5d7fed1de247e0da92f60d5b31f9e47672e57f710598f4\n\nCurve = P-521\nPrivate = 005dc33aeda03c2eb233014ee468dff753b72f73b00991043ea353828ae69d4cd0fadeda7bb278b535d7c57406ff2e6e473a5a4ff98e90f90d6dadd25100e8d85666\nX = 00c825ba307373cec8dd2498eef82e21fd9862168dbfeb83593980ca9f82875333899fe94f137daf1c4189eb502937c3a367ea7951ed8b0f3377fcdf2922021d46a5\nY = 016b8a2540d5e65493888bc337249e67c0a68774f3e8d81e3b4574a0125165f0bd58b8af9de74b35832539f95c3cd9f1b759408560aa6851ae3ac7555347b0d3b13b\nPeerX = 004f38816681771289ce0cb83a5e29a1ab06fc91f786994b23708ff08a08a0f675b809ae99e9f9967eb1a49f196057d69e50d6dedb4dd2d9a81c02bdcc8f7f518460\nPeerY = 009efb244c8b91087de1eed766500f0e81530752d469256ef79f6b965d8a2232a0c2dbc4e8e1d09214bab38485be6e357c4200d073b52f04e4a16fc6f5247187aecb\nZ = 00c2bfafcd7fbd3e2fd1c",
     "750fdea61e70bd4787a7e68468c574ee99ebc47eedef064e8944a73bcb7913dbab5d93dca660d216c553622362794f7a2acc71022bdb16f\n\nCurve = P-521\nPrivate = 00df14b1f1432a7b0fb053965fd8643afee26b2451ecb6a8a53a655d5fbe16e4c64ce8647225eb11e7fdcb23627471dffc5c2523bd2ae89957cba3a57a23933e5a78\nX = 004e8583bbbb2ecd93f0714c332dff5ab3bc6396e62f3c560229664329baa5138c3bb1c36428abd4e23d17fcb7a2cfcc224b2e734c8941f6f121722d7b6b94154576\nY = 01cf0874f204b0363f020864672fadbf87c8811eb147758b254b74b14fae742159f0f671a018212bbf25b8519e126d4cad778cfff50d288fd39ceb0cac635b175ec0\nPeerX = 01a32099b02c0bd85371f60b0dd20890e6c7af048c8179890fda308b359dbbc2b7a832bb8c6526c4af99a7ea3f0b3cb96ae1eb7684132795c478ad6f962e4a6f446d\nPeerY = 017627357b39e9d7632a1370b3e93c1afb5c851b910eb4ead0c9d387df67cde85003e0e427552f1cd09059aad0262e235cce5fba8cedc4fdc1463da76dcd4b6d1a46\nZ = 01aaf24e5d47e4080c18c55ea35581cd8da30f1a079565045d2008d51b12d0abb4411cda7a0785b15d149ed301a3697062f42da237aa7f07e0af3fd00eb1800d9c41\n",
 };
-static const size_t kLen36 = 132435;
+static const size_t kLen36 = 129211;
 
 static const char *kData36[] = {
-    "# Public key algorithm tests\n\n# Keys used for PKEY operations.\n\n# RSA 2048 bit key.\nPrivateKey = RSA-2048\nType = RSA\nInput = 308204bc020100300d06092a864886f70d0101010500048204a6308204a20201000282010100cd0081ea7b2ae1ea06d59f7c73d9ffb94a09615c2e4ba7c636cef08dd3533ec3185525b015c769b99a77d6725bf9c3532a9b6e5f6627d5fb85160768d3dda9cbd35974511717dc3d309d2fc47ee41f97e32adb7f9dd864a1c4767a666ecd71bc1aacf5e7517f4b38594fea9b05e42d5ada9912008013e45316a4d9bb8ed086b88d28758bacaf922d46a868b485d239c9baeb0e2b64592710f42b2d1ea0a4b4802c0becab328f8a68b0073bdb546feea9809d2849912b390c1532bc7e29c7658f8175fae46f34332ff87bcab3e40649b98577869da0ea718353f0722754886913648760d122be676e0fc483dd20ffc31bda96a31966c9aa2e75ad03de47e1c44f02030100010282010060297ac7991b167a06d6b24758b8cbe208beb9b2d9ec9738bd80f90a2e35005dd7ce292d9e29ba885bd316fef1f20913bc0ac90d6b0808b2414d82104441d8624a33ce0233c8f780a48b375aff02d76712228a702484db3f9ebecccfbbee1709dba182800d949e9e4216e0bff3558388f8bd90da373a1d82743ec3fbdd1427fd16825a657a316912e8695365117ca2f845c909405fcac55f895fc15d20386c26ee78c9e99075029a178a6c1e4cf0c200e8a9cfb27e9d156f86e6c2adc22b1a84a1cd5ca5b2790875d79407c84b352395cb81cc3fed5bb043b69ede0c07204550025cee8c5f440170b6120bb48e0f747bcd8f522110850df043c428dfd187053102818100f6f961b47cbc035d3aedebc7de850a956b65ecdb9cf60764063f15aa48553c58d972fe6675056e35ddfdc37bf3b9f2f622ee271337256849c9bef2176fe8f7c3f8bb91ba374dd53baf3dec814d2bdec10c1fdc88cdd16876f26b1edfa3f094197edf4d42ff1fb2971103b898ca859c427287086a842ab410bb69cf2d35af6be302818100d47e724a7ff41048b270c2524a4101878b73159bb73d3dbc187b220e635b3534f96e243a184d93f860b6bfbb6b71c1ed9a1e1f458583023c301e96a692c1a08b53d0ec9ca910100d80451e3b7dc6a01bac4aecef8df798846bc235a08cbba2cf4c06804cc11219e95608c714e3f1430d491fadbba32a5751a04f97745834c9a502818021f2452bb9b95dfd028c914bf799f1ca77e89a95d50d3c16d384f8455f8bd7af9eb3dfa3d591d9842def235f7630a8e48c088ff6642e101794535a933e1e976fa8509fc728b2da0c4a1a08d7fcf37abaae1ff3001aca1dc1bbb05d9dffbaa1a09f7fb1eef38237d9ebccc722b9338436dde7119112798c26809c1a8dec4320610281801f7510aa62c2d8de4a3c53282781f41e02d0e8b402ae78432e449c48110161a11403f02d01880a8dcc938152d79721a4711a607ac4471ebf964810f95be47a45e60499e29f4c9773c83773404f606637728c2d0351bb03c326c8bb73a721e7fa5440ea2172bba1465fcc30dcb0d9f89930e815aa1f7f9729a857e00e0338dd590281804d1f0d756fe77e01099a652f50a88b7b685dc5bf00981d5d2376fd0c6fe29cd5b638734479305a73ad3c1599d39eae3bae035fbd6fed07c28de705933879a06e48e6a603686ed8e2560a5f6af1f2c24faf4aa960e382186f15eedce9a2491ae730680dd4cf778b70faa86826ab3223477cc91377b19a6d5a2eaea219760beed5\nExpectNoRawPrivate\nExpectNoRawPublic\n\n# The public half of the same key encoded as a SubjectPublicKeyInfo.\nPublicKey = RSA-2048-SPKI\nType = RSA\nInput = 30820122300d06092a864886f70d01010105000382010f003082010a0282010100cd0081ea7b2ae1ea06d59f7c73d9ffb94a09615c2e4ba7c636cef08dd3533ec3185525b015c769b99a77d6725bf9c3532a9b6e5f6627d5fb85160768d3dda9cbd35974511717dc3d309d2fc47ee41f97e32adb7f9dd864a1c4767a666ecd71bc1aacf5e7517f4b38594fea9b05e42d5ada9912008013e45316a4d9bb8ed086b88d28758bacaf922d46a868b485d239c9baeb0e2b64592710f42b2d1ea0a4b4802c0becab328f8a68b0073bdb546feea9809d2849912b390c1532bc7e29c7658f8175fae46f34332ff87bcab3e40649b98577869da0ea718353f0722754886913648760d122be676e0fc483dd20ffc31bda96a31966c9aa2e75ad03de47e1c44f0203010001\nExpectNoRawPrivate\nExpectNoRawPublic\n\n# The same key but with a negative RSA modulus.\nPublicKey = RSA-2048-SPKI-Negative\nInput = 30820121300d06092a864886f70d01010105000382010e003082010902820100cd0081ea7b2ae1ea06d59f7c73d9ffb94a09615c2e4ba7c636cef08dd3533ec3185525b015c769b99a77d6725bf9c3532a9b6e5f6627d5fb85160768d3dda9cbd35974511717dc3d309d2fc47ee41f97e32adb7f9dd864a1c4767a666ecd71bc1aacf5e7517f4b38594fea9b05e42d5ada9912008013e45316a4d9bb8ed086b88d28758bacaf922d46a868b485d239c9baeb0e2b64592710f42b2d1ea0a4b4802c0becab328f8a68b0073bdb546feea9809d2849912b390c1532bc7e29c7658f8175fae46f34332ff87bcab3e40649b98577869da0ea718353f0722754886913648760d122be676e0fc483dd20ffc31bda96a31966c9aa2e75ad03de47e1c44f0203010001\nError = NEGATIVE_NUMBER\n\n# The same key but with missing parameters rather than a NULL.\nPublicKey = RSA-2048-SPKI-Invalid\nInput = 30820120300b06092a864886f70d0101010382010f003082010a0282010100cd0081ea7b2ae1ea06d59f7c73d9ffb94a09615c2e4ba7c636cef08dd3533ec3185525b015c769b99a77d6725bf9c3532a9b6e5f6627d5fb85160768d3dda9cbd35974511717dc3d309d2fc47ee41f97e32adb7f9dd864a1c4767a666ecd71bc1aacf5e7517f4b38594fea9b05e42d5ada9912008013e45316a4d9bb8ed086b88d28758bacaf922d46a868b485d239c9baeb0e2b64592710f42b2d1ea0a4b4802c0becab328f8a68b0073bdb546feea9809d2849912b390c1532bc7e29c7658f8175fae46f34332ff87bcab3e40649b98577869da0ea718353f0722754886913648760d122be676e0fc483dd20ffc31bda96a31966c9aa2e75ad03de47e1c44f0203010001\nError = DECODE_ERROR\n\n# The same key but with an incorrectly-encoded length prefix.\nPublicKey = RSA-2048-SPKI-Invalid2\nInput = 3083000122300d06092a864886f70d01010105000382010f003082010a0282010100cd0081ea7b2ae1ea06d59f7c73d9ffb94a09615c2e4ba7c636cef08dd3533ec3185525b015c769b99a77d6725bf9c3532a9b6e5f6627d5fb85160768d3dda9cbd35974511717dc3d309d2fc47ee41f97e32adb7f9dd864a1c4767a666ecd71bc1aacf5e7517f4b38594fea9b05e42d5ada9912008013e45316a4d9bb8ed086b88d28758bacaf922d46a868b485d239c9baeb0e2b64592710f42b2d1ea0a4b4802c0becab328f8a68b0073bdb546feea9809d2849912b390c1532bc7e29c7658f8175fae46f34332ff87bcab3e40649b98577869da0ea718353f0722754886913648760d122be676e0fc483dd20ffc31bda96a31966c9aa2e75ad03de47e1c44f0203010001\nError = DECODE_ERROR\n\n# RSA 512 bit key.\nPrivateKey = RSA-512\nType = RSA\nInput = 30820154020100300d06092a864886f70d01010105000482013e3082013a020100024100dd20403d976a38c9d79152d87b5c8e9f05033eadd7b7de709bf5b0c4a5182a97d18483526b02362b992e154a9f37faa396ca2685cdab8fec09877ebe705f4dd70203010001024055bebcca655d7e39de8a6eaa9d636db682161907064039544755c53eeb99ec618c03a210dbc61471eaba10c5c365c9726d6b7a96f54d455f7d168d49367270e1022100f21a05d9fd6817301ce49ce10448f9bdd44f5ef5b7557cd7d83155db46382ae7022100e9d1f7157783db2feab1936954ddc4e83aa365695868144cda1be6813b61d791022100d6001eb0040920860ce41fafdf23ca6dfbdf74e6e9f98cf3164cf5c16f9e727d02206f6f73f4b52b10517be6f9bc5f87fa0a3bb817e2e711636b651f9af1c85d4f21022063eff2e57f5b4ca20342cfe793e25526624e3692f192461f9e1ce7f13f2d72c8\nExpectNoRawPrivate\nExpectNoRawPublic\n\n# RSA 515 bit key.\nPrivateKey = RSA-515\nType = RSA\nInput = 30820157020100300d06092a864886f70d0101010500048201413082013d0201000241054fa166e205e658bbe8a2dc35311c0c2b75b7e4569fd9642c8bae809279271fc824f26baa1166ea46298ca63379ea76adbada2b61e5066820a35beaec1aca227f020301000102410266c972be0d30e53ac2acb1aa13b4bd0401cccf212452a66b4615f7e943831f67b4ca48560582d0ca886044aaaaf87945252a848c1947944186e6eb83969bf91102210309e631761842cc8a2ccfd372c20a9cba21de1a199c30ab440bc6b51079f4e825022101bf715c1db432627ca7c29a293b9210f2eff1e92d12f306ebaa5334f8ee03dcd30221018ac58a765f2b8f37d434081fe5ff92b81735ead2f263f4968ccf63d61fbe3d0d0221015b247a1159a2d5a25d0db049593c6405f77f3a278c521d066e290c2a2d8fb59d0221026224aa31fd95c14d24fd03b8a195bba4cc88df7c37f5370a5ab19f882f1404d6\nExpectNoRawPrivate\nExpectNoRawPublic\n\n# EC P-256 key\nPrivateKey = P-256\nType = EC\nInput = 308187020100301306072a8648ce3d020106082a8648ce3d030107046d306b02010104208a872fb62893c4d1ffc5b9f0f91758069f8352e08fa05a49f8db926cb5728725a144034200042c150f429ce70f216c252cf5e062ce1f639cd5d165c7f89424072c27197d78b33b920e95cdb664e990dcf0cfea0d94e2a8e6af9d0e58056e653104925b9fe6c9\nExpectNoRawPrivate\nExpectNoRawPublic\n\n# The same key as above with the optional public key omitted.\nPrivateKey = P-256-MissingPublic\nType = EC\nInput = 3041020100301306072a8648ce3d020106082a8648ce3d0301070427302502010104208a872fb62893c4d1ffc5b9f0f91758069f8352e08fa05a49f8db926cb5728725\nExpectNoRawPrivate\nExpectNoRawPublic\n\n# The same key as above with redundant parameters.\nPrivateKey = P-256-ExtraParameters\nType = EC\nInput = 308193020100301306072a8648ce3d020106082a8648ce3d0301070479307702010104208a872fb62893c4d1ffc5b9f0f91758069f8352e08fa05a49f8db926cb5728725a00a06082a8648ce3d030107a144034200042c150f429ce70f216c252cf5e062ce1f639cd5d165c7f89424072c27197d78b33b920e95cdb664e990dcf0cfea0d94e2a8e6af9d0e58056e653104925b9fe6c9\n# The key re-encodes with the parameters removed.\nOutput = 308187020100301306072a8648c",
-    "e3d020106082a8648ce3d030107046d306b02010104208a872fb62893c4d1ffc5b9f0f91758069f8352e08fa05a49f8db926cb5728725a144034200042c150f429ce70f216c252cf5e062ce1f639cd5d165c7f89424072c27197d78b33b920e95cdb664e990dcf0cfea0d94e2a8e6af9d0e58056e653104925b9fe6c9\nExpectNoRawPrivate\nExpectNoRawPublic\n\n# The same key, but with the redundant parameters in the ECPrivateKey mismatched.\nPrivateKey = P-256-BadInnerParameters\nInput = 308190020100301306072a8648ce3d020106082a8648ce3d0301070476307402010104208a872fb62893c4d1ffc5b9f0f91758069f8352e08fa05a49f8db926cb5728725a00706052b81040022a144034200042c150f429ce70f216c252cf5e062ce1f639cd5d165c7f89424072c27197d78b33b920e95cdb664e990dcf0cfea0d94e2a8e6af9d0e58056e653104925b9fe6c9\nError = GROUP_MISMATCH\n\n# The public half of the same key encoded as a PublicKey.\nPublicKey = P-256-SPKI\nType = EC\nInput = 3059301306072a8648ce3d020106082a8648ce3d030107034200042c150f429ce70f216c252cf5e062ce1f639cd5d165c7f89424072c27197d78b33b920e95cdb664e990dcf0cfea0d94e2a8e6af9d0e58056e653104925b9fe6c9\nExpectNoRawPrivate\nExpectNoRawPublic\n\n# The same as above, but with the curve explicitly spelled out.\nPublicKey = P-256-SPKI\nInput = 3082014b3082010306072a8648ce3d02013081f7020101302c06072a8648ce3d0101022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff305b0420ffffffff00000001000000000000000000000000fffffffffffffffffffffffc04205ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b031500c49d360886e704936a6678e1139d26b7819f7e900441046b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551020101034200042c150f429ce70f216c252cf5e062ce1f639cd5d165c7f89424072c27197d78b33b920e95cdb664e990dcf0cfea0d94e2a8e6af9d0e58056e653104925b9fe6c9\nError = DECODE_ERROR\n\n# The same as above, but with trailing data after the curve name.\nPublicKey = P-256-SPKI\nInput = 305b301506072a8648ce3d020106082a8648ce3d0301070500034200042c150f429ce70f216c252cf5e062ce1f639cd5d165c7f89424072c27197d78b33b920e95cdb664e990dcf0cfea0d94e2a8e6af9d0e58056e653104925b9fe6c9\nError = DECODE_ERROR\n\n# A DSA private key.\nPrivateKey = DSA-1024\nType = DSA\nInput = 308202650201003082023906072a8648ce3804013082022c02820101009e12fab3de12213501dd82aa10ca2d101d2d4ebfef4d2a3f8daa0fe0cedad8d6af85616aa2f3252c0a2b5a6db09e6f14900e0ddb8311876dd8f9669525f99ed65949e184d5064793271169a228680b95ec12f59a8e20b21f2b58eb2a2012d35bde2ee351822fe8f32d0a330565dcce5c672b7259c14b2433d0b5b2ca2b2db0ab626e8f13f47fe0345d904e7294bb038e9ce21a9e580b83356278706cfe768436c69de149ccff98b4aab8cb4f6385c9f102ce59346eaeef27e0ad222d53d6e89cc8cde5776dd00057b03f2d88ab3cedbafd7b585f0b7f7835e17a3728bbf25ea62572f245dc111f3ce39cb6ffacc31b0a2790e7bde90224ea9b09315362af3d2b022100f381dcf53ebf724f8b2e5ca82c010fb4b5eda9358d0fd88ed278589488b54fc3028201000c402a725dcc3a62e02bf4cf43cd17f4a493591220223669cf4193edab423ad08dfb552e308a6a57a5ffbc7cd0fb2087f81f8df0cb08ab2133287d2b6968714a94f633c940845a48a3e16708dde761cc6a8eab2d84db21b6ea5b07681493cc9c31fbc368b243f6ddf8c932a8b4038f44e7b15ca876344a147859f2b43b39458668ad5e0a1a9a669546dd2812e3b3617a0aef99d58e3bb4cc87fd94225e01d2dcc469a77268146c51918f18e8b4d70aa1f0c7623bcc52cf3731d38641b2d2830b7eecb2f09552ff137d046e494e7f33c3590002b16d1b97d936fda28f90c3ed3ca35338168ac16f77c3c57adc2e8f7c6c2256e41a5f65450590dbb5bcf06d66610423022100b0c768702743bc51242993a971a52889795444f7c6452203d0ce84fe6117d46e\nExpectNoRawPrivate\nExpectNoRawPublic\n\n# A DSA public key.\nPublicKey = DSA-1024-SPKI\nType = DSA\nInput = 308201b73082012c06072a8648ce3804013082011f02818100b3429b8b128c9079f9b72e86857e98d265e5d91661ed8b5f4cc56e5eed1e571da30186983a9dd76297eab73ee13a1db841f8800d04a7cab478af6cde2ea4a2868531af169a24858c6268efa39ceb7ed0d4227eb5bbb01124a2a5a26038c7bcfb8cc827f68f5202345166e4718596799b65c9def82828ce44e62e38e41a0d24b1021500c5a56c81ddd87f47e676546c56d05706421624cf0281810094de40d27314fe929e47ff9b1ac65cfc73ef38c4d381c890be6217b15039ae18190e6b421af8c0bda35a5cfd050f58ae2644adce83e68c8e5ba11729df56bbb21e227a60b816cc033fa799a38fe1ba5b4aa1801b6f841ce3df99feb3b4fb96950c960af13fa2ce920aabc12dd24ad2044a35063ea0e25f67f560f4cfbdc5598303818400028180258c30ebbb7f34fdc873ce679f6cea373c7886d75d4421b90920db034daedd292c64d8edd8cdbdd7f3ad23d74cfa2135247d0cef6ecf2e14f99e19d22a8c1266bd8fb8719c0e5667c716c45c7adbdabe548085bdad2dfee636f8d52fd6adb2193df6c4f0520fbd171b91882e0e4f321f8250ffecf4dbea00e114427d3ef96c1a\nExpectNoRawPrivate\nExpectNoRawPublic\n\n# The same key as above, but without the parameters.\nPublicKey = DSA-1024-SPKI-No-Params\nType = DSA\nInput = 308192300906072a8648ce38040103818400028180258c30ebbb7f34fdc873ce679f6cea373c7886d75d4421b90920db034daedd292c64d8edd8cdbdd7f3ad23d74cfa2135247d0cef6ecf2e14f99e19d22a8c1266bd8fb8719c0e5667c716c45c7adbdabe548085bdad2dfee636f8d52fd6adb2193df6c4f0520fbd171b91882e0e4f321f8250ffecf4dbea00e114427d3ef96c1a\nExpectNoRawPrivate\nExpectNoRawPublic\n\n# Private keys from RFC 8032.\nPrivateKey = Ed25519\nType = Ed25519\nInput = 302e020100300506032b6570042204209d61b19deffd5a60ba844af492ec2cc44449c5697b326919703bac031cae7f60\nExpectRawPrivate = 9d61b19deffd5a60ba844af492ec2cc44449c5697b326919703bac031cae7f60\nExpectRawPublic = d75a980182b10ab7d54bfed3c964073a0ee172f3daa62325af021a68f707511a\n\nPrivateKey = Ed25519-2\nType = Ed25519\nInput = 302e020100300506032b6570042204204ccd089b28ff96da9db6c346ec114e0f5b8a319f35aba624da8cf6ed4fb8a6fb\nExpectRawPrivate = 4ccd089b28ff96da9db6c346ec114e0f5b8a319f35aba624da8cf6ed4fb8a6fb\nExpectRawPublic = 3d4017c3e843895a92b70aa74d1b7ebc9c982ccf2ec4968cc0cd55f12af4660c\n\nPrivateKey = Ed25519-3\nType = Ed25519\nInput = 302e020100300506032b657004220420c5aa8df43f9f837bedb7442f31dcb7b166d38535076f094b85ce3a2e0b4458f7\nExpectRawPrivate = c5aa8df43f9f837bedb7442f31dcb7b166d38535076f094b85ce3a2e0b4458f7\nExpectRawPublic = fc51cd8e6218a1a38da47ed00230f0580816ed13ba3303ac5deb911548908025\n\nPrivateKey = Ed25519-4\nType = Ed25519\nInput = 302e020100300506032b657004220420f5e5767cf153319517630f226876b86c8160cc583bc013744c6bf255f5cc0ee5\nExpectRawPrivate = f5e5767cf153319517630f226876b86c8160cc583bc013744c6bf255f5cc0ee5\nExpectRawPublic = 278117fc144c72340f67d0f2316e8386ceffbf2b2428c9c51fef7c597f1d426e\n\nPrivateKey = Ed25519-5\nType = Ed25519\nInput = 302e020100300506032b657004220420833fe62409237b9d62ec77587520911e9a759cec1d19755b7da901b96dca3d42\nExpectRawPrivate = 833fe62409237b9d62ec77587520911e9a759cec1d19755b7da901b96dca3d42\nExpectRawPublic = ec172b93ad5e563bf4932c70e1245034c35467ef2efd4d64ebf819683467e2bf\n\n# Public keys from RFC 8032.\nPublicKey = Ed25519-SPKI\nType = Ed25519\nInput = 302a300506032b6570032100d75a980182b10ab7d54bfed3c964073a0ee172f3daa62325af021a68f707511a\nExpectNoRawPrivate\nExpectRawPublic = d75a980182b10ab7d54bfed3c964073a0ee172f3daa62325af021a68f707511a\n\nPublicKey = Ed25519-SPKI-2\nType = Ed25519\nInput = 302a300506032b65700321003d4017c3e843895a92b70aa74d1b7ebc9c982ccf2ec4968cc0cd55f12af4660c\nExpectNoRawPrivate\nExpectRawPublic = 3d4017c3e843895a92b70aa74d1b7ebc9c982ccf2ec4968cc0cd55f12af4660c\n\nPublicKey = Ed25519-SPKI-3\nType = Ed25519\nInput = 302a300506032b6570032100fc51cd8e6218a1a38da47ed00230f0580816ed13ba3303ac5deb911548908025\nExpectNoRawPrivate\nExpectRawPublic = fc51cd8e6218a1a38da47ed00230f0580816ed13ba3303ac5deb911548908025\n\nPublicKey = Ed25519-SPKI-4\nType = Ed25519\nInput = 302a300506032b6570032100278117fc144c72340f67d0f2316e8386ceffbf2b2428c9c51fef7c597f1d426e\nExpectNoRawPrivate\nExpectRawPublic = 278117fc144c72340f67d0f2316e8386ceffbf2b2428c9c51fef7c597f1d426e\n\nPublicKey = Ed25519-SPKI-5\nType = Ed25519\nInput = 302a300506032b6570032100ec172b93ad5e563bf4932c70e1245034c35467ef2efd4d64ebf819683467e2bf\nExpectNoRawPrivate\nExpectRawPublic = ec172b93ad5e563bf4932c70e1245034c35467ef2efd4d64ebf819683467e2bf\n\n# The first key, private and public, with invalid NULL parameters.\nPrivateKey = Ed25519-NULL\nInput = 3030020100300706032b65700500042204209d61b19deffd5a60ba844af492ec2cc44449c5697b326919703bac031cae7f60\nError = DECODE_ERROR\n\nPublicKey = Ed25519-SPKI-NULL\nInput = 302c300706032b65700500032100d75a980182b10ab7d54bfed3c964073a0ee172f3daa62325af021a68f707511a\nError = DECODE_ERROR\n\n# Sample public key from RFC 8410.\nPublicKey = Ed25519-SPKI-Spec\nType = Ed25",
-    "519\nInput = 302a300506032b657003210019bf44096984cdfe8541bac167dc3b96c85086aa30b6b6cb0c5c38ad703166e1\n\n# Sample private key from RFC 8410.\nPrivateKey = Ed25519-Spec\nType = Ed25519\nInput = 302e020100300506032b657004220420d4ee72dbf913584ad5b6d8f1f769f8ad3afe7c28cbf1d4fbe097a88f44755842\n\n\n# RSA tests\n\nSign = RSA-2048\nDigest = SHA1\nInput = \"0123456789ABCDEF1234\"\nOutput = c09d402423cbf233d26cae21f954547bc43fe80fd41360a0336cfdbe9aedad05bef6fd2eaee6cd60089a52482d4809a238149520df3bdde4cb9e23d9307b05c0a6f327052325a29adf2cc95b66523be7024e2a585c3d4db15dfbe146efe0ecdc0402e33fe5d40324ee96c5c3edd374a15cdc0f5d84aa243c0f07e188c6518fbfceae158a9943be398e31097da81b62074f626eff738be6160741d5a26957a482b3251fd85d8df78b98148459de10aa93305dbb4a5230aa1da291a9b0e481918f99b7638d72bb687f97661d304ae145d64a474437a4ef39d7b8059332ddeb07e92bf6e0e3acaf8afedc93795e4511737ec1e7aab6d5bc9466afc950c1c17b48ad\n\nVerify = RSA-2048\nDigest = SHA1\nInput = \"0123456789ABCDEF1234\"\nOutput = c09d402423cbf233d26cae21f954547bc43fe80fd41360a0336cfdbe9aedad05bef6fd2eaee6cd60089a52482d4809a238149520df3bdde4cb9e23d9307b05c0a6f327052325a29adf2cc95b66523be7024e2a585c3d4db15dfbe146efe0ecdc0402e33fe5d40324ee96c5c3edd374a15cdc0f5d84aa243c0f07e188c6518fbfceae158a9943be398e31097da81b62074f626eff738be6160741d5a26957a482b3251fd85d8df78b98148459de10aa93305dbb4a5230aa1da291a9b0e481918f99b7638d72bb687f97661d304ae145d64a474437a4ef39d7b8059332ddeb07e92bf6e0e3acaf8afedc93795e4511737ec1e7aab6d5bc9466afc950c1c17b48ad\n\nVerify = RSA-2048-SPKI\nDigest = SHA1\nInput = \"0123456789ABCDEF1234\"\nOutput = c09d402423cbf233d26cae21f954547bc43fe80fd41360a0336cfdbe9aedad05bef6fd2eaee6cd60089a52482d4809a238149520df3bdde4cb9e23d9307b05c0a6f327052325a29adf2cc95b66523be7024e2a585c3d4db15dfbe146efe0ecdc0402e33fe5d40324ee96c5c3edd374a15cdc0f5d84aa243c0f07e188c6518fbfceae158a9943be398e31097da81b62074f626eff738be6160741d5a26957a482b3251fd85d8df78b98148459de10aa93305dbb4a5230aa1da291a9b0e481918f99b7638d72bb687f97661d304ae145d64a474437a4ef39d7b8059332ddeb07e92bf6e0e3acaf8afedc93795e4511737ec1e7aab6d5bc9466afc950c1c17b48ad\n\n# Digest too long\nSign = RSA-2048\nDigest = SHA1\nInput = \"0123456789ABCDEF12345\"\nError = INVALID_MESSAGE_LENGTH\n\nVerify = RSA-2048\nDigest = SHA1\nInput = \"0123456789ABCDEF12345\"\nOutput = c09d402423cbf233d26cae21f954547bc43fe80fd41360a0336cfdbe9aedad05bef6fd2eaee6cd60089a52482d4809a238149520df3bdde4cb9e23d9307b05c0a6f327052325a29adf2cc95b66523be7024e2a585c3d4db15dfbe146efe0ecdc0402e33fe5d40324ee96c5c3edd374a15cdc0f5d84aa243c0f07e188c6518fbfceae158a9943be398e31097da81b62074f626eff738be6160741d5a26957a482b3251fd85d8df78b98148459de10aa93305dbb4a5230aa1da291a9b0e481918f99b7638d72bb687f97661d304ae145d64a474437a4ef39d7b8059332ddeb07e92bf6e0e3acaf8afedc93795e4511737ec1e7aab6d5bc9466afc950c1c17b48ad\nError = INVALID_MESSAGE_LENGTH\n\n# Digest too short\nSign = RSA-2048\nDigest = SHA1\nInput = \"0123456789ABCDEF123\"\nError = INVALID_MESSAGE_LENGTH\n\nVerify = RSA-2048\nDigest = SHA1\nInput = \"0123456789ABCDEF123\"\nOutput = c09d402423cbf233d26cae21f954547bc43fe80fd41360a0336cfdbe9aedad05bef6fd2eaee6cd60089a52482d4809a238149520df3bdde4cb9e23d9307b05c0a6f327052325a29adf2cc95b66523be7024e2a585c3d4db15dfbe146efe0ecdc0402e33fe5d40324ee96c5c3edd374a15cdc0f5d84aa243c0f07e188c6518fbfceae158a9943be398e31097da81b62074f626eff738be6160741d5a26957a482b3251fd85d8df78b98148459de10aa93305dbb4a5230aa1da291a9b0e481918f99b7638d72bb687f97661d304ae145d64a474437a4ef39d7b8059332ddeb07e92bf6e0e3acaf8afedc93795e4511737ec1e7aab6d5bc9466afc950c1c17b48ad\nError = INVALID_MESSAGE_LENGTH\n\n# Digest too large for key.\nSign = RSA-512\nDigest = SHA512\nInput = \"0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF\"\nError = DIGEST_TOO_BIG_FOR_RSA_KEY\n\n# Mismatched digest\nVerify = RSA-2048\nDigest = SHA1\nInput = \"0123456789ABCDEF1233\"\nOutput = c09d402423cbf233d26cae21f954547bc43fe80fd41360a0336cfdbe9aedad05bef6fd2eaee6cd60089a52482d4809a238149520df3bdde4cb9e23d9307b05c0a6f327052325a29adf2cc95b66523be7024e2a585c3d4db15dfbe146efe0ecdc0402e33fe5d40324ee96c5c3edd374a15cdc0f5d84aa243c0f07e188c6518fbfceae158a9943be398e31097da81b62074f626eff738be6160741d5a26957a482b3251fd85d8df78b98148459de10aa93305dbb4a5230aa1da291a9b0e481918f99b7638d72bb687f97661d304ae145d64a474437a4ef39d7b8059332ddeb07e92bf6e0e3acaf8afedc93795e4511737ec1e7aab6d5bc9466afc950c1c17b48ad\nError = BAD_SIGNATURE\n\n# Corrupted signature\nVerify = RSA-2048\nDigest = SHA1\nInput = \"0123456789ABCDEF1233\"\nOutput = c09d402423cbf233d26cae21f954547bc43fe80fd41360a0336cfdbe9aedad05bef6fd2eaee6cd60089a52482d4809a238149520df3bdde4cb9e23d9307b05c0a6f327052325a29adf2cc95b66523be7024e2a585c3d4db15dfbe146efe0ecdc0402e33fe5d40324ee96c5c3edd374a15cdc0f5d84aa243c0f07e188c6518fbfceae158a9943be398e31097da81b62074f626eff738be6160741d5a26957a482b3251fd85d8df78b98148459de10aa93305dbb4a5230aa1da291a9b0e481918f99b7638d72bb687f97661d304ae145d64a474437a4ef39d7b8059332ddeb07e92bf6e0e3acaf8afedc93795e4511737ec1e7aab6d5bc9466afc950c1c17b48ae\nError = BLOCK_TYPE_IS_NOT_01\n\n# parameter missing (NOTE: this differs from upstream)\nVerify = RSA-2048\nDigest = SHA1\nInput = \"0123456789ABCDEF1234\"\nOutput = 3ec3fc29eb6e122bd7aa361cd09fe1bcbe85311096a7b9e4799cedfb2351ce0ab7fe4e75b4f6b37f67edd9c60c800f9ab941c0c157d7d880ca9de40c951d60fd293ae220d4bc510b1572d6e85a1bbbd8605b52e05f1c64fafdae59a1c2fbed214b7844d0134619de62851d5a0522e32e556e5950f3f97b8150e3f0dffee612c924201c27cd9bc8b423a71533380c276d3d59fcba35a2e80a1a192ec266a6c2255012cd86a349fe90a542b355fa3355b04da6cdf1df77f0e7bd44a90e880e1760266d233e465226f5db1c68857847d82072861ee266ddfc2e596845b77e1803274a579835ab5e4975d81d20b7df9cec7795489e4a2bdb8c1cf6a6b359945ac92c\nError = BAD_SIGNATURE\n\n# embedded digest too long\nVerify = RSA-2048\nDigest = SHA1\nInput = \"0123456789ABCDEF1234\"\nOutput = afec9a0d5330a08f54283bb4a9d4e7e7e70fc1342336c4c766fba713f66970151c6e27413c48c33864ea45a0238787004f338ed3e21b53b0fe9c1151c42c388cbc7cba5a06b706c407a5b48324fbe994dc7afc3a19fb3d2841e66222596c14cd72a0f0a7455a019d8eb554f59c0183f9552b75aa96fee8bf935945e079ca283d2bd3534a86f11351f6d6181fbf433e5b01a6d1422145c7a72214d3aacdd5d3af12b2d6bf6438f9f9a64010d8aeed801c87f0859412b236150b86a545f7239be022f4a7ad246b59df87514294cb4a4c7c5a997ee53c66054d9f38ca4e76c1f7af83c30f737ef70f83a45aebe18238ddb95e1998814ca4fc72388f1533147c169d\nError = BAD_SIGNATURE\n\n# embedded digest too short\nVerify = RSA-2048\nDigest = SHA1\nInput = \"0123456789ABCDEF1234\"\nOutput = afec9a0d5330a08f54283bb4a9d4e7e7e70fc1342336c4c766fba713f66970151c6e27413c48c33864ea45a0238787004f338ed3e21b53b0fe9c1151c42c388cbc7cba5a06b706c407a5b48324fbe994dc7afc3a19fb3d2841e66222596c14cd72a0f0a7455a019d8eb554f59c0183f9552b75aa96fee8bf935945e079ca283d2bd3534a86f11351f6d6181fbf433e5b01a6d1422145c7a72214d3aacdd5d3af12b2d6bf6438f9f9a64010d8aeed801c87f0859412b236150b86a545f7239be022f4a7ad246b59df87514294cb4a4c7c5a997ee53c66054d9f38ca4e76c1f7af83c30f737ef70f83a45aebe18238ddb95e1998814ca4fc72388f1533147c169d\nError = BAD_SIGNATURE\n\n# Garbage after DigestInfo\nVerify = RSA-2048\nDigest = SHA1\nInput = \"0123456789ABCDEF1234\"\nOutput = 9ee34872d4271a7d8808af0a4052a145a6d6a8437d00da3ed14428c7f087cd39f4d43334c41af63e7fa1ba363fee7bcef401d9d36a662abbab55ce89a696e1be0dfa19a5d09ca617dd488787b6048baaefeb29bc8688b2fe3882de2b77c905b5a8b56cf9616041e5ec934ba6de863efe93acc4eef783fe7f72a00fa65d6093ed32bf98ce527e62ccb1d56317f4be18b7e0f55d7c36617d2d0678a306e3350956b662ac15df45215dd8f6b314babb9788e6c272fa461e4c9b512a11a4b92bc77c3a4c95c903fccb238794eca5c750477bf56ea6ee6a167367d881b485ae3889e7c489af8fdf38e0c0f2aed780831182e34abedd43c39281b290774bf35cc25274\nError = BAD_SIGNATURE\n\n# invalid tag for parameter\nVerify = RSA-2048\nDigest = SHA1\nInput = \"0123456789ABCDEF1234\"\nOutput = 49525db4d44c755e560cba980b1d85ea604b0e077fcadd4ba44072a3487bbddb835016200a7d8739cce2dc3223d9c20cbdd25059ab02277f1f21318efd18e21038ec89aa9d40680987129e8b41ba33bceb86518bdf47268b921cce2037acabca6575d832499538d6f40cdba0d40bd7f4d8ea6ca6e2eec87f294efc971407857f5d7db09f6a7b31e301f571c6d82a5e3d08d2bb3a36e673d28b910f5bec57f0fcc4d968fd7c94d0b9226dec17f5192ad8b42bcab6f26e1bea1fdc3b958199acb00f14ebcb2a352f3afcedd4c09000128a603bbeb9696dea13040445253972d46237a25c7845e3b464e6984c2348ea1f1210a9ff0b00d2d72b50db00c009bb39f9\nError = BAD_SIGNATURE\n\n\n# RSA-PSS tests.\n\n# Zero salt leng",
-    "th makes the output deterministic\nSign = RSA-2048\nRSAPadding = PSS\nPSSSaltLength = 0\nDigest = SHA256\nInput = \"0123456789ABCDEF0123456789ABCDEF\"\nOutput = 4de433d5844043ef08d354da03cb29068780d52706d7d1e4d50efb7d58c9d547d83a747ddd0635a96b28f854e50145518482cb49e963054621b53c60c498d07c16e9c2789c893cf38d4d86900de71bde463bd2761d1271e358c7480a1ac0bab930ddf39602ad1bc165b5d7436b516b7a7858e8eb7ab1c420eeb482f4d207f0e462b1724959320a084e13848d11d10fb593e66bf680bf6d3f345fc3e9c3de60abbac37e1c6ec80a268c8d9fc49626c679097aa690bc1aa662b95eb8db70390861aa0898229f9349b4b5fdd030d4928c47084708a933144be23bd3c6e661b85b2c0ef9ed36d498d5b7320e8194d363d4ad478c059bae804181965e0b81b663158a\n\n# Verify of above signature\nVerify = RSA-2048-SPKI\nRSAPadding = PSS\nPSSSaltLength = 0\nDigest = SHA256\nInput = \"0123456789ABCDEF0123456789ABCDEF\"\nOutput = 4de433d5844043ef08d354da03cb29068780d52706d7d1e4d50efb7d58c9d547d83a747ddd0635a96b28f854e50145518482cb49e963054621b53c60c498d07c16e9c2789c893cf38d4d86900de71bde463bd2761d1271e358c7480a1ac0bab930ddf39602ad1bc165b5d7436b516b7a7858e8eb7ab1c420eeb482f4d207f0e462b1724959320a084e13848d11d10fb593e66bf680bf6d3f345fc3e9c3de60abbac37e1c6ec80a268c8d9fc49626c679097aa690bc1aa662b95eb8db70390861aa0898229f9349b4b5fdd030d4928c47084708a933144be23bd3c6e661b85b2c0ef9ed36d498d5b7320e8194d363d4ad478c059bae804181965e0b81b663158a\n\n# A non-zero salt length must be checked by round-tripping.\nSign = RSA-2048\nRSAPadding = PSS\nPSSSaltLength = 32\nDigest = SHA256\nInput = \"0123456789ABCDEF0123456789ABCDEF\"\nCheckVerify\n\n# Check a salt length with a non-standard digest length, to verify things are\n# not just working due to defaults. (The current default is a maximum salt\n# length, but the ecosystem has converged on matching the digest length, so we\n# may change this in the future.)\nSign = RSA-2048\nRSAPadding = PSS\nPSSSaltLength = 42\nDigest = SHA256\nInput = \"0123456789ABCDEF0123456789ABCDEF\"\nCheckVerify\n\n# Auto-detected salt length\nVerify = RSA-2048-SPKI\nRSAPadding = PSS\nPSSSaltLength = -2\nDigest = SHA256\nInput = \"0123456789ABCDEF0123456789ABCDEF\"\nOutput = 4de433d5844043ef08d354da03cb29068780d52706d7d1e4d50efb7d58c9d547d83a747ddd0635a96b28f854e50145518482cb49e963054621b53c60c498d07c16e9c2789c893cf38d4d86900de71bde463bd2761d1271e358c7480a1ac0bab930ddf39602ad1bc165b5d7436b516b7a7858e8eb7ab1c420eeb482f4d207f0e462b1724959320a084e13848d11d10fb593e66bf680bf6d3f345fc3e9c3de60abbac37e1c6ec80a268c8d9fc49626c679097aa690bc1aa662b95eb8db70390861aa0898229f9349b4b5fdd030d4928c47084708a933144be23bd3c6e661b85b2c0ef9ed36d498d5b7320e8194d363d4ad478c059bae804181965e0b81b663158a\n\n# Signing with salt length -1 means to match the digest length.\nSign = RSA-2048\nRSAPadding = PSS\nPSSSaltLength = -1\nVerifyPSSSaltLength = 32\nDigest = SHA256\nInput = \"0123456789ABCDEF0123456789ABCDEF\"\nCheckVerify\n\n# Signing with salt length -2 means to maximize the salt length.\nSign = RSA-2048\nRSAPadding = PSS\nPSSSaltLength = -2\nVerifyPSSSaltLength = 222  # 256 - 32 - 2\nDigest = SHA256\nInput = \"0123456789ABCDEF0123456789ABCDEF\"\nCheckVerify\n\n# Wrong digest\nVerify = RSA-2048-SPKI\nRSAPadding = PSS\nPSSSaltLength = 0\nDigest = SHA256\nInput = \"00000000000000000000000000000000\"\nOutput = 4de433d5844043ef08d354da03cb29068780d52706d7d1e4d50efb7d58c9d547d83a747ddd0635a96b28f854e50145518482cb49e963054621b53c60c498d07c16e9c2789c893cf38d4d86900de71bde463bd2761d1271e358c7480a1ac0bab930ddf39602ad1bc165b5d7436b516b7a7858e8eb7ab1c420eeb482f4d207f0e462b1724959320a084e13848d11d10fb593e66bf680bf6d3f345fc3e9c3de60abbac37e1c6ec80a268c8d9fc49626c679097aa690bc1aa662b95eb8db70390861aa0898229f9349b4b5fdd030d4928c47084708a933144be23bd3c6e661b85b2c0ef9ed36d498d5b7320e8194d363d4ad478c059bae804181965e0b81b663158a\nError = BAD_SIGNATURE\n\n# Digest too short\nVerify = RSA-2048-SPKI\nRSAPadding = PSS\nPSSSaltLength = 0\nDigest = SHA256\nInput = \"0123456789ABCDEF0123456789ABCDE\"\nOutput = 4de433d5844043ef08d354da03cb29068780d52706d7d1e4d50efb7d58c9d547d83a747ddd0635a96b28f854e50145518482cb49e963054621b53c60c498d07c16e9c2789c893cf38d4d86900de71bde463bd2761d1271e358c7480a1ac0bab930ddf39602ad1bc165b5d7436b516b7a7858e8eb7ab1c420eeb482f4d207f0e462b1724959320a084e13848d11d10fb593e66bf680bf6d3f345fc3e9c3de60abbac37e1c6ec80a268c8d9fc49626c679097aa690bc1aa662b95eb8db70390861aa0898229f9349b4b5fdd030d4928c47084708a933144be23bd3c6e661b85b2c0ef9ed36d498d5b7320e8194d363d4ad478c059bae804181965e0b81b663158a\nError = INVALID_MESSAGE_LENGTH\n\n# Digest too long\nVerify = RSA-2048-SPKI\nRSAPadding = PSS\nPSSSaltLength = 0\nDigest = SHA256\nInput = \"0123456789ABCDEF0123456789ABCDEF0\"\nOutput = 4de433d5844043ef08d354da03cb29068780d52706d7d1e4d50efb7d58c9d547d83a747ddd0635a96b28f854e50145518482cb49e963054621b53c60c498d07c16e9c2789c893cf38d4d86900de71bde463bd2761d1271e358c7480a1ac0bab930ddf39602ad1bc165b5d7436b516b7a7858e8eb7ab1c420eeb482f4d207f0e462b1724959320a084e13848d11d10fb593e66bf680bf6d3f345fc3e9c3de60abbac37e1c6ec80a268c8d9fc49626c679097aa690bc1aa662b95eb8db70390861aa0898229f9349b4b5fdd030d4928c47084708a933144be23bd3c6e661b85b2c0ef9ed36d498d5b7320e8194d363d4ad478c059bae804181965e0b81b663158a\nError = INVALID_MESSAGE_LENGTH\n\n# Wrong salt length\nVerify = RSA-2048\nRSAPadding = PSS\nPSSSaltLength = 2\nDigest = SHA256\nInput = \"0123456789ABCDEF0123456789ABCDEF\"\nOutput = 4de433d5844043ef08d354da03cb29068780d52706d7d1e4d50efb7d58c9d547d83a747ddd0635a96b28f854e50145518482cb49e963054621b53c60c498d07c16e9c2789c893cf38d4d86900de71bde463bd2761d1271e358c7480a1ac0bab930ddf39602ad1bc165b5d7436b516b7a7858e8eb7ab1c420eeb482f4d207f0e462b1724959320a084e13848d11d10fb593e66bf680bf6d3f345fc3e9c3de60abbac37e1c6ec80a268c8d9fc49626c679097aa690bc1aa662b95eb8db70390861aa0898229f9349b4b5fdd030d4928c47084708a933144be23bd3c6e661b85b2c0ef9ed36d498d5b7320e8194d363d4ad478c059bae804181965e0b81b663158a\nError = SLEN_CHECK_FAILED\n\n# Wrong salt length using implicit hash length\nVerify = RSA-2048\nRSAPadding = PSS\nPSSSaltLength = -1\nDigest = SHA256\nInput = \"0123456789ABCDEF0123456789ABCDEF\"\nOutput = 4de433d5844043ef08d354da03cb29068780d52706d7d1e4d50efb7d58c9d547d83a747ddd0635a96b28f854e50145518482cb49e963054621b53c60c498d07c16e9c2789c893cf38d4d86900de71bde463bd2761d1271e358c7480a1ac0bab930ddf39602ad1bc165b5d7436b516b7a7858e8eb7ab1c420eeb482f4d207f0e462b1724959320a084e13848d11d10fb593e66bf680bf6d3f345fc3e9c3de60abbac37e1c6ec80a268c8d9fc49626c679097aa690bc1aa662b95eb8db70390861aa0898229f9349b4b5fdd030d4928c47084708a933144be23bd3c6e661b85b2c0ef9ed36d498d5b7320e8194d363d4ad478c059bae804181965e0b81b663158a\nError = SLEN_CHECK_FAILED\n\n# Wrong MGF1 digest, SHA-1\nVerify = RSA-2048\nRSAPadding = PSS\nPSSSaltLength = 0\nDigest = SHA256\nMGF1Digest = SHA1\nInput = \"0123456789ABCDEF0123456789ABCDEF\"\nOutput = 4de433d5844043ef08d354da03cb29068780d52706d7d1e4d50efb7d58c9d547d83a747ddd0635a96b28f854e50145518482cb49e963054621b53c60c498d07c16e9c2789c893cf38d4d86900de71bde463bd2761d1271e358c7480a1ac0bab930ddf39602ad1bc165b5d7436b516b7a7858e8eb7ab1c420eeb482f4d207f0e462b1724959320a084e13848d11d10fb593e66bf680bf6d3f345fc3e9c3de60abbac37e1c6ec80a268c8d9fc49626c679097aa690bc1aa662b95eb8db70390861aa0898229f9349b4b5fdd030d4928c47084708a933144be23bd3c6e661b85b2c0ef9ed36d498d5b7320e8194d363d4ad478c059bae804181965e0b81b663158a\n# If SHA-1, this input happens to succeed recovering a salt length, but it does\n# not match.\nError = SLEN_CHECK_FAILED\n\n# Wrong MGF1 digest, SHA-384\nVerify = RSA-2048\nRSAPadding = PSS\nPSSSaltLength = 0\nDigest = SHA256\nMGF1Digest = SHA384\nInput = \"0123456789ABCDEF0123456789ABCDEF\"\nOutput = 4de433d5844043ef08d354da03cb29068780d52706d7d1e4d50efb7d58c9d547d83a747ddd0635a96b28f854e50145518482cb49e963054621b53c60c498d07c16e9c2789c893cf38d4d86900de71bde463bd2761d1271e358c7480a1ac0bab930ddf39602ad1bc165b5d7436b516b7a7858e8eb7ab1c420eeb482f4d207f0e462b1724959320a084e13848d11d10fb593e66bf680bf6d3f345fc3e9c3de60abbac37e1c6ec80a268c8d9fc49626c679097aa690bc1aa662b95eb8db70390861aa0898229f9349b4b5fdd030d4928c47084708a933144be23bd3c6e661b85b2c0ef9ed36d498d5b7320e8194d363d4ad478c059bae804181965e0b81b663158a\n# If SHA-384, this input happens fail to recover the salt length altogether.\nError = SLEN_RECOVERY_FAILED\n\n# The salt length is too large for the modulus (signing).\nSign = RSA-2048\nRSAPadding = PSS\nPSSSaltLength = 223\nDigest = SHA256\nInput = ",
-    "\"0123456789ABCDEF0123456789ABCDEF\"\nError = DATA_TOO_LARGE_FOR_KEY_SIZE\n\n# The salt length is too large for the modulus (verifying).\nVerify = RSA-2048\nRSAPadding = PSS\nPSSSaltLength = 223\nDigest = SHA256\nInput = \"0123456789ABCDEF0123456789ABCDEF\"\nOutput = 4de433d5844043ef08d354da03cb29068780d52706d7d1e4d50efb7d58c9d547d83a747ddd0635a96b28f854e50145518482cb49e963054621b53c60c498d07c16e9c2789c893cf38d4d86900de71bde463bd2761d1271e358c7480a1ac0bab930ddf39602ad1bc165b5d7436b516b7a7858e8eb7ab1c420eeb482f4d207f0e462b1724959320a084e13848d11d10fb593e66bf680bf6d3f345fc3e9c3de60abbac37e1c6ec80a268c8d9fc49626c679097aa690bc1aa662b95eb8db70390861aa0898229f9349b4b5fdd030d4928c47084708a933144be23bd3c6e661b85b2c0ef9ed36d498d5b7320e8194d363d4ad478c059bae804181965e0b81b663158a\nError = DATA_TOO_LARGE\n\n# The hash is too large for the modulus (signing).\nSign = RSA-512\nRSAPadding = PSS\nPSSSaltLength = 0\nDigest = SHA512\nInput = \"0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF\"\nError = DATA_TOO_LARGE_FOR_KEY_SIZE\n\nSign = RSA-512\nRSAPadding = PSS\nPSSSaltLength = -2\nDigest = SHA512\nInput = \"0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF\"\nError = DATA_TOO_LARGE_FOR_KEY_SIZE\n\n# The hash is too large for the modulus (verifying).\nVerify = RSA-512\nRSAPadding = PSS\nPSSSaltLength = 0\nDigest = SHA512\nInput = \"0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF\"\nOutput = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\nError = DATA_TOO_LARGE\n\nVerify = RSA-512\nRSAPadding = PSS\nPSSSaltLength = -2\nDigest = SHA512\nInput = \"0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF\"\nOutput = 457001d9ca50a93385fc5ec721c9dbbe7a0f2e9e4a2f846a30a8811dde66347b83901c7492039243537c7a667fafffd69049bcbd36afd0010d9b425e2d8785c1\nError = DATA_TOO_LARGE\n\n# Sample RSA-515 signature.\nVerify = RSA-515\nRSAPadding = PSS\nPSSSaltLength = 0\nDigest = SHA256\nInput = \"0123456789ABCDEF0123456789ABCDEF\"\nOutput = 00c5926600f160f85e7fe950cfe123908384211cd8fe25c90cb8e8cc0593308e9aa2efe3acbf100ec1658ded8f72f506525fc2c44f06251b08d896e7bb3f05b135\n\n# The above, but with too few leading zeros.\nVerify = RSA-515\nRSAPadding = PSS\nPSSSaltLength = 0\nDigest = SHA256\nInput = \"0123456789ABCDEF0123456789ABCDEF\"\nOutput = c5926600f160f85e7fe950cfe123908384211cd8fe25c90cb8e8cc0593308e9aa2efe3acbf100ec1658ded8f72f506525fc2c44f06251b08d896e7bb3f05b135\nError = DATA_LEN_NOT_EQUAL_TO_MOD_LEN\n\n# The above, but with too many leading zeros.\nVerify = RSA-515\nRSAPadding = PSS\nPSSSaltLength = 0\nDigest = SHA256\nInput = \"0123456789ABCDEF0123456789ABCDEF\"\nOutput = 0000c5926600f160f85e7fe950cfe123908384211cd8fe25c90cb8e8cc0593308e9aa2efe3acbf100ec1658ded8f72f506525fc2c44f06251b08d896e7bb3f05b135\nError = DATA_LEN_NOT_EQUAL_TO_MOD_LEN\n\n# The above with an invalid leading byte. The top few bits of EM are required to\n# be cleared.\nVerify = RSA-515\nRSAPadding = PSS\nPSSSaltLength = 0\nDigest = SHA256\nInput = \"0123456789ABCDEF0123456789ABCDEF\"\nOutput = 007f803c832a2090aea04013d9fa9c1630732a1625232826d235f0950f7050d3fb0eb06ef9ea8b260fad68e1165a2d770a8c7fc7a8aaa68620b021fc19c97e0041\nError = FIRST_OCTET_INVALID\n\n# The above with an invalid trailing byte.\nVerify = RSA-515\nRSAPadding = PSS\nPSSSaltLength = 0\nDigest = SHA256\nInput = \"0123456789ABCDEF0123456789ABCDEF\"\nOutput = 03e68555035891eb08d96c0967db22328cd892ad2856d88516ecb946bfdba732bb029b5c0dfa2119ed7349897d2324e95e86d91d0c4afc82700a36db8933abbf58\nError = LAST_OCTET_INVALID\n\n# Non-zero salt length.\nVerify = RSA-2048-SPKI\nRSAPadding = PSS\nPSSSaltLength = 32\nDigest = SHA256\nInput = \"0123456789ABCDEF0123456789ABCDEF\"\nOutput = 4065b284b0a6e98d4c41a8427007f878d8dd61599c87764fa79b8bf03f030c48127a4b1a5af5a6e0cf9055e57a1f47e5b0c0d8c600e78369cf1c39374899fac91a812692aa2216ba10900ce85a5cf7fddcafb726e4b83479c5bb7b3b84b08ffe183b4c2973aa3193ec7b7d4ea73bf1b579c6657b78ad7800e1975a4838c28ffe353fafef96be27b5c69677760a71b6f4df65ba6fe6b3565580a536f966928294c6e9ece807a90c1477779bcbfa3a250e98d685097c162c1c8c56ab02bd2e16eec7a019b51c067bdba7fa8cd5460796e22c607a8b6d12e1deb9be51c6943c46590f416800c48bb4cbb8c409d316573e59eadf7d3b9e6e5c2d0e570692e511e139\n\n# Non-zero salt length, wrong salt length.\nVerify = RSA-2048-SPKI\nRSAPadding = PSS\nPSSSaltLength = 31\nDigest = SHA256\nInput = \"0123456789ABCDEF0123456789ABCDEF\"\nOutput = 4065b284b0a6e98d4c41a8427007f878d8dd61599c87764fa79b8bf03f030c48127a4b1a5af5a6e0cf9055e57a1f47e5b0c0d8c600e78369cf1c39374899fac91a812692aa2216ba10900ce85a5cf7fddcafb726e4b83479c5bb7b3b84b08ffe183b4c2973aa3193ec7b7d4ea73bf1b579c6657b78ad7800e1975a4838c28ffe353fafef96be27b5c69677760a71b6f4df65ba6fe6b3565580a536f966928294c6e9ece807a90c1477779bcbfa3a250e98d685097c162c1c8c56ab02bd2e16eec7a019b51c067bdba7fa8cd5460796e22c607a8b6d12e1deb9be51c6943c46590f416800c48bb4cbb8c409d316573e59eadf7d3b9e6e5c2d0e570692e511e139\nError = SLEN_CHECK_FAILED\n\n# Non-zero salt length, match hash length.\nVerify = RSA-2048-SPKI\nRSAPadding = PSS\nPSSSaltLength = -1\nDigest = SHA256\nInput = \"0123456789ABCDEF0123456789ABCDEF\"\nOutput = 4065b284b0a6e98d4c41a8427007f878d8dd61599c87764fa79b8bf03f030c48127a4b1a5af5a6e0cf9055e57a1f47e5b0c0d8c600e78369cf1c39374899fac91a812692aa2216ba10900ce85a5cf7fddcafb726e4b83479c5bb7b3b84b08ffe183b4c2973aa3193ec7b7d4ea73bf1b579c6657b78ad7800e1975a4838c28ffe353fafef96be27b5c69677760a71b6f4df65ba6fe6b3565580a536f966928294c6e9ece807a90c1477779bcbfa3a250e98d685097c162c1c8c56ab02bd2e16eec7a019b51c067bdba7fa8cd5460796e22c607a8b6d12e1deb9be51c6943c46590f416800c48bb4cbb8c409d316573e59eadf7d3b9e6e5c2d0e570692e511e139\n\n# Non-zero salt length, auto-detected.\nVerify = RSA-2048-SPKI\nRSAPadding = PSS\nPSSSaltLength = -2\nDigest = SHA256\nInput = \"0123456789ABCDEF0123456789ABCDEF\"\nOutput = 4065b284b0a6e98d4c41a8427007f878d8dd61599c87764fa79b8bf03f030c48127a4b1a5af5a6e0cf9055e57a1f47e5b0c0d8c600e78369cf1c39374899fac91a812692aa2216ba10900ce85a5cf7fddcafb726e4b83479c5bb7b3b84b08ffe183b4c2973aa3193ec7b7d4ea73bf1b579c6657b78ad7800e1975a4838c28ffe353fafef96be27b5c69677760a71b6f4df65ba6fe6b3565580a536f966928294c6e9ece807a90c1477779bcbfa3a250e98d685097c162c1c8c56ab02bd2e16eec7a019b51c067bdba7fa8cd5460796e22c607a8b6d12e1deb9be51c6943c46590f416800c48bb4cbb8c409d316573e59eadf7d3b9e6e5c2d0e570692e511e139\n\n\n# RSA decrypt\n\nDecrypt = RSA-2048\nInput = 550af55a2904e7b9762352f8fb7fa235a9cb053aacb2d5fcb8ca48453cb2ee3619746c701abf2d4cc67003471a187900b05aa812bd25ed05c675dfc8c97a24a7bf49bd6214992cad766d05a9a2b57b74f26a737e0237b8b76c45f1f226a836d7cfbc75ba999bdbe48dbc09227aa46c88f21dccba7840141ad5a5d71fd122e6bd6ac3e564780dfe623fc1ca9b995a6037bf0bbd43b205a84ac5444f34202c05ce9113087176432476576de6ffff9a52ea57c08be3ec2f49676cb8e12f762ac71fa3c321e00ac988910c85ff52f93825666ce0d40ffaa0592078919d4493f46d95ccf76364c6d57760dd0b64805f9afc76a2365a5575ca301d5103f0ea76cb9a78\nOutput = \"Hello World\"\n\n# Corrupted ciphertext\nDecrypt = RSA-2048\nInput = 550af55a2904e7b9762352f8fb7fa235a9cb053aacb2d5fcb8ca48453cb2ee3619746c701abf2d4cc67003471a187900b05aa812bd25ed05c675dfc8c97a24a7bf49bd6214992cad766d05a9a2b57b74f26a737e0237b8b76c45f1f226a836d7cfbc75ba999bdbe48dbc09227aa46c88f21dccba7840141ad5a5d71fd122e6bd6ac3e564780dfe623fc1ca9b995a6037bf0bbd43b205a84ac5444f34202c05ce9113087176432476576de6ffff9a52ea57c08be3ec2f49676cb8e12f762ac71fa3c321e00ac988910c85ff52f93825666ce0d40ffaa0592078919d4493f46d95ccf76364c6d57760dd0b64805f9afc76a2365a5575ca301d5103f0ea76cb9a79\nError = PKCS_DECODING_ERROR\n\n# OAEP padding\nDecrypt = RSA-2048\nRSAPadding = OAEP\nInput = 458708dfbd42a1297ce7a9c86c7087ab80b1754810929b89c5107ca55368587686986fce94d86cc1595b3fb736223a656ec0f34d18ba1cc5665593610f56c58e26b272d584f3d983a5c91085700755aebd921fb280bba3eda7046ec07b43e7298e52d59edc92be4639a8ce08b2f85976ecf6d98cc469eeb9d5d8e2a32ea8a6626edafe1038b3df455668a9f3c77cad8b92fb872e00058c3d2a7ede1a1f03fc5622084ae04d9d24f6bf0995c58d35b93b699b9763595e123f2ab0863cc9229eb290e2ede7715c7a8f39e0b9a3e2e1b56ebb62f1cbfbb5986fb212ebd785b83d01d968b11d1756c7337f70c1f1a63bff03608e24f3a2fd44e67f832a8701c5d5af\nOutput = \"Hello World\"\n\n# OAEP padding with label and custom hash.\nDecrypt = RSA-2048\nRSAPadding = OAEP\nOAEPDigest = SHA512\nOAEPLabel = 00112233445566778899aabbccddeeff\nInput = 48b956c22b8e40cc38f",
-    "0893672ddf488fc806cf1fcc6239c66dd8345eb543d6b5cac589e6c7ae86dac1c2436c4d72c48009a737b2c649e6000dbab17203e4d9c078bd70b649700a0830d4ddc396af0c48973177a229e48259d93247f04f76474c7611b530c66f020c4da2cc861c2e4104831ecc0336e0cb10d6520fdefd0b33606f5cdd736dd439583b9b6011cce99623c93caf5f76e21e9fefab414795dd5ac12cba551be74ebf266834fcffab182c5e7c9b6c064df154cb26ddfd4fe2fd87590005f4bf45e776a0082803e9f68995b8eeb4c6802c67b5ef349e5b2dc0cf7a12fc097030f2bd28f0253f17129b04c82993a12957728b35880fdd2f8d0cc469f\nOutput = \"Hello World\"\n\n# OAEP padding, corrupted ciphertext\nDecrypt = RSA-2048\nRSAPadding = OAEP\nInput = 458708dfbd42a1297ce7a9c86c7087ab80b1754810929b89c5107ca55368587686986fce94d86cc1595b3fb736223a656ec0f34d18ba1cc5665593610f56c58e26b272d584f3d983a5c91085700755aebd921fb280bba3eda7046ec07b43e7298e52d59edc92be4639a8ce08b2f85976ecf6d98cc469eeb9d5d8e2a32ea8a6626edafe1038b3df455668a9f3c77cad8b92fb872e00058c3d2a7ede1a1f03fc5622084ae04d9d24f6bf0995c58d35b93b699b9763595e123f2ab0863cc9229eb290e2ede7715c7a8f39e0b9a3e2e1b56ebb62f1cbfbb5986fb212ebd785b83d01d968b11d1756c7337f70c1f1a63bff03608e24f3a2fd44e67f832a8701c5d5ac\nError = OAEP_DECODING_ERROR\n\n# Test that RSA encryption successfully round-trips through decryption\n# with various parameters.\nEncrypt = RSA-2048\nInput = \"Hello World\"\nCheckDecrypt\n\nEncrypt = RSA-2048\nRSAPadding = OAEP\nInput = \"Hello World\"\nCheckDecrypt\n\nEncrypt = RSA-2048\nRSAPadding = OAEP\nOAEPDigest = SHA512\nOAEPLabel = 00112233445566778899aabbccddeeff\nInput = \"Hello World\"\nCheckDecrypt\n\n# Though we will never generate such a key, test that RSA keys where p < q work\n# properly.\nPrivateKey = RSA-Swapped\nType = RSA\nInput = 30820275020100300d06092a864886f70d01010105000482025f3082025b02010002818100ab28f98747934779011417d5bbb4095eae6f48ed09e13081616cf390aac75b10a206a98953d402647dfef7fa363be2765a303b05ec388bd9a1d75123a1205b4ecb43c33f2e37d3e30842181d694a3acfc39afc52554946e699d97d97066596a46725ce6dea322623afcafecbd2884d9a0c5eae9c4d7da8874c29c19edb762e1902030100010281800d637ea568e169f15ab6be288f6ec55edd29425c9c6dbb941b5160fa1b89cda34ef15378b5107c016d63b0f52721e71497f876dd7f3d6b1f228c4bc20c3c12384644200e91130c9195660d1e706f55b2accf00c5e2174a1d9ee289f0e763ee58860485ec97d19d7fa2df38af5b5910b1fa52087768d288e6ec4c8d5eca23c8d3024100be757a24dc2c923692d964693b2d71ca33ccb2f946f9e5232d2090b715a97dca554068fab8876105bc9ed6dccfd0917c5e0b80339306535c3eeb787e89397bc7024100e60f5c9e52434da079b8c641791a81a96daa4d9921a07e5b48292a9fce230df7c9fc2b97b5e38834ed5caaa387a0bca35c474e989a68dd65b79a6f691a74471f0240438ccf017bc5a3260ff76291a01782204136fcd344c524ebd0f997da17a8c1a09d93f6a7d602cdfa86e79f3539cfb389f4a1079b432e1f2abc762f8a51893dc9024046604ca4e1e554c9d27283b363a888219c3a8ca25b770d303f52d8872a37eefdedfc0619d2ba57e058fc0ff71676453e73ec1c4ef26d41ccebed824754a05d6102404445374d8450e753e0a42085b56b0d6d500b3e3518536dc8f12ec8fd77aa75491835327ac0e12d73b5c3f1b09d03f6a24fe63b9c551dee6559b625435ec92429\n\nSign = RSA-Swapped\nDigest = SHA256\nInput = \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\"\nOutput = 07fa4e3de9c002c41c952dc292ef5a814c4c17dc1a6cf958c4c971e8089676d6661b442270ef9295c41e5385c9628aa1bdee2cc2558b8473ba212f2ba04b9ff2264c19187b9506b1d0a1cc2751844cc8dedf555d62ce81bc0e70bfe83d0184ee964593af91b9b327c0fb272c799148cd8737d412cbf36c2ad25fd66977bf805f\n\n# Though we will never generate such a key, test that RSA keys where p and q are\n# different sizes work properly.\nPrivateKey = RSA-PrimeMismatch\nType = RSA\nInput = 30820295020100300d06092a864886f70d01010105000482027f3082027b02010002818100c766f4fef89f5e9a8e13ed500fb38523ea94d7f8be066900eee58c913b4c6fdcb13d63d39b9108feabcefd1ffd04776403dc58f968ae817977d0809e567d8af512d604a0e9cb448fa5e402204ee519712a5ebbfd002faf8169495a782f54366b4665aac0d968bfec63c5446b6f9b13061c7f3d1f3f1b6bede8fff881b410a66f0203010001028180528c062f49485c771a0b18ca747d8a47f8941ea63c305626cb3f1f067e6861c4441c432687dbd08d484aac3b01f3ffdc3b762c719167f7cb22e565aa6acd597306ef6f7828b9720e9d440816186d940c4c5a9720dddf71fe0b59483f02a751515c8c27e43c575d6725d55f5bb77e0f977773b00afc058cfab6617ec90d0b62a9026100cb8f97c37b4fbc298b645bc3dc0526f8a4274e9a193b33c3acb76499b5b96330e4b586cbaa56368ffc12644952322253bc669496d572c0980f125fd7273739cf790d24401052b13732114d397c8c16a44716dc62d2320fb1ced99290dfd53e07022100fac51ac653609cdaba53280c6b6f209052e270be0c3c68fe8b37d6bf05fbba59026038dff2f04c58d7e2e7ae6fb1469d2de954bc22cb0d77ac1be4fb0ca1a1d39d7240c4b357de4cde4bd68b30f8077e38771af1b25c7e60e48cd7d1337402e1fc460ab57046720918b8aa4589452196669119c7ba65e602d4bdc264a9fdce7c5f2b0220773af0180bdc8bb7938fa6230191bcb1e236b7d4248d347e9242e25fc0c0874102605c4894cde334889f5b52ed8f86a2ee9c1fbe4166287e24ce44f3093bff383962f08043842f6ff3e6002104b0e29442c4a4483c5d06e2254fbe5e3930de3d0e28af10e96c6e341a4b8859382dbba24536a38ae71118e3e22413a93f298a7f744c\n\nSign = RSA-PrimeMismatch\nDigest = SHA256\nInput = \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\"\nOutput = 6192b1ce630c87d02e8245fd74d4f6ecac37eef979d188c8fa48c4d355fbe814e7dd3152f42bb020d769b540d11867af5b947387b8c99158d56901ff3708e423931178213916ae1002f162c9d497aacacdcb20e6ffe7ed40138a253fc943ddf3587433df5831a3ce46aeefce358a009bf6bad12d82d77424c2755d984d7da196\n\n\n# EC tests\n\nVerify = P-256\nDigest = SHA1\nInput = \"0123456789ABCDEF1234\"\nOutput = 3045022100b1d1cb1a577035bccdd5a86c6148c2cc7c633cd42b7234139b593076d041e15202201898cdd52b41ca502098184b409cf83a21bc945006746e3b7cea52234e043ec8\n\nVerify = P-256-SPKI\nDigest = SHA1\nInput = \"0123456789ABCDEF1234\"\nOutput = 3045022100b1d1cb1a577035bccdd5a86c6148c2cc7c633cd42b7234139b593076d041e15202201898cdd52b41ca502098184b409cf83a21bc945006746e3b7cea52234e043ec8\n\n# Digest too long\nVerify = P-256\nDigest = SHA1\nInput = \"0123456789ABCDEF12345\"\nOutput = 3045022100b1d1cb1a577035bccdd5a86c6148c2cc7c633cd42b7234139b593076d041e15202201898cdd52b41ca502098184b409cf83a21bc945006746e3b7cea52234e043ec8\nError = BAD_SIGNATURE\n\n# Digest too short\nVerify = P-256\nDigest = SHA1\nInput = \"0123456789ABCDEF123\"\nOutput = 3045022100b1d1cb1a577035bccdd5a86c6148c2cc7c633cd42b7234139b593076d041e15202201898cdd52b41ca502098184b409cf83a21bc945006746e3b7cea52234e043ec8\nError = BAD_SIGNATURE\n\n# Digest invalid\nVerify = P-256\nDigest = SHA1\nInput = \"0123456789ABCDEF1235\"\nOutput = 3045022100b1d1cb1a577035bccdd5a86c6148c2cc7c633cd42b7234139b593076d041e15202201898cdd52b41ca502098184b409cf83a21bc945006746e3b7cea52234e043ec8\nError = BAD_SIGNATURE\n\n# Invalid signature\nVerify = P-256\nDigest = SHA1\nInput = \"0123456789ABCDEF1234\"\nOutput = 3045022100b1d1cb1a577035bccdd5a86c6148c2cc7c633cd42b7234139b593076d041e15202201898cdd52b41ca502098184b409cf83a21bc945006746e3b7cea52234e043ec7\nError = BAD_SIGNATURE\n\n# Garbage after signature\nVerify = P-256\nDigest = SHA1\nInput = \"0123456789ABCDEF1234\"\nOutput = 3045022100b1d1cb1a577035bccdd5a86c6148c2cc7c633cd42b7234139b593076d041e15202201898cdd52b41ca502098184b409cf83a21bc945006746e3b7cea52234e043ec800\nError = BAD_SIGNATURE\n\n# BER signature\nVerify = P-256\nDigest = SHA1\nInput = \"0123456789ABCDEF1234\"\nOutput = 3080022100b1d1cb1a577035bccdd5a86c6148c2cc7c633cd42b7234139b593076d041e15202201898cdd52b41ca502098184b409cf83a21bc945006746e3b7cea52234e043ec80000\nError = BAD_SIGNATURE\n\n\n# Additional RSA-PSS and RSA-OAEP tests converted from\n# ftp://ftp.rsasecurity.com/pub/pkcs/pkcs-1/pkcs-1v2-1-vec.zip\n\nPublicKey = RSA-PSS-1\nType = RSA\nInput = 30819f300d06092a864886f70d010101050003818d0030818902818100a56e4a0e701017589a5187dc7ea841d156f2ec0e36ad52a44dfeb1e61f7ad991d8c51056ffedb162b4c0f283a12a88a394dff526ab7291cbb307ceabfce0b1dfd5cd9508096d5b2b8b6df5d671ef6377c0921cb23c270a70e2598e6ff89d19f105acc2d3f0cb35f29280e1386b6f64c4ef22e1e1f20d0ce8cffb2249bd9a21370203010001\n\nVerify = RSA-PSS-1\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = cd8b6538cb8e8de566b68bd067569dbf1ee2718e\nOutput = 9074308fb598e9701b2294388e52f971faac2b60a5145af185df5287b5ed2887e57ce7fd44dc8634e407c8e0e4360bc226f3ec227f9d9e54638e8d31f5051215df6ebb9c2f9579aa77598a38f914b5b9c1bd83c4e2f9f382a0d0aa3542ffee65984a601bc69eb28deb27dca12c82c2d4c3f66cd500f1ff2b994d8a4e30cbb33c\n\nVerify = RSA-PSS-1\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = e35befc17a1d160b9ce35fbd8eb16e7ee491d3fd\nOutput = 3ef7f46e831bf92b32274142a585ffcefbdca7b32ae90d10fb0f0c729984f04ef29a9df0780775ce43739b97838390db0a5505e63de927028d9d29b219ca2c4517832558a55d694a6",
-    "d25b9dab66003c4cccd907802193be5170d26147d37b93590241be51c25055f47ef62752cfbe21418fafe98c22c4d4d47724fdb5669e843\n\nVerify = RSA-PSS-1\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = 0652ec67bcee30f9d2699122b91c19abdba89f91\nOutput = 666026fba71bd3e7cf13157cc2c51a8e4aa684af9778f91849f34335d141c00154c4197621f9624a675b5abc22ee7d5baaffaae1c9baca2cc373b3f33e78e6143c395a91aa7faca664eb733afd14d8827259d99a7550faca501ef2b04e33c23aa51f4b9e8282efdb728cc0ab09405a91607c6369961bc8270d2d4f39fce612b1\n\nVerify = RSA-PSS-1\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = 39c21c4cceda9c1adf839c744e1212a6437575ec\nOutput = 4609793b23e9d09362dc21bb47da0b4f3a7622649a47d464019b9aeafe53359c178c91cd58ba6bcb78be0346a7bc637f4b873d4bab38ee661f199634c547a1ad8442e03da015b136e543f7ab07c0c13e4225b8de8cce25d4f6eb8400f81f7e1833b7ee6e334d370964ca79fdb872b4d75223b5eeb08101591fb532d155a6de87\n\nVerify = RSA-PSS-1\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = 36dae913b77bd17cae6e7b09453d24544cebb33c\nOutput = 1d2aad221ca4d31ddf13509239019398e3d14b32dc34dc5af4aeaea3c095af73479cf0a45e5629635a53a018377615b16cb9b13b3e09d671eb71e387b8545c5960da5a64776e768e82b2c93583bf104c3fdb23512b7b4e89f633dd0063a530db4524b01c3f384c09310e315a79dcd3d684022a7f31c865a664e316978b759fad\n\nVerify = RSA-PSS-1\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = 45eef191f4f79c31fe5d2ede7e5098994e929d2d\nOutput = 2a34f6125e1f6b0bf971e84fbd41c632be8f2c2ace7de8b6926e31ff93e9af987fbc06e51e9be14f5198f91f3f953bd67da60a9df59764c3dc0fe08e1cbef0b75f868d10ad3fba749fef59fb6dac46a0d6e504369331586f58e4628f39aa278982543bc0eeb537dc61958019b394fb273f215858a0a01ac4d650b955c67f4c58\n\nPublicKey = RSA-PSS-2\nType = RSA\nInput = 30819f300d06092a864886f70d010101050003818d0030818902818101d40c1bcf97a68ae7cdbd8a7bf3e34fa19dcca4ef75a47454375f94514d88fed006fb829f8419ff87d6315da68a1ff3a0938e9abb3464011c303ad99199cf0c7c7a8b477dce829e8844f625b115e5e9c4a59cf8f8113b6834336a2fd2689b472cbb5e5cabe674350c59b6c17e176874fb42f8fc3d176a017edc61fd326c4b33c90203010001\n\nVerify = RSA-PSS-2\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = 5c81a3e2a658246628cd0ee8b00bb4c012bc9739\nOutput = 014c5ba5338328ccc6e7a90bf1c0ab3fd606ff4796d3c12e4b639ed9136a5fec6c16d8884bdd99cfdc521456b0742b736868cf90de099adb8d5ffd1deff39ba4007ab746cefdb22d7df0e225f54627dc65466131721b90af445363a8358b9f607642f78fab0ab0f43b7168d64bae70d8827848d8ef1e421c5754ddf42c2589b5b3\n\nVerify = RSA-PSS-2\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = 27f71611446aa6eabf037f7dedeede3203244991\nOutput = 010991656cca182b7f29d2dbc007e7ae0fec158eb6759cb9c45c5ff87c7635dd46d150882f4de1e9ae65e7f7d9018f6836954a47c0a81a8a6b6f83f2944d6081b1aa7c759b254b2c34b691da67cc0226e20b2f18b42212761dcd4b908a62b371b5918c5742af4b537e296917674fb914194761621cc19a41f6fb953fbcbb649dea\n\nVerify = RSA-PSS-2\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = 03ecc2c33e93f05fc7224fcc0d461356cb897217\nOutput = 007f0030018f53cdc71f23d03659fde54d4241f758a750b42f185f87578520c30742afd84359b6e6e8d3ed959dc6fe486bedc8e2cf001f63a7abe16256a1b84df0d249fc05d3194ce5f0912742dbbf80dd174f6c51f6bad7f16cf3364eba095a06267dc3793803ac7526aebe0a475d38b8c2247ab51c4898df7047dc6adf52c6c4\n\nVerify = RSA-PSS-2\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = 246c727b4b9494849dddb068d582e179ac20999c\nOutput = 009cd2f4edbe23e12346ae8c76dd9ad3230a62076141f16c152ba18513a48ef6f010e0e37fd3df10a1ec629a0cb5a3b5d2893007298c30936a95903b6ba85555d9ec3673a06108fd62a2fda56d1ce2e85c4db6b24a81ca3b496c36d4fd06eb7c9166d8e94877c42bea622b3bfe9251fdc21d8d5371badad78a488214796335b40b\n\nVerify = RSA-PSS-2\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = e8617ca3ea66ce6a58ede2d11af8c3ba8a6ba912\nOutput = 00ec430824931ebd3baa43034dae98ba646b8c36013d1671c3cf1cf8260c374b19f8e1cc8d965012405e7e9bf7378612dfcc85fce12cda11f950bd0ba8876740436c1d2595a64a1b32efcfb74a21c873b3cc33aaf4e3dc3953de67f0674c0453b4fd9f604406d441b816098cb106fe3472bc251f815f59db2e4378a3addc181ecf\n\nVerify = RSA-PSS-2\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = 7a6fdc1a4e434ecbc35d657ad49a2f4fafd43bc8\nOutput = 00475b1648f814a8dc0abdc37b5527f543b666bb6e39d30e5b49d3b876dccc58eac14e32a2d55c2616014456ad2f246fc8e3d560da3ddf379a1c0bd200f10221df078c219a151bc8d4ec9d2fc2564467811014ef15d8ea01c2ebbff8c2c8efab38096e55fcbe3285c7aa558851254faffa92c1c72b78758663ef4582843139d7a6\n\nPublicKey = RSA-PSS-3\nType = RSA\nInput = 30819f300d06092a864886f70d010101050003818d0030818902818102f246ef451ed3eebb9a310200cc25859c048e4be798302991112eb68ce6db674e280da21feded1ae74880ca522b18db249385012827c515f0e466a1ffa691d98170574e9d0eadb087586ca48933da3cc953d95bd0ed50de10ddcb6736107d6c831c7f663e833ca4c097e700ce0fb945f88fb85fe8e5a773172565b914a471a4430203010001\n\nVerify = RSA-PSS-3\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = 3552be69dd74bdc56d2cf8c38ef7bafe269040fe\nOutput = 0088b135fb1794b6b96c4a3e678197f8cac52b64b2fe907d6f27de761124964a99a01a882740ecfaed6c01a47464bb05182313c01338a8cd097214cd68ca103bd57d3bc9e816213e61d784f182467abf8a01cf253e99a156eaa8e3e1f90e3c6e4e3aa2d83ed0345b89fafc9c26077c14b6ac51454fa26e446e3a2f153b2b16797f\n\nVerify = RSA-PSS-3\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = 609143ff7240e55c062aba8b9e4426a781919bc9\nOutput = 02a5f0a858a0864a4f65017a7d69454f3f973a2999839b7bbc48bf78641169179556f595fa41f6ff18e286c2783079bc0910ee9cc34f49ba681124f923dfa88f426141a368a5f5a930c628c2c3c200e18a7644721a0cbec6dd3f6279bde3e8f2be5e2d4ee56f97e7ceaf33054be7042bd91a63bb09f897bd41e81197dee99b11af\n\nVerify = RSA-PSS-3\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = 0afd22f879a9cda7c584f4135f8f1c961db114c0\nOutput = 0244bcd1c8c16955736c803be401272e18cb990811b14f72db964124d5fa760649cbb57afb8755dbb62bf51f466cf23a0a1607576e983d778fceffa92df7548aea8ea4ecad2c29dd9f95bc07fe91ecf8bee255bfe8762fd7690aa9bfa4fa0849ef728c2c42c4532364522df2ab7f9f8a03b63f7a499175828668f5ef5a29e3802c\n\nVerify = RSA-PSS-3\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = 405dd56d395ef0f01b555c48f748cc32b210650b\nOutput = 0196f12a005b98129c8df13c4cb16f8aa887d3c40d96df3a88e7532ef39cd992f273abc370bc1be6f097cfebbf0118fd9ef4b927155f3df22b904d90702d1f7ba7a52bed8b8942f412cd7bd676c9d18e170391dcd345c06a730964b3f30bcce0bb20ba106f9ab0eeb39cf8a6607f75c0347f0af79f16afa081d2c92d1ee6f836b8\n\nVerify = RSA-PSS-3\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = a2c313b0440c8a0c47233b87f0a160c61af3eae7\nOutput = 021eca3ab4892264ec22411a752d92221076d4e01c0e6f0dde9afd26ba5acf6d739ef987545d16683e5674c9e70f1de649d7e61d48d0caeb4fb4d8b24fba84a6e3108fee7d0705973266ac524b4ad280f7ae17dc59d96d3351586b5a3bdb895d1e1f7820ac6135d8753480998382ba32b7349559608c38745290a85ef4e9f9bd83\n\nVerify = RSA-PSS-3\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = f1bf6ca7b4bbdbb6bf20a4bf55728725d177154a\nOutput = 012fafec862f56e9e92f60ab0c77824f4299a0ca734ed26e0644d5d222c7f0bde03964f8e70a5cb65ed44e44d56ae0edf1ff86ca032cc5dd4404dbb76ab854586c44eed8336d08d457ce6c03693b45c0f1efef93624b95b8ec169c616d20e5538ebc0b6737a6f82b4bc0570924fc6b35759a3348426279f8b3d7744e2d222426ce\n\nPublicKey = RSA-PSS-4\nType = RSA\nInput = 30819f300d06092a864886f70d010101050003818d00308189028181054adb7886447efe6f57e0368f06cf52b0a3370760d161cef126b91be7f89c421b62a6ec1da3c311d75ed50e0ab5fff3fd338acc3aa8a4e77ee26369acb81ba900fa83f5300cf9bb6c53ad1dc8a178b815db4235a9a9da0c06de4e615ea1277ce559e9c108de58c14a81aa77f5a6f8d1335494498848c8b95940740be7bf7c37050203010001\n\nVerify = RSA-PSS-4\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = f8b0abf70fec0bca74f0accbc24f75e6e90d3bfd\nOutput = 0323d5b7bf20ba4539289ae452ae4297080feff4518423ff4811a817837e7d82f1836cdfab54514ff0887bddeebf40bf99b047abc3ecfa6a37a3ef00f4a0c4a88aae0904b745c846c4107e8797723e8ac810d9e3d95dfa30ff4966f4d75d13768d20857f2b1406f264cfe75e27d7652f4b5ed3575f28a702f8c4ed9cf9b2d44948\n\nVerify = RSA-PSS-4\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = 04a10944bfe11ab801e77889f3fd3d7f4ff0b629\nOutput = 049d0185845a264d28feb1e69edaec090609e8e46d93abb38371ce51f4aa65a599bdaaa81d24fba66a08a116cb644f3f1e653d95c89db8bbd5daac2709c8984000178410a7c6aa8667ddc38c741f710ec8665aa9052be929d4e3b16782c1662114c5414bb0353455c392fc28f3db59054b5f365c49e1d156f876ee10cb4fd70598\n\nVerify = RSA-PSS-4\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = ba01243db223eb97fb86d746c3148adaaa0ca344\nOutput = 03fbc410a2ced59500fb99f9e2af2781ada74e13145624602782e2994813eefca0519ecd253b855fb626a90d771eae028b0c47a199cbd9f8e3269734af4163599090713a3fa910fa0960652721432b971036a7181a2bc0cab4",
-    "3b0b598bc6217461d7db305ff7e954c5b5bb231c39e791af6bcfa76b147b081321f72641482a2aad\n\nVerify = RSA-PSS-4\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = 934bb0d38d6836daec9de82a9648d4593da67cd2\nOutput = 0486644bc66bf75d28335a6179b10851f43f09bded9fac1af33252bb9953ba4298cd6466b27539a70adaa3f89b3db3c74ab635d122f4ee7ce557a61e59b82ffb786630e5f9db53c77d9a0c12fab5958d4c2ce7daa807cd89ba2cc7fcd02ff470ca67b229fcce814c852c73cc93bea35be68459ce478e9d4655d121c8472f371d4f\n\nVerify = RSA-PSS-4\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = ec35d81abd1cceac425a935758b683465c8bd879\nOutput = 022a80045353904cb30cbb542d7d4990421a6eec16a8029a8422adfd22d6aff8c4cc0294af110a0c067ec86a7d364134459bb1ae8ff836d5a8a2579840996b320b19f13a13fad378d931a65625dae2739f0c53670b35d9d3cbac08e733e4ec2b83af4b9196d63e7c4ff1ddeae2a122791a125bfea8deb0de8ccf1f4ffaf6e6fb0a\n\nVerify = RSA-PSS-4\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = 72ce251d17b04dd3970d6ff1fbe3624899e9e941\nOutput = 00938dcb6d583046065f69c78da7a1f1757066a7fa75125a9d2929f0b79a60b627b082f11f5b196f28eb9daa6f21c05e5140f6aef1737d2023075c05ecf04a028c686a2ab3e7d5a0664f295ce12995e890908b6ad21f0839eb65b70393a7b5afd9871de0caa0cedec5b819626756209d13ab1e7bb9546a26ff37e9a51af9fd562e\n\nPublicKey = RSA-PSS-5\nType = RSA\nInput = 30819f300d06092a864886f70d010101050003818d003081890281810d10f661f29940f5ed39aa260966deb47843679d2b6fb25b3de370f3ac7c19916391fd25fb527ebfa6a4b4df45a1759d996c4bb4ebd18828c44fc52d0191871740525f47a4b0cc8da325ed8aa676b0d0f626e0a77f07692170acac8082f42faa7dc7cd123e730e31a87985204cabcbe6670d43a2dd2b2ddef5e05392fc213bc5070203010001\n\nVerify = RSA-PSS-5\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = d98b7061943510bc3dd9162f7169aabdbdcd0222\nOutput = 0ba373f76e0921b70a8fbfe622f0bf77b28a3db98e361051c3d7cb92ad0452915a4de9c01722f6823eeb6adf7e0ca8290f5de3e549890ac2a3c5950ab217ba58590894952de96f8df111b2575215da6c161590c745be612476ee578ed384ab33e3ece97481a252f5c79a98b5532ae00cdd62f2ecc0cd1baefe80d80b962193ec1d\n\nVerify = RSA-PSS-5\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = 7ae8e699f754988f4fd645e463302e49a2552072\nOutput = 08180de825e4b8b014a32da8ba761555921204f2f90d5f24b712908ff84f3e220ad17997c0dd6e706630ba3e84add4d5e7ab004e58074b549709565d43ad9e97b5a7a1a29e85b9f90f4aafcdf58321de8c5974ef9abf2d526f33c0f2f82e95d158ea6b81f1736db8d1af3d6ac6a83b32d18bae0ff1b2fe27de4c76ed8c7980a34e\n\nVerify = RSA-PSS-5\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = 8d46c7c05534c1ba2cc7624500d48a4531604bff\nOutput = 05e0fdbdf6f756ef733185ccfa8ced2eb6d029d9d56e35561b5db8e70257ee6fd019d2f0bbf669fe9b9821e78df6d41e31608d58280f318ee34f559941c8df13287574bac000b7e58dc4f414ba49fb127f9d0f8936638c76e85356c994f79750f7fa3cf4fd482df75e3fb9978cd061f7abb17572e6e63e0bde12cbdcf18c68b979\n\nVerify = RSA-PSS-5\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = ee3de96783fd0a157c8b20bf5566124124dcfe65\nOutput = 0bc989853bc2ea86873271ce183a923ab65e8a53100e6df5d87a24c4194eb797813ee2a187c097dd872d591da60c568605dd7e742d5af4e33b11678ccb63903204a3d080b0902c89aba8868f009c0f1c0cb85810bbdd29121abb8471ff2d39e49fd92d56c655c8e037ad18fafbdc92c95863f7f61ea9efa28fea401369d19daea1\n\nVerify = RSA-PSS-5\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = 1204df0b03c2724e2709c23fc71789a21b00ae4c\nOutput = 0aefa943b698b9609edf898ad22744ac28dc239497cea369cbbd84f65c95c0ad776b594740164b59a739c6ff7c2f07c7c077a86d95238fe51e1fcf33574a4ae0684b42a3f6bf677d91820ca89874467b2c23add77969c80717430d0efc1d3695892ce855cb7f7011630f4df26def8ddf36fc23905f57fa6243a485c770d5681fcd\n\nVerify = RSA-PSS-5\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = 29926bc3280c841f601acd0d6f17ea38023eddbc\nOutput = 02802dccfa8dfaf5279bf0b4a29ba1b157611faeaaf419b8919d15941900c1339e7e92e6fae562c53e6cc8e84104b110bce03ad18525e3c49a0eadad5d3f28f244a8ed89edbafbb686277cfa8ae909714d6b28f4bf8e293aa04c41efe7c0a81266d5c061e2575be032aa464674ff71626219bd74cc45f0e7ed4e3ff96eee758e8f\n\nPublicKey = RSA-PSS-6\nType = RSA\nInput = 30819f300d06092a864886f70d010101050003818d00308189028181164ca31cff609f3a0e7101b039f2e4fe6dd37519ab98598d179e174996598071f47d3a04559158d7be373cf1aa53f0aa6ef09039e5678c2a4c63900514c8c4f8aaed5de12a5f10b09c311af8c0ffb5b7a297f2efc63b8d6b0510931f0b98e48bf5fc6ec4e7b8db1ffaeb08c38e02adb8f03a48229c99e969431f61cb8c4dc698d10203010001\n\nVerify = RSA-PSS-6\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = ab464e8cb65ae5fdea47a53fa84b234d6bfd52f6\nOutput = 04c0cfacec04e5badbece159a5a1103f69b3f32ba593cb4cc4b1b7ab455916a96a27cd2678ea0f46ba37f7fc9c86325f29733b389f1d97f43e7201c0f348fc45fe42892335362eee018b5b161f2f9393031225c713012a576bc88e23052489868d9010cbf033ecc568e8bc152bdc59d560e41291915d28565208e22aeec9ef85d1\n\nVerify = RSA-PSS-6\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = 92d0bcae82b641f578f040f5151be8eda6d42299\nOutput = 0a2314250cf52b6e4e908de5b35646bcaa24361da8160fb0f9257590ab3ace42b0dc3e77ad2db7c203a20bd952fbb56b1567046ecfaa933d7b1000c3de9ff05b7d989ba46fd43bc4c2d0a3986b7ffa13471d37eb5b47d64707bd290cfd6a9f393ad08ec1e3bd71bb5792615035cdaf2d8929aed3be098379377e777ce79aaa4773\n\nVerify = RSA-PSS-6\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = 3569bd8fd2e28f2443375efa94f186f6911ffc2b\nOutput = 086df6b500098c120f24ff8423f727d9c61a5c9007d3b6a31ce7cf8f3cbec1a26bb20e2bd4a046793299e03e37a21b40194fb045f90b18bf20a47992ccd799cf9c059c299c0526854954aade8a6ad9d97ec91a1145383f42468b231f4d72f23706d9853c3fa43ce8ace8bfe7484987a1ec6a16c8daf81f7c8bf42774707a9df456\n\nVerify = RSA-PSS-6\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = 7abbb7b42de335730a0b641f1e314b6950b84f98\nOutput = 0b5b11ad549863ffa9c51a14a1106c2a72cc8b646e5c7262509786105a984776534ca9b54c1cc64bf2d5a44fd7e8a69db699d5ea52087a4748fd2abc1afed1e5d6f7c89025530bdaa2213d7e030fa55df6f34bcf1ce46d2edf4e3ae4f3b01891a068c9e3a44bbc43133edad6ecb9f35400c4252a5762d65744b99cb9f4c559329f\n\nVerify = RSA-PSS-6\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = 55b7eb27be7a787a59eb7e5fac468db8917a7725\nOutput = 02d71fa9b53e4654fefb7f08385cf6b0ae3a817942ebf66c35ac67f0b069952a3ce9c7e1f1b02e480a9500836de5d64cdb7ecde04542f7a79988787e24c2ba05f5fd482c023ed5c30e04839dc44bed2a3a3a4fee01113c891a47d32eb8025c28cb050b5cdb576c70fe76ef523405c08417faf350b037a43c379339fcb18d3a356b\n\nVerify = RSA-PSS-6\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = de2fa0367ef49083ff89b9905d3fd646fcc12c38\nOutput = 0a40a16e2fe2b38d1df90546167cf9469c9e3c3681a3442b4b2c2f581deb385ce99fc6188bb02a841d56e76d301891e24560550fcc2a26b55f4ccb26d837d350a154bcaca8392d98fa67959e9727b78cad03269f56968fc56b68bd679926d83cc9cb215550645ccda31c760ff35888943d2d8a1d351e81e5d07b86182e751081ef\n\nPublicKey = RSA-PSS-7\nType = RSA\nInput = 30819f300d06092a864886f70d010101050003818d0030818902818137c9da4a66c8c408b8da27d0c9d79f8ccb1eafc1d2fe48746d940b7c4ef5dee18ad12647cefaa0c4b3188b221c515386759b93f02024b25ab9242f8357d8f3fd49640ee5e643eaf6c64deefa7089727c8ff03993333915c6ef21bf5975b6e50d118b51008ec33e9f01a0a545a10a836a43ddbca9d8b5c5d3548022d7064ea29ab30203010001\n\nVerify = RSA-PSS-7\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = 8be4afbdd76bd8d142c5f4f46dba771ee5d6d29d\nOutput = 187f390723c8902591f0154bae6d4ecbffe067f0e8b795476ea4f4d51ccc810520bb3ca9bca7d0b1f2ea8a17d873fa27570acd642e3808561cb9e975ccfd80b23dc5771cdb3306a5f23159dacbd3aa2db93d46d766e09ed15d900ad897a8d274dc26b47e994a27e97e2268a766533ae4b5e42a2fcaf755c1c4794b294c60555823\n\nVerify = RSA-PSS-7\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = 402140dc605b2f5c5ec0d15bce9f9ba8857fe117\nOutput = 10fd89768a60a67788abb5856a787c8561f3edcf9a83e898f7dc87ab8cce79429b43e56906941a886194f137e591fe7c339555361fbbe1f24feb2d4bcdb80601f3096bc9132deea60ae13082f44f9ad41cd628936a4d51176e42fc59cb76db815ce5ab4db99a104aafea68f5d330329ebf258d4ede16064bd1d00393d5e1570eb8\n\nVerify = RSA-PSS-7\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = 3e885205892ff2b6b37c2c4eb486c4bf2f9e7f20\nOutput = 2b31fde99859b977aa09586d8e274662b25a2a640640b457f594051cb1e7f7a911865455242926cf88fe80dfa3a75ba9689844a11e634a82b075afbd69c12a0df9d25f84ad4945df3dc8fe90c3cefdf26e95f0534304b5bdba20d3e5640a2ebfb898aac35ae40f26fce5563c2f9f24f3042af76f3c7072d687bbfb959a88460af1\n\nVerify = RSA-PSS-7\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = 1fc2201d0c442a4736cd8b2cd00c959c47a3bf42\nOutput = 32c7ca38ff26949a15000c4ba04b2b13b35a3810e568184d7ecabaa166b7ffabddf2b6cf4ba07124923790f2e5b1a5be040aea36fe132ec130e1f10567982d17ac3e89b8d26c3094034e762d2e031264f01170beecb3d1439e05846f25458367a7d9c0206",
-    "0444672671e64e877864559ca19b2074d588a281b5804d23772fbbe19\n\nVerify = RSA-PSS-7\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = e4351b66819e5a31501f89acc7faf57030e9aac5\nOutput = 07eb651d75f1b52bc263b2e198336e99fbebc4f332049a922a10815607ee2d989db3a4495b7dccd38f58a211fb7e193171a3d891132437ebca44f318b280509e52b5fa98fcce8205d9697c8ee4b7ff59d4c59c79038a1970bd2a0d451ecdc5ef11d9979c9d35f8c70a6163717607890d586a7c6dc01c79f86a8f28e85235f8c2f1\n\nVerify = RSA-PSS-7\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = 49f6cc58365e514e1a3f301f4de16f9fb5347ff2\nOutput = 18da3cdcfe79bfb77fd9c32f377ad399146f0a8e810620233271a6e3ed3248903f5cdc92dc79b55d3e11615aa056a795853792a3998c349ca5c457e8ca7d29d796aa24f83491709befcfb1510ea513c92829a3f00b104f655634f320752e130ec0ccf6754ff893db302932bb025eb60e87822598fc619e0e981737a9a4c4152d33\n\nPublicKey = RSA-PSS-8\nType = RSA\nInput = 30819f300d06092a864886f70d010101050003818d00308189028181495370a1fb18543c16d3631e3163255df62be6eee890d5f25509e4f778a8ea6fbbbcdf85dff64e0d972003ab3681fbba6dd41fd541829b2e582de9f2a4a4e0a2d0900bef4753db3cee0ee06c7dfae8b1d53b5953218f9cceea695b08668edeaadced9463b1d790d5ebf27e9115b46cad4d9a2b8efab0561b0810344739ada0733f0203010001\n\nVerify = RSA-PSS-8\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = a1dd230d8ead860199b6277c2ecfe3d95f6d9160\nOutput = 0262ac254bfa77f3c1aca22c5179f8f040422b3c5bafd40a8f21cf0fa5a667ccd5993d42dbafb409c520e25fce2b1ee1e716577f1efa17f3da28052f40f0419b23106d7845aaf01125b698e7a4dfe92d3967bb00c4d0d35ba3552ab9a8b3eef07c7fecdbc5424ac4db1e20cb37d0b2744769940ea907e17fbbca673b20522380c5\n\nVerify = RSA-PSS-8\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = f6e68e53c602c5c65fa67b5aa6d786e5524b12ab\nOutput = 2707b9ad5115c58c94e932e8ec0a280f56339e44a1b58d4ddcff2f312e5f34dcfe39e89c6a94dcee86dbbdae5b79ba4e0819a9e7bfd9d982e7ee6c86ee68396e8b3a14c9c8f34b178eb741f9d3f121109bf5c8172fada2e768f9ea1433032c004a8aa07eb990000a48dc94c8bac8aabe2b09b1aa46c0a2aa0e12f63fbba775ba7e\n\nVerify = RSA-PSS-8\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = d6f9fcd3ae27f32bb2c7c93536782eba52af1f76\nOutput = 2ad20509d78cf26d1b6c406146086e4b0c91a91c2bd164c87b966b8faa42aa0ca446022323ba4b1a1b89706d7f4c3be57d7b69702d168ab5955ee290356b8c4a29ed467d547ec23cbadf286ccb5863c6679da467fc9324a151c7ec55aac6db4084f82726825cfe1aa421bc64049fb42f23148f9c25b2dc300437c38d428aa75f96\n\nVerify = RSA-PSS-8\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = 7ff2a53ce2e2d900d468e498f230a5f5dd0020de\nOutput = 1e24e6e58628e5175044a9eb6d837d48af1260b0520e87327de7897ee4d5b9f0df0be3e09ed4dea8c1454ff3423bb08e1793245a9df8bf6ab3968c8eddc3b5328571c77f091cc578576912dfebd164b9de5454fe0be1c1f6385b328360ce67ec7a05f6e30eb45c17c48ac70041d2cab67f0a2ae7aafdcc8d245ea3442a6300ccc7\n\nVerify = RSA-PSS-8\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = 4eb309f7022ba0b03bb78601b12931ec7c1be8d3\nOutput = 33341ba3576a130a50e2a5cf8679224388d5693f5accc235ac95add68e5eb1eec31666d0ca7a1cda6f70a1aa762c05752a51950cdb8af3c5379f18cfe6b5bc55a4648226a15e912ef19ad77adeea911d67cfefd69ba43fa4119135ff642117ba985a7e0100325e9519f1ca6a9216bda055b5785015291125e90dcd07a2ca9673ee\n\nVerify = RSA-PSS-8\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = 65033bc2f67d6aba7d526acb873b8d9241e5e4d9\nOutput = 1ed1d848fb1edb44129bd9b354795af97a069a7a00d0151048593e0c72c3517ff9ff2a41d0cb5a0ac860d736a199704f7cb6a53986a88bbd8abcc0076a2ce847880031525d449da2ac78356374c536e343faa7cba42a5aaa6506087791c06a8e989335aed19bfab2d5e67e27fb0c2875af896c21b6e8e7309d04e4f6727e69463e\n\nPublicKey = RSA-PSS-9\nType = RSA\nInput = 3081df300d06092a864886f70d01010105000381cd003081c90281c100e6bd692ac96645790403fdd0f5beb8b9bf92ed10007fc365046419dd06c05c5b5b2f48ecf989e4ce269109979cbb40b4a0ad24d22483d1ee315ad4ccb1534268352691c524f6dd8e6c29d224cf246973aec86c5bf6b1401a850d1b9ad1bb8cbcec47b06f0f8c7f45d3fc8f319299c5433ddbc2b3053b47ded2ecd4a4caefd614833dc8bb622f317ed076b8057fe8de3f84480ad5e83e4a61904a4f248fb397027357e1d30e463139815c6fd4fd5ac5b8172a45230ecb6318a04f1455d84e5a8b0203010001\n\nVerify = RSA-PSS-9\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = 2715a49b8b0012cd7aee84c116446e6dfe3faec0\nOutput = 586107226c3ce013a7c8f04d1a6a2959bb4b8e205ba43a27b50f124111bc35ef589b039f5932187cb696d7d9a32c0c38300a5cdda4834b62d2eb240af33f79d13dfbf095bf599e0d9686948c1964747b67e89c9aba5cd85016236f566cc5802cb13ead51bc7ca6bef3b94dcbdbb1d570469771df0e00b1a8a06777472d2316279edae86474668d4e1efff95f1de61c6020da32ae92bbf16520fef3cf4d88f61121f24bbd9fe91b59caf1235b2a93ff81fc403addf4ebdea84934a9cdaf8e1a9e\n\nVerify = RSA-PSS-9\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = 2dac956d53964748ac364d06595827c6b4f143cd\nOutput = 80b6d643255209f0a456763897ac9ed259d459b49c2887e5882ecb4434cfd66dd7e1699375381e51cd7f554f2c271704b399d42b4be2540a0eca61951f55267f7c2878c122842dadb28b01bd5f8c025f7e228418a673c03d6bc0c736d0a29546bd67f786d9d692ccea778d71d98c2063b7a71092187a4d35af108111d83e83eae46c46aa34277e06044589903788f1d5e7cee25fb485e92949118814d6f2c3ee361489016f327fb5bc517eb50470bffa1afa5f4ce9aa0ce5b8ee19bf5501b958\n\nVerify = RSA-PSS-9\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = 28d98c46cccafbd3bc04e72f967a54bd3ea12298\nOutput = 484408f3898cd5f53483f80819efbf2708c34d27a8b2a6fae8b322f9240237f981817aca1846f1084daa6d7c0795f6e5bf1af59c38e1858437ce1f7ec419b98c8736adf6dd9a00b1806d2bd3ad0a73775e05f52dfef3a59ab4b08143f0df05cd1ad9d04bececa6daa4a2129803e200cbc77787caf4c1d0663a6c5987b605952019782caf2ec1426d68fb94ed1d4be816a7ed081b77e6ab330b3ffc073820fecde3727fcbe295ee61a050a343658637c3fd659cfb63736de32d9f90d3c2f63eca\n\nVerify = RSA-PSS-9\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = 0866d2ff5a79f25ef668cd6f31b42dee421e4c0e\nOutput = 84ebeb481be59845b46468bafb471c0112e02b235d84b5d911cbd1926ee5074ae0424495cb20e82308b8ebb65f419a03fb40e72b78981d88aad143053685172c97b29c8b7bf0ae73b5b2263c403da0ed2f80ff7450af7828eb8b86f0028bd2a8b176a4d228cccea18394f238b09ff758cc00bc04301152355742f282b54e663a919e709d8da24ade5500a7b9aa50226e0ca52923e6c2d860ec50ff480fa57477e82b0565f4379f79c772d5c2da80af9fbf325ece6fc20b00961614bee89a183e\n\nVerify = RSA-PSS-9\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = 6a5b4be4cd36cc97dfde9995efbf8f097a4a991a\nOutput = 82102df8cb91e7179919a04d26d335d64fbc2f872c44833943241de8454810274cdf3db5f42d423db152af7135f701420e39b494a67cbfd19f9119da233a23da5c6439b5ba0d2bc373eee3507001378d4a4073856b7fe2aba0b5ee93b27f4afec7d4d120921c83f606765b02c19e4d6a1a3b95fa4c422951be4f52131077ef17179729cddfbdb56950dbaceefe78cb16640a099ea56d24389eef10f8fecb31ba3ea3b227c0a86698bb89e3e9363905bf22777b2a3aa521b65b4cef76d83bde4c\n\nVerify = RSA-PSS-9\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = b9dfd1df76a461c51e6576c6c8ed0a923d1c50e7\nOutput = a7fdb0d259165ca2c88d00bbf1028a867d337699d061193b17a9648e14ccbbaadeacaacdec815e7571294ebb8a117af205fa078b47b0712c199e3ad05135c504c24b81705115740802487992ffd511d4afc6b854491eb3f0dd523139542ff15c3101ee85543517c6a3c79417c67e2dd9aa741e9a29b06dcb593c2336b3670ae3afbac7c3e76e215473e866e338ca244de00b62624d6b9426822ceae9f8cc460895f41250073fd45c5a1e7b425c204a423a699159f6903e710b37a7bb2bc8049f\n\nPublicKey = RSA-PSS-10\nType = RSA\nInput = 30820122300d06092a864886f70d01010105000382010f003082010a0282010100a5dd867ac4cb02f90b9457d48c14a770ef991c56c39c0ec65fd11afa8937cea57b9be7ac73b45c0017615b82d622e318753b6027c0fd157be12f8090fee2a7adcd0eef759f88ba4997c7a42d58c9aa12cb99ae001fe521c13bb5431445a8d5ae4f5e4c7e948ac227d3604071f20e577e905fbeb15dfaf06d1de5ae6253d63a6a2120b31a5da5dabc9550600e20f27d3739e2627925fea3cc509f21dff04e6eea4549c540d6809ff9307eede91fff58733d8385a237d6d3705a33e391900992070df7adf1357cf7e3700ce3667de83f17b8df1778db381dce09cb4ad058a511001a738198ee27cf55a13b754539906582ec8b174bd58d5d1f3d767c613721ae050203010001\n\nVerify = RSA-PSS-10\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = 9596bb630cf6a8d4ea4600422b9eba8b13675dd4\nOutput = 82c2b160093b8aa3c0f7522b19f87354066c77847abf2a9fce542d0e84e920c5afb49ffdfdace16560ee94a1369601148ebad7a0e151cf16331791a5727d05f21e74e7eb811440206935d744765a15e79f015cb66c532c87a6a05961c8bfad741a9a6657022894393e7223739796c02a77455d0f555b0ec01ddf259b6207fd0fd57614cef1a5573baaff4ec00069951659b85f24300a25160ca8522dc6e6727e57d019d7e63629b8fe5e89e25cc15beb3a647577559299280b9b28f79b0409000be25bbd96408ba3b43cc486184dd1c8e62553fa1af4040f60663de7f5e49c04388e257f1ce89c95dab48a315d9b66b1b7628233876ff2385230d070d07e1666\n\nVerify = RSA-PSS-10\nRSAPadding = PSS\nMGF1Digest ",
-    "= SHA1\nInput = b503319399277fd6c1c8f1033cbf04199ea21716\nOutput = 14ae35d9dd06ba92f7f3b897978aed7cd4bf5ff0b585a40bd46ce1b42cd2703053bb9044d64e813d8f96db2dd7007d10118f6f8f8496097ad75e1ff692341b2892ad55a633a1c55e7f0a0ad59a0e203a5b8278aec54dd8622e2831d87174f8caff43ee6c46445345d84a59659bfb92ecd4c818668695f34706f66828a89959637f2bf3e3251c24bdba4d4b7649da0022218b119c84e79a6527ec5b8a5f861c159952e23ec05e1e717346faefe8b1686825bd2b262fb2531066c0de09acde2e4231690728b5d85e115a2f6b92b79c25abc9bd9399ff8bcf825a52ea1f56ea76dd26f43baafa18bfa92a504cbd35699e26d1dcc5a2887385f3c63232f06f3244c3\n\nVerify = RSA-PSS-10\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = 50aaede8536b2c307208b275a67ae2df196c7628\nOutput = 6e3e4d7b6b15d2fb46013b8900aa5bbb3939cf2c095717987042026ee62c74c54cffd5d7d57efbbf950a0f5c574fa09d3fc1c9f513b05b4ff50dd8df7edfa20102854c35e592180119a70ce5b085182aa02d9ea2aa90d1df03f2daae885ba2f5d05afdac97476f06b93b5bc94a1a80aa9116c4d615f333b098892b25fface266f5db5a5a3bcc10a824ed55aad35b727834fb8c07da28fcf416a5d9b2224f1f8b442b36f91e456fdea2d7cfe3367268de0307a4c74e924159ed33393d5e0655531c77327b89821bdedf880161c78cd4196b5419f7acc3f13e5ebf161b6e7c6724716ca33b85c2e25640192ac2859651d50bde7eb976e51cec828b98b6563b86bb\n\nVerify = RSA-PSS-10\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = aa0b72b8b371ddd10c8ae474425ccccf8842a294\nOutput = 34047ff96c4dc0dc90b2d4ff59a1a361a4754b255d2ee0af7d8bf87c9bc9e7ddeede33934c63ca1c0e3d262cb145ef932a1f2c0a997aa6a34f8eaee7477d82ccf09095a6b8acad38d4eec9fb7eab7ad02da1d11d8e54c1825e55bf58c2a23234b902be124f9e9038a8f68fa45dab72f66e0945bf1d8bacc9044c6f07098c9fcec58a3aab100c805178155f030a124c450e5acbda47d0e4f10b80a23f803e774d023b0015c20b9f9bbe7c91296338d5ecb471cafb032007b67a60be5f69504a9f01abb3cb467b260e2bce860be8d95bf92c0c8e1496ed1e528593a4abb6df462dde8a0968dffe4683116857a232f5ebf6c85be238745ad0f38f767a5fdbf486fb\n\nVerify = RSA-PSS-10\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = fad3902c9750622a2bc672622c48270cc57d3ea8\nOutput = 7e0935ea18f4d6c1d17ce82eb2b3836c55b384589ce19dfe743363ac9948d1f346b7bfddfe92efd78adb21faefc89ade42b10f374003fe122e67429a1cb8cbd1f8d9014564c44d120116f4990f1a6e38774c194bd1b8213286b077b0499d2e7b3f434ab12289c556684deed78131934bb3dd6537236f7c6f3dcb09d476be07721e37e1ceed9b2f7b406887bd53157305e1c8b4f84d733bc1e186fe06cc59b6edb8f4bd7ffefdf4f7ba9cfb9d570689b5a1a4109a746a690893db3799255a0cb9215d2d1cd490590e952e8c8786aa0011265252470c041dfbc3eec7c3cbf71c24869d115c0cb4a956f56d530b80ab589acfefc690751ddf36e8d383f83cedd2cc\n\nVerify = RSA-PSS-10\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = 122196deb5d122bd8c6fc781ff6924d7c695aade\nOutput = 6d3b5b87f67ea657af21f75441977d2180f91b2c5f692de82955696a686730d9b9778d970758ccb26071c2209ffbd6125be2e96ea81b67cb9b9308239fda17f7b2b64ecda096b6b935640a5a1cb42a9155b1c9ef7a633a02c59f0d6ee59b852c43b35029e73c940ff0410e8f114eed46bbd0fae165e42be2528a401c3b28fd818ef3232dca9f4d2a0f5166ec59c42396d6c11dbc1215a56fa17169db9575343ef34f9de32a49cdc3174922f229c23e18e45df9353119ec4319cedce7a17c64088c1f6f52be29634100b3919d38f3d1ed94e6891e66a73b8fb849f5874df59459e298c7bbce2eee782a195aa66fe2d0732b25e595f57d3e061b1fc3e4063bf98f\n\nPrivateKey = RSA-OAEP-1\nType = RSA\nInput = 30820276020100300d06092a864886f70d0101010500048202603082025c02010002818100a8b3b284af8eb50b387034a860f146c4919f318763cd6c5598c8ae4811a1e0abc4c7e0b082d693a5e7fced675cf4668512772c0cbc64a742c6c630f533c8cc72f62ae833c40bf25842e984bb78bdbf97c0107d55bdb662f5c4e0fab9845cb5148ef7392dd3aaff93ae1e6b667bb3d4247616d4f5ba10d4cfd226de88d39f16fb020301000102818053339cfdb79fc8466a655c7316aca85c55fd8f6dd898fdaf119517ef4f52e8fd8e258df93fee180fa0e4ab29693cd83b152a553d4ac4d1812b8b9fa5af0e7f55fe7304df41570926f3311f15c4d65a732c483116ee3d3d2d0af3549ad9bf7cbfb78ad884f84d5beb04724dc7369b31def37d0cf539e9cfcdd3de653729ead5d1024100d32737e7267ffe1341b2d5c0d150a81b586fb3132bed2f8d5262864a9cb9f30af38be448598d413a172efb802c21acf1c11c520c2f26a471dcad212eac7ca39d024100cc8853d1d54da630fac004f471f281c7b8982d8224a490edbeb33d3e3d5cc93c4765703d1dd791642f1f116a0dd852be2419b2af72bfe9a030e860b0288b5d7702400e12bf1718e9cef5599ba1c3882fe8046a90874eefce8f2ccc20e4f2741fb0a33a3848aec9c9305fbecbd2d76819967d4671acc6431e4037968db37878e695c102410095297b0f95a2fa67d00707d609dfd4fc05c89dafc2ef6d6ea55bec771ea333734d9251e79082ecda866efef13c459e1a631386b7e354c899f5f112ca85d7158302404f456c502493bdc0ed2ab756a3a6ed4d67352a697d4216e93212b127a63d5411ce6fa98d5dbefd73263e3728142743818166ed7dd63687dd2a8ca1d2f4fbd8e1\n\nDecrypt = RSA-OAEP-1\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 354fe67b4a126d5d35fe36c777791a3f7ba13def484e2d3908aff722fad468fb21696de95d0be911c2d3174f8afcc201035f7b6d8e69402de5451618c21a535fa9d7bfc5b8dd9fc243f8cf927db31322d6e881eaa91a996170e657a05a266426d98c88003f8477c1227094a0d9fa1e8c4024309ce1ecccb5210035d47ac72e8a\nOutput = 6628194e12073db03ba94cda9ef9532397d50dba79b987004afefe34\n\nDecrypt = RSA-OAEP-1\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 640db1acc58e0568fe5407e5f9b701dff8c3c91e716c536fc7fcec6cb5b71c1165988d4a279e1577d730fc7a29932e3f00c81515236d8d8e31017a7a09df4352d904cdeb79aa583adcc31ea698a4c05283daba9089be5491f67c1a4ee48dc74bbbe6643aef846679b4cb395a352d5ed115912df696ffe0702932946d71492b44\nOutput = 750c4047f547e8e41411856523298ac9bae245efaf1397fbe56f9dd5\n\nDecrypt = RSA-OAEP-1\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 423736ed035f6026af276c35c0b3741b365e5f76ca091b4e8c29e2f0befee603595aa8322d602d2e625e95eb81b2f1c9724e822eca76db8618cf09c5343503a4360835b5903bc637e3879fb05e0ef32685d5aec5067cd7cc96fe4b2670b6eac3066b1fcf5686b68589aafb7d629b02d8f8625ca3833624d4800fb081b1cf94eb\nOutput = d94ae0832e6445ce42331cb06d531a82b1db4baad30f746dc916df24d4e3c2451fff59a6423eb0e1d02d4fe646cf699dfd818c6e97b051\n\nDecrypt = RSA-OAEP-1\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 45ead4ca551e662c9800f1aca8283b0525e6abae30be4b4aba762fa40fd3d38e22abefc69794f6ebbbc05ddbb11216247d2f412fd0fba87c6e3acd888813646fd0e48e785204f9c3f73d6d8239562722dddd8771fec48b83a31ee6f592c4cfd4bc88174f3b13a112aae3b9f7b80e0fc6f7255ba880dc7d8021e22ad6a85f0755\nOutput = 52e650d98e7f2a048b4f86852153b97e01dd316f346a19f67a85\n\nDecrypt = RSA-OAEP-1\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 36f6e34d94a8d34daacba33a2139d00ad85a9345a86051e73071620056b920e219005855a213a0f23897cdcd731b45257c777fe908202befdd0b58386b1244ea0cf539a05d5d10329da44e13030fd760dcd644cfef2094d1910d3f433e1c7c6dd18bc1f2df7f643d662fb9dd37ead9059190f4fa66ca39e869c4eb449cbdc439\nOutput = 8da89fd9e5f974a29feffb462b49180f6cf9e802\n\nDecrypt = RSA-OAEP-1\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 42cee2617b1ecea4db3f4829386fbd61dafbf038e180d837c96366df24c097b4ab0fac6bdf590d821c9f10642e681ad05b8d78b378c0f46ce2fad63f74e0ad3df06b075d7eb5f5636f8d403b9059ca761b5c62bb52aa45002ea70baace08ded243b9d8cbd62a68ade265832b56564e43a6fa42ed199a099769742df1539e8255\nOutput = 26521050844271\n\nPrivateKey = RSA-OAEP-2\nType = RSA\nInput = 30820276020100300d06092a864886f70d0101010500048202603082025c02010002818101947c7fce90425f47279e70851f25d5e62316fe8a1df19371e3e628e260543e4901ef6081f68c0b8141190d2ae8daba7d1250ec6db636e944ec3722877c7c1d0a67f14b1694c5f0379451a43e49a32dde83670b73da91a1c99bc23b436a60055c610f0baf99c1a079565b95a3f1526632d1d4da60f20eda25e653c4f002766f4502030100010281800823f20fadb5da89088a9d00893e21fa4a1b11fbc93c64a3be0baaea97fb3b93c3ff713704c19c963c1d107aae99054739f79e02e186de86f87a6ddefea6d8ccd1d3c81a47bfa7255be20601a4a4b2f08a167b5e279d715b1b455bdd7eab245941d9768b9acefb3ccda5952da3cee72525b4501663a8ee15c9e992d92462fe3902410159dbde04a33ef06fb608b80b190f4d3e22bcc13ac8e4a081033abfa416edb0b338aa08b57309ea5a5240e7dc6e54378c69414c31d97ddb1f406db3769cc41a430241012b652f30403b38b40995fd6ff41a1acc8ada70373236b7202d39b2ee30cfb46db09511f6f307cc61cc21606c18a75b8a62f822df031ba0df0dafd5506f568bd70240436ef508de736519c2da4c580d98c82cb7452a3fb5efadc3b9c7789a1bc6584f795addbbd32439c74686552ecb6c2c307a4d3af7f539eec157248c7b31f1a2550241012b15a89f3dfb2b39073e73f02bdd0c1a7b379dd435f05cdde2eff9e462948b7cec62ee9050d5e0816e0785a856b49108dcb75f3683874d1ca6329a19013066ff02400270db17d5914b018d76118b24389a7350ec836b0063a21721236fd8edb6d89b51e7eeb87b611b7132cb7ea7356c23151c1e7751507c786d9ee1794170a8c8e8\n\nDecrypt = RSA-OAEP-2\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 0181af8922b9fcb4d79d92ebe19815992fc0c1439d8bcd491398a0f4ad3a329a5bd9385560db532683c8b7da",
-    "04e4b12aed6aacdf471c34c9cda891addcc2df3456653aa6382e9ae59b54455257eb099d562bbe10453f2b6d13c59c02e10f1f8abb5da0d0570932dacf2d0901db729d0fefcc054e70968ea540c81b04bcaefe720e\nOutput = 8ff00caa605c702830634d9a6c3d42c652b58cf1d92fec570beee7\n\nDecrypt = RSA-OAEP-2\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 018759ff1df63b2792410562314416a8aeaf2ac634b46f940ab82d64dbf165eee33011da749d4bab6e2fcd18129c9e49277d8453112b429a222a8471b070993998e758861c4d3f6d749d91c4290d332c7a4ab3f7ea35ff3a07d497c955ff0ffc95006b62c6d296810d9bfab024196c7934012c2df978ef299aba239940cba10245\nOutput = 2d\n\nDecrypt = RSA-OAEP-2\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 018802bab04c60325e81c4962311f2be7c2adce93041a00719c88f957575f2c79f1b7bc8ced115c706b311c08a2d986ca3b6a9336b147c29c6f229409ddec651bd1fdd5a0b7f610c9937fdb4a3a762364b8b3206b4ea485fd098d08f63d4aa8bb2697d027b750c32d7f74eaf5180d2e9b66b17cb2fa55523bc280da10d14be2053\nOutput = 74fc88c51bc90f77af9d5e9a4a70133d4b4e0b34da3c37c7ef8e\n\nDecrypt = RSA-OAEP-2\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 00a4578cbc176318a638fba7d01df15746af44d4f6cd96d7e7c495cbf425b09c649d32bf886da48fbaf989a2117187cafb1fb580317690e3ccd446920b7af82b31db5804d87d01514acbfa9156e782f867f6bed9449e0e9a2c09bcecc6aa087636965e34b3ec766f2fe2e43018a2fddeb140616a0e9d82e5331024ee0652fc7641\nOutput = a7eb2a5036931d27d4e891326d99692ffadda9bf7efd3e34e622c4adc085f721dfe885072c78a203b151739be540fa8c153a10f00a\n\nDecrypt = RSA-OAEP-2\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 00ebc5f5fda77cfdad3c83641a9025e77d72d8a6fb33a810f5950f8d74c73e8d931e8634d86ab1246256ae07b6005b71b7f2fb98351218331ce69b8ffbdc9da08bbc9c704f876deb9df9fc2ec065cad87f9090b07acc17aa7f997b27aca48806e897f771d95141fe4526d8a5301b678627efab707fd40fbebd6e792a25613e7aec\nOutput = 2ef2b066f854c33f3bdcbb5994a435e73d6c6c\n\nDecrypt = RSA-OAEP-2\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 010839ec20c27b9052e55befb9b77e6fc26e9075d7a54378c646abdf51e445bd5715de81789f56f1803d9170764a9e93cb78798694023ee7393ce04bc5d8f8c5a52c171d43837e3aca62f609eb0aa5ffb0960ef04198dd754f57f7fbe6abf765cf118b4ca443b23b5aab266f952326ac4581100644325f8b721acd5d04ff14ef3a\nOutput = 8a7fb344c8b6cb2cf2ef1f643f9a3218f6e19bba89c0\n\nPrivateKey = RSA-OAEP-3\nType = RSA\nInput = 30820277020100300d06092a864886f70d0101010500048202613082025d02010002818102b58fec039a860700a4d7b6462f93e6cdd491161ddd74f4e810b40e3c1652006a5c277b2774c11305a4cbab5a78efa57e17a86df7a3fa36fc4b1d2249f22ec7c2dd6a463232accea906d66ebe80b5704b10729da6f833234abb5efdd4a292cbfad33b4d33fa7a14b8c397b56e3acd21203428b77cdfa33a6da706b3d8b0fc43e9020301000102818015b48a5b5683a94670e23b5718f814fa0e13f85038f50711182cba61510581f3d22c7e232ef937e22e551d68b86e2f8cb1aad8be2e488f5df7efd279e3f568d4eaf36f80cf7141ace60fcc9113fb6c4a841fd50bbc7c512ffcbeff21487aa811eb3ca8c62005346a86de86bfa1d8a948fd3f348c22eaadf333c3ce6ce13208fd024101bf01d216d73595cf0270c2beb78d40a0d8447d31da919a983f7eea781b77d85fe371b3e9373e7b69217d3150a02d8958de7fad9d555160958b4454127e0e7eaf0241018d3399658166db3829816d7b295416759e9c91987f5b2d8aecd63b04b48bd7b2fcf229bb7f8a6dc88ba13dd2e39ad55b6d1a06160708f9700be80b8fd3744ce7024006c0a249d20a6f2ee75c88b494d53f6aae99aa427c88c28b163a769445e5f390cf40c274fd6ea6329a5ce7c7ce03a2158396ee2a7845786e09e2885a9728e4e5024100d1d27c29fedd92d86c348edd0ccbfac14f746e051ce1d1811df35d61f2ee1c97d4bf2804802f6427187ba8e90a8af44243b4079b03445e602e29fa5193e64fe90241008cb2f756bd8941b1d3b770e5ad31ee373b28acda69ff9b6f40fe578b9f1afb85836f9627d37acff73c2779e634bb26011c2c8f7f3361ae2a9ea65ed689e3639a\n\nDecrypt = RSA-OAEP-3\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 026a0485d96aebd96b4382085099b962e6a2bdec3d90c8db625e14372de85e2d5b7baab65c8faf91bb5504fb495afce5c988b3f6a52e20e1d6cbd3566c5cd1f2b8318bb542cc0ea25c4aab9932afa20760eaddec784396a07ea0ef24d4e6f4d37e5052a7a31e146aa480a111bbe926401307e00f410033842b6d82fe5ce4dfae80\nOutput = 087820b569e8fa8d\n\nDecrypt = RSA-OAEP-3\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 024db89c7802989be0783847863084941bf209d761987e38f97cb5f6f1bc88da72a50b73ebaf11c879c4f95df37b850b8f65d7622e25b1b889e80fe80baca2069d6e0e1d829953fc459069de98ea9798b451e557e99abf8fe3d9ccf9096ebbf3e5255d3b4e1c6d2ecadf067a359eea86405acd47d5e165517ccafd47d6dbee4bf5\nOutput = 4653acaf171960b01f52a7be63a3ab21dc368ec43b50d82ec3781e04\n\nDecrypt = RSA-OAEP-3\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 0239bce681032441528877d6d1c8bb28aa3bc97f1df584563618995797683844ca86664732f4bed7a0aab083aaabfb7238f582e30958c2024e44e57043b97950fd543da977c90cdde5337d618442f99e60d7783ab59ce6dd9d69c47ad1e962bec22d05895cff8d3f64ed5261d92b2678510393484990ba3f7f06818ae6ffce8a3a\nOutput = d94cd0e08fa404ed89\n\nDecrypt = RSA-OAEP-3\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 02994c62afd76f498ba1fd2cf642857fca81f4373cb08f1cbaee6f025c3b512b42c3e8779113476648039dbe0493f9246292fac28950600e7c0f32edf9c81b9dec45c3bde0cc8d8847590169907b7dc5991ceb29bb0714d613d96df0f12ec5d8d3507c8ee7ae78dd83f216fa61de100363aca48a7e914ae9f42ddfbe943b09d9a0\nOutput = 6cc641b6b61e6f963974dad23a9013284ef1\n\nDecrypt = RSA-OAEP-3\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 0162042ff6969592a6167031811a239834ce638abf54fec8b99478122afe2ee67f8c5b18b0339805bfdbc5a4e6720b37c59cfba942464c597ff532a119821545fd2e59b114e61daf71820529f5029cf524954327c34ec5e6f5ba7efcc4de943ab8ad4ed787b1454329f70db798a3a8f4d92f8274e2b2948ade627ce8ee33e43c60\nOutput = df5151832b61f4f25891fb4172f328d2eddf8371ffcfdbe997939295f30eca6918017cfda1153bf7a6af87593223\n\nDecrypt = RSA-OAEP-3\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 00112051e75d064943bc4478075e43482fd59cee0679de6893eec3a943daa490b9691c93dfc0464b6623b9f3dbd3e70083264f034b374f74164e1a00763725e574744ba0b9db83434f31df96f6e2a26f6d8eba348bd4686c2238ac07c37aac3785d1c7eea2f819fd91491798ed8e9cef5e43b781b0e0276e37c43ff9492d005730\nOutput = 3c3bad893c544a6d520ab022319188c8d504b7a788b850903b85972eaa18552e1134a7ad6098826254ff7ab672b3d8eb3158fac6d4cbaef1\n\nPrivateKey = RSA-OAEP-4\nType = RSA\nInput = 30820277020100300d06092a864886f70d0101010500048202613082025d020100028181051240b6cc0004fa48d0134671c078c7c8dec3b3e2f25bc2564467339db38853d06b85eea5b2de353bff42ac2e46bc97fae6ac9618da9537a5c8f553c1e357625991d6108dcd7885fb3a25413f53efcad948cb35cd9b9ae9c1c67626d113d57dde4c5bea76bb5bb7de96c00d07372e9685a6d75cf9d239fa148d70931b5f3fb03902030100010281800411ffca3b7ca5e9e9be7fe38a85105e353896db05c5796aecd2a725161eb3651c8629a9b862b904d7b0c7b37f8cb5a1c2b54001018a00a1eb2cafe4ee4e9492c348bc2bedab4b9ebbf064e8eff322b9009f8eec653905f40df88a3cdc49d4567f75627d41aca624129b46a0b7c698e5e65f2b7ba102c749a10135b6540d04010241027458c19ec1636919e736c9af25d609a51b8f561d19c6bf6943dd1ee1ab8a4a3f232100bd40b88decc6ba235548b6ef792a11c9de823d0a7922c7095b6eba570102410210ee9b33ab61716e27d251bd465f4b35a1a232e2da00901c294bf22350ce490d099f642b5375612db63ba1f20386492bf04d34b3c22bceb909d13441b53b5139024039fa028b826e88c1121b750a8b242fa9a35c5b66bdfd1fa637d3cc48a84a4f457a194e7727e49f7bcc6e5a5a412657fc470c7322ebc37416ef458c307a8c09010241015d99a84195943979fa9e1be2c3c1b69f432f46fd03e47d5befbbbfd6b1d1371d83efb330a3e020942b2fed115e5d02be24fd92c9019d1cecd6dd4cf1e54cc899024101f0b7015170b3f5e42223ba30301c41a6d87cbb70e30cb7d3c67d25473db1f6cbf03e3f9126e3e97968279a865b2c2b426524cfc52a683d31ed30eb984be412ba\n\nDecrypt = RSA-OAEP-4\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 04cce19614845e094152a3fe18e54e3330c44e5efbc64ae16886cb1869014cc5781b1f8f9e045384d0112a135ca0d12e9c88a8e4063416deaae3844f60d6e96fe155145f4525b9a34431ca3766180f70e15a5e5d8e8b1a516ff870609f13f896935ced188279a58ed13d07114277d75c6568607e0ab092fd803a223e4a8ee0b1a8\nOutput = 4a86609534ee434a6cbca3f7e962e76d455e3264c19f605f6e5ff6137c65c56d7fb344cd52bc93374f3d166c9f0c6f9c506bad19330972d2\n\nDecrypt = RSA-OAEP-4\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 0097b698c6165645b303486fbf5a2a4479c0ee85889b541a6f0b858d6b6597b13b854eb4f839af03399a80d79bda6578c841f90d645715b280d37143992dd186c80b949b775cae97370e4ec97443136c6da484e970ffdb1323a20847821d3b18381de13bb49aaea66530c4a4b8271f3eae172cd366e07e6636f1019d2a28aed15e\nOutput = b0adc4f3fe11da59ce992773d9059943c03046497ee9d9f9a06df1166db46d98f58d27ec074c02eee6cbe2449c8b9fc5080c5c3f4433092512ec46aa793743c8\n\nDecrypt = RSA-OAEP-4\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 0301f935e9c47abcb48acbbe09895d9f5971af14839da4ff95417ee453d1fd77319072bb7297e1b55d7561cd9d1bb2",
-    "4c1a9a37c619864308242804879d86ebd001dce5183975e1506989b70e5a83434154d5cbfd6a24787e60eb0c658d2ac193302d1192c6e622d4a12ad4b53923bca246df31c6395e37702c6a78ae081fb9d065\nOutput = bf6d42e701707b1d0206b0c8b45a1c72641ff12889219a82bdea965b5e79a96b0d0163ed9d578ec9ada20f2fbcf1ea3c4089d83419ba81b0c60f3606da99\n\nDecrypt = RSA-OAEP-4\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 02d110ad30afb727beb691dd0cf17d0af1a1e7fa0cc040ec1a4ba26a42c59d0a796a2e22c8f357ccc98b6519aceb682e945e62cb734614a529407cd452bee3e44fece8423cc19e55548b8b994b849c7ecde4933e76037e1d0ce44275b08710c68e430130b929730ed77e09b015642c5593f04e4ffb9410798102a8e96ffdfe11e4\nOutput = fb2ef112f5e766eb94019297934794f7be2f6fc1c58e\n\nDecrypt = RSA-OAEP-4\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 00dbb8a7439d90efd919a377c54fae8fe11ec58c3b858362e23ad1b8a44310799066b99347aa525691d2adc58d9b06e34f288c170390c5f0e11c0aa3645959f18ee79e8f2be8d7ac5c23d061f18dd74b8c5f2a58fcb5eb0c54f99f01a83247568292536583340948d7a8c97c4acd1e98d1e29dc320e97a260532a8aa7a758a1ec2\nOutput = 28ccd447bb9e85166dabb9e5b7d1adadc4b9d39f204e96d5e440ce9ad928bc1c2284\n\nDecrypt = RSA-OAEP-4\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 00a5ffa4768c8bbecaee2db77e8f2eec99595933545520835e5ba7db9493d3e17cddefe6a5f567624471908db4e2d83a0fbee60608fc84049503b2234a07dc83b27b22847ad8920ff42f674ef79b76280b00233d2b51b8cb2703a9d42bfbc8250c96ec32c051e57f1b4ba528db89c37e4c54e27e6e64ac69635ae887d9541619a9\nOutput = f22242751ec6b1\n\nPrivateKey = RSA-OAEP-5\nType = RSA\nInput = 30820279020100300d06092a864886f70d0101010500048202633082025f0201000281810aadf3f9c125e5d891f31ac448e993defe580f802b45f9d7f22ba5021e9c47576b5a1e68031ba9db4e6dabe4d96a1d6f3d267268cff408005f118efcadb99888d1c234467166b2a2b849a05a889c060ac0da0c5fae8b55f309ba62e703742fa0326f2d10b011021489ff497770190d895fd39f52293c39efd73a698bdab9f10ed902030100010281810256eb4cba7067f2d2be540dcdff4582a36b7d31d1c9099bb214b79848466a268f80f58a49ac04c0e3648934a0206c04537c19b236643a6082732144df75fa217588f794682be89168276dc726c5c0cbdb84d31bbf26d0a43af495717f7d528acfee341561f6ff3cae05c578f8470d9682f9c0d072f9f6068b56d5880f682be2c5024103b0d3962f6d17549cbfca11294348dcf0e7e39f8c2bc6824f2164b606d687860dae1e632393cfedf513228229069e2f60e4acd7e633a436063f82385f48993707024102e4c32e2f517269b7072309f00c0e31365f7ce28b236b82912df239abf39572cf0ed604b02982e53564c52d6a05397de5c052a2fddc141ef7189836346aeb331f024101e84b119d25161fa67b00256a5bd9b645d2b232ecb05b015180029a88622adc3f09b3aeacde6161ab7cde22c2ad26e7797df54e072cbd3b2673800b3e4338dbd5024100eb90aa1a40135b4cea07197cedc8819be1e7cbff2547662116f465a4a9f487ab12f3ba4fef13822265a65297d98b7bded9372e3ffe81a38b3e9600fed055754f0241012f7f8138f9404062eb85a42924520b38f5bb886a0196f48bb8dcea60fd92cc027f18e78158a34a5c5d5f860a0f6c04071a7d01312c065062f1eb48b79d1c83cb\n\nDecrypt = RSA-OAEP-5\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 036046a4a47d9ed3ba9a89139c105038eb7492b05a5d68bfd53accff4597f7a68651b47b4a4627d927e485eed7b4566420e8b409879e5d606eae251d22a5df799f7920bfc117b992572a53b1263146bcea03385cc5e853c9a101c8c3e1bda31a519807496c6cb5e5efb408823a352b8fa0661fb664efadd593deb99fff5ed000e5\nOutput = af71a901e3a61d3132f0fc1fdb474f9ea6579257ffc24d164170145b3dbde8\n\nDecrypt = RSA-OAEP-5\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 03d6eb654edce615bc59f455265ed4e5a18223cbb9be4e4069b473804d5de96f54dcaaa603d049c5d94aa1470dfcd2254066b7c7b61ff1f6f6770e3215c51399fd4e34ec5082bc48f089840ad04354ae66dc0f1bd18e461a33cc1258b443a2837a6df26759aa2302334986f87380c9cc9d53be9f99605d2c9a97da7b0915a4a7ad\nOutput = a3b844a08239a8ac41605af17a6cfda4d350136585903a417a79268760519a4b4ac3303ec73f0f87cfb32399\n\nDecrypt = RSA-OAEP-5\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 0770952181649f9f9f07ff626ff3a22c35c462443d905d456a9fd0bff43cac2ca7a9f554e9478b9acc3ac838b02040ffd3e1847de2e4253929f9dd9ee4044325a9b05cabb808b2ee840d34e15d105a3f1f7b27695a1a07a2d73fe08ecaaa3c9c9d4d5a89ff890d54727d7ae40c0ec1a8dd86165d8ee2c6368141016a48b55b6967\nOutput = 308b0ecbd2c76cb77fc6f70c5edd233fd2f20929d629f026953bb62a8f4a3a314bde195de85b5f816da2aab074d26cb6acddf323ae3b9c678ac3cf12fbdde7\n\nDecrypt = RSA-OAEP-5\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 0812b76768ebcb642d040258e5f4441a018521bd96687e6c5e899fcd6c17588ff59a82cc8ae03a4b45b31299af1788c329f7dcd285f8cf4ced82606b97612671a45bedca133442144d1617d114f802857f0f9d739751c57a3f9ee400912c61e2e6992be031a43dd48fa6ba14eef7c422b5edc4e7afa04fdd38f402d1c8bb719abf\nOutput = 15c5b9ee1185\n\nDecrypt = RSA-OAEP-5\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 07b60e14ec954bfd29e60d0047e789f51d57186c63589903306793ced3f68241c743529aba6a6374f92e19e0163efa33697e196f7661dfaaa47aac6bde5e51deb507c72c589a2ca1693d96b1460381249b2cdb9eac44769f2489c5d3d2f99f0ee3c7ee5bf64a5ac79c42bd433f149be8cb59548361640595513c97af7bc2509723\nOutput = 21026e6800c7fa728fcaaba0d196ae28d7a2ac4ffd8abce794f0985f60c8a6737277365d3fea11db8923a2029a\n\nDecrypt = RSA-OAEP-5\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 08c36d4dda33423b2ed6830d85f6411ba1dcf470a1fae0ebefee7c089f256cef74cb96ea69c38f60f39abee44129bcb4c92de7f797623b20074e3d9c2899701ed9071e1efa0bdd84d4c3e5130302d8f0240baba4b84a71cc032f2235a5ff0fae277c3e8f9112bef44c9ae20d175fc9a4058bfc930ba31b02e2e4f444483710f24a\nOutput = 541e37b68b6c8872b84c02\n\nPrivateKey = RSA-OAEP-6\nType = RSA\nInput = 30820279020100300d06092a864886f70d0101010500048202633082025f02010002818112b17f6dad2ecd19ff46dc13f7860f09e0e0cfb677b38a52592305ceaf022c166db90d04ac29e33f7dd12d9faf66e0816bb63ead267cc7d46c17c37be214bca2a22d723a64e44407436b6fc965729aefc2554f376cd5dcea68293780a62bf39d0029485a160bbb9e5dc0972d21a504f52e5ee028aa416332f510b2e9cff5f722af02030100010281810295eca3560618369559cecd303aa9cfdafc1d9f06959df75ffef929aa896961bcd190dc6997eda7f5963e724d07b4dc11f3065e5ae97d96835112280b9084bb14f2a21ebd4e889d41b9c4132ec1956fcab8bb2fed0575884936522c5ff7d33261904824e7cadee4e0bb372d2457cf78e2bd1286228ff83f10731ce63c90cff3f9024104a6ce8b7358dfa69bdcf742617005afb5385f5f3a58a24ef74a22a8c05cb7cc38ebd4cc9d9a9d789a62cd0f60f0cb941d3423c9692efa4fe3adff290c4749a38b02410404c9a803371fedb4c5be39f3c00b009e5e08a63be1e40035cdaca5011cc701cf7eebcb99f0ffe17cfd0a4bf7befd2dd536ac946db797fdbc4abe8f29349b91ed024103961c8f760aa2bd5154c7aafd77225b3bacd0139ae7b5948ea3311fccd86fb95c75afa767284b9b2de559572f15d8d044c7eb83a1be5fadf2cc377c0d8475294b0241022197e066742196aabc03fa2feeb4e70b15cb787d617acd31bb75c7bc234ad706f7c48d2182d1f0ff9c228dcf41967b6c0ba6d2c0ad110a1b857831ec245e2cb102410401c4c0c53d45dbdb5e9d96d0fecf4275df0974bc4a0736b4a74c3269053efb686ace2406e22c9e058ddb4ae540627ae2fdb08261e8e7e4bcbc994daafa305c45\n\nDecrypt = RSA-OAEP-6\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 0630eebcd2856c24f798806e41f9e67345eda9ceda386acc9facaea1eeed06ace583709718d9d169fadf414d5c76f92996833ef305b75b1e4b95f662a20faedc3bae0c4827a8bf8a88edbd57ec203a27a841f02e43a615bab1a8cac0701de34debdef62a088089b55ec36ea7522fd3ec8d06b6a073e6df833153bc0aefd93bd1a3\nOutput = 4046ca8baa3347ca27f49e0d81f9cc1d71be9ba517d4\n\nDecrypt = RSA-OAEP-6\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 0ebc37376173a4fd2f89cc55c2ca62b26b11d51c3c7ce49e8845f74e7607317c436bc8d23b9667dfeb9d087234b47bc6837175ae5c0559f6b81d7d22416d3e50f4ac533d8f0812f2db9e791fe9c775ac8b6ad0f535ad9ceb23a4a02014c58ab3f8d3161499a260f39348e714ae2a1d3443208fd8b722ccfdfb393e98011f99e63f\nOutput = 5cc72c60231df03b3d40f9b57931bc31109f972527f28b19e7480c7288cb3c92b22512214e4be6c914792ddabdf57faa8aa7\n\nDecrypt = RSA-OAEP-6\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 0a98bf1093619394436cf68d8f38e2f158fde8ea54f3435f239b8d06b8321844202476aeed96009492480ce3a8d705498c4c8c68f01501dc81db608f60087350c8c3b0bd2e9ef6a81458b7c801b89f2e4fe99d4900ba6a4b5e5a96d865dc676c7755928794130d6280a8160a190f2df3ea7cf9aa0271d88e9e6905ecf1c5152d65\nOutput = b20e651303092f4bccb43070c0f86d23049362ed96642fc5632c27db4a52e3d831f2ab068b23b149879c002f6bf3feee97591112562c\n\nDecrypt = RSA-OAEP-6\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 008e7a67cacfb5c4e24bec7dee149117f19598ce8c45808fef88c608ff9cd6e695263b9a3c0ad4b8ba4c95238e96a8422b8535629c8d5382374479ad13fa39974b242f9a759eeaf9c83ad5a8ca18940a0162ba755876df263f4bd50c6525c56090267c1f0e09ce0899a0cf359e88120abd9bf893445b3cae77d3607359ae9a52f8\nOutput = 684e3038c5c041f7\n\nDecrypt = RSA-OAEP-6\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 00003474416c7b68bdf961c385737944d7f1f40c",
-    "b395343c693cc0b4fe63b31fedf1eaeeac9ccc0678b31dc32e0977489514c4f09085f6298a9653f01aea4045ff582ee887be26ae575b73eef7f3774921e375a3d19adda0ca31aa1849887c1f42cac9677f7a2f4e923f6e5a868b38c084ef187594dc9f7f048fea2e02955384ab\nOutput = 32488cb262d041d6e4dd35f987bf3ca696db1f06ac29a44693\n\nDecrypt = RSA-OAEP-6\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 0a026dda5fc8785f7bd9bf75327b63e85e2c0fdee5dadb65ebdcac9ae1de95c92c672ab433aa7a8e69ce6a6d8897fac4ac4a54de841ae5e5bbce7687879d79634cea7a30684065c714d52409b928256bbf53eabcd5231eb7259504537399bd29164b726d33a46da701360a4168a091ccab72d44a62fed246c0ffea5b1348ab5470\nOutput = 50ba14be8462720279c306ba\n\nPrivateKey = RSA-OAEP-7\nType = RSA\nInput = 30820278020100300d06092a864886f70d0101010500048202623082025e020100028181311179f0bcfc9b9d3ca315d00ef30d7bdd3a2cfae9911bfedcb948b3a4782d0732b6ab44aa4bf03741a644dc01bec3e69b01a033e675d8acd7c4925c6b1aec3119051dfd89762d215d45475ffcb59f908148623f37177156f6ae86dd7a7c5f43dc1e1f908254058a284a5f06c0021793a87f1ac5feff7dcaee69c5e51a3789e3730203010001028181070cfcff2feb8276e27432c45dfee48f49b7917d6530e1f0ca3460f32e0276174487c56e22a45d2500d7775495219d7d165a9cf3bd92c32af9a98d8dc9cc296800adc94a0a54fb40f34291bf84ee8ea12b6f109359c6d3542a50f9c767f5cfff05a681c2e656fb77caaadb4be9468d8abcd4df98f58e86d2053fa1349f748e21b102410749262c111cd470ec2566e6b3732fc09329469aa19071d3b9c01906514c6f1d26baa14beab0971c8b7e611a4f79009d6fea776928ca25285b0de3643d1a3f8c71024106bc1e50e96c02bf636e9eea8b899bbebf7651de77dd474c3e9bc23bad8182b61904c7d97dfbebfb1e00108878b6e67e415391d67942c2b2bf9b4435f88b0cb023024103bc7ea7f0aab143abc6ce8b97118636a30172e4cfe02c8fa0dda3b7baaf90f8092982985525f488bdfcb4bd726e22639ac64a3092ab7ffcbf1d5334cfa50b5bf102410262a6aa29c2a3c67dc5346c06381afd987aa3cc93cfbfecf54fdd9f9d787d7f59a523d398979da137a2f6381fe94801f7c94da21518dc34cb40870c4697994ad90240649d4c17b6ee1721e772d0389a559c3d3cdf9550d457c46b037b74641b1d52166af8a213c8396206cdfba4422f18d6f61dbcb5d214c971bf482aeb976a7370c2\n\nDecrypt = RSA-OAEP-7\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 1688e4ce7794bba6cb7014169ecd559cede2a30b56a52b68d9fe18cf1973ef97b2a03153951c755f6294aa49adbdb55845ab6875fb3986c93ecf927962840d282f9e54ce8b690f7c0cb8bbd73440d9571d1b16cd9260f9eab4783cc482e5223dc60973871783ec27b0ae0fd47732cbc286a173fc92b00fb4ba6824647cd93c85c1\nOutput = 47aae909\n\nDecrypt = RSA-OAEP-7\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 1052ed397b2e01e1d0ee1c50bf24363f95e504f4a03434a08fd822574ed6b9736edbb5f390db10321479a8a139350e2bd4977c3778ef331f3e78ae118b268451f20a2f01d471f5d53c566937171b2dbc2d4bde459a5799f0372d6574239b2323d245d0bb81c286b63c89a361017337e4902f88a467f4c7f244bfd5ab46437ff3b6\nOutput = 1d9b2e2223d9bc13bfb9f162ce735db48ba7c68f6822a0a1a7b6ae165834e7\n\nDecrypt = RSA-OAEP-7\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 2155cd843ff24a4ee8badb7694260028a490813ba8b369a4cbf106ec148e5298707f5965be7d101c1049ea8584c24cd63455ad9c104d686282d3fb803a4c11c1c2e9b91c7178801d1b6640f003f5728df007b8a4ccc92bce05e41a27278d7c85018c52414313a5077789001d4f01910b72aad05d220aa14a58733a7489bc54556b\nOutput = d976fc\n\nDecrypt = RSA-OAEP-7\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 0ab14c373aeb7d4328d0aaad8c094d88b9eb098b95f21054a29082522be7c27a312878b637917e3d819e6c3c568db5d843802b06d51d9e98a2be0bf40c031423b00edfbff8320efb9171bd2044653a4cb9c5122f6c65e83cda2ec3c126027a9c1a56ba874d0fea23f380b82cf240b8cf540004758c4c77d934157a74f3fc12bfac\nOutput = d4738623df223aa43843df8467534c41d013e0c803c624e263666b239bde40a5f29aeb8de79e3daa61dd0370f49bd4b013834b98212aef6b1c5ee373b3cb\n\nDecrypt = RSA-OAEP-7\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 028387a318277434798b4d97f460068df5298faba5041ba11761a1cb7316b24184114ec500257e2589ed3b607a1ebbe97a6cc2e02bf1b681f42312a33b7a77d8e7855c4a6de03e3c04643f786b91a264a0d6805e2cea91e68177eb7a64d9255e4f27e713b7ccec00dc200ebd21c2ea2bb890feae4942df941dc3f97890ed347478\nOutput = bb47231ca5ea1d3ad46c99345d9a8a61\n\nDecrypt = RSA-OAEP-7\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 14c678a94ad60525ef39e959b2f3ba5c097a94ff912b67dbace80535c187abd47d075420b1872152bba08f7fc31f313bbf9273c912fc4c0149a9b0cfb79807e346eb332069611bec0ff9bcd168f1f7c33e77313cea454b94e2549eecf002e2acf7f6f2d2845d4fe0aab2e5a92ddf68c480ae11247935d1f62574842216ae674115\nOutput = 2184827095d35c3f86f600e8e59754013296\n\nPrivateKey = RSA-OAEP-8\nType = RSA\nInput = 30820279020100300d06092a864886f70d0101010500048202633082025f0201000281815bdf0e30d321dda5147f882408fa69195480df8f80d3f6e8bf5818504f36427ca9b1f5540b9c65a8f6974cf8447a244d9280201bb49fcbbe6378d1944cd227e230f96e3d10f819dcef276c64a00b2a4b6701e7d01de5fabde3b1e9a0df82f4631359cd22669647fbb1717246134ed7b497cfffbdc42b59c73a96ed90166212dff702030100010281810f7d1e9e5aaa25fd13e4a0663ae144e0d15f5cd18bcdb09df2cc7e64e3c5e915ad62645304161d098c715bb7ab8bd01d07eaf3fed7c7ed08af2a8a62ef44ab16b320e14af72a48f96afe262a0ae4cf65e635e910790cd4ee5cea768a4b2639f7e6f677b3f0bb6be32b75747d8909036f0264f58d401cdba131716157a75ecf633102410a02ef8448d9fad8bbd0d004c8c2aa9751ef9721c1b0d03236a54b0df947cbaed5a255ee9e8e20d491ea1723fe094704a9762e88afd16ebb5994412ca966dc4f9f0241092d362e7ed3a0bfd9e9fd0e6c0301b6df29159cf50cc83b9b0cf4d6eea71a61e002b46e0ae9f2de62d25b5d7452d498b81c9ac6fc58593d4c3fb4f5d72dfbb0a9024107c71410af103962db367404e37ae850baa4e9c29dd92145815294a67c7d1c6ded263aa030a9b633ae50303e14035d1af014123eba687820308d8ebc85b6957d7d024100ae2c75380c02c016ad05891b3301de881f28ae1171182b6b2c83bea7c515eca9ca298c7b1cab5817a597068fc85060de4da8a016378aae43c7f967bcc37904b902410598d1059e3ada4f6320752c09d805ff7d1f1ae0d017aeeee9cefa0d7dd7ff775e44b578322f6405d6211da19519666aa87fdc4cd8c88f6b6e3d67e961dcbba3d0\n\nDecrypt = RSA-OAEP-8\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 09b3683d8a2eb0fb295b62ed1fb9290b714457b7825319f4647872af889b30409472020ad12912bf19b11d4819f49614824ffd84d09c0a17e7d17309d12919790410aa2995699f6a86dbe3242b5acc23af45691080d6b1ae810fb3e3057087f0970092ce00be9562ff4053b6262ce0caa93e13723d2e3a5ba075d45f0d61b54b61\nOutput = 050b755e5e6880f7b9e9d692a74c37aae449b31bfea6deff83747a897f6c2c825bb1adbf850a3c96994b5de5b33cbc7d4a17913a7967\n\nDecrypt = RSA-OAEP-8\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 2ecf15c97c5a15b1476ae986b371b57a24284f4a162a8d0c8182e7905e792256f1812ba5f83f1f7a130e42dcc02232844edc14a31a68ee97ae564a383a3411656424c5f62ddb646093c367be1fcda426cf00a06d8acb7e57776fbbd855ac3df506fc16b1d7c3f2110f3d8068e91e186363831c8409680d8da9ecd8cf1fa20ee39d\nOutput = 4eb68dcd93ca9b19df111bd43608f557026fe4aa1d5cfac227a3eb5ab9548c18a06dded23f81825986b2fcd71109ecef7eff88873f075c2aa0c469f69c92bc\n\nDecrypt = RSA-OAEP-8\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 4bc89130a5b2dabb7c2fcf90eb5d0eaf9e681b7146a38f3173a3d9cfec52ea9e0a41932e648a9d69344c50da763f51a03c95762131e8052254dcd2248cba40fd31667786ce05a2b7b531ac9dac9ed584a59b677c1a8aed8c5d15d68c05569e2be780bf7db638fd2bfd2a85ab276860f3777338fca989ffd743d13ee08e0ca9893f\nOutput = 8604ac56328c1ab5ad917861\n\nDecrypt = RSA-OAEP-8\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 2e456847d8fc36ff0147d6993594b9397227d577752c79d0f904fcb039d4d812fea605a7b574dd82ca786f93752348438ee9f5b5454985d5f0e1699e3e7ad175a32e15f03deb042ab9fe1dd9db1bb86f8c089ccb45e7ef0c5ee7ca9b7290ca6b15bed47039788a8a93ff83e0e8d6244c71006362deef69b6f416fb3c684383fbd0\nOutput = fdda5fbf6ec361a9d9a4ac68af216a0686f438b1e0e5c36b955f74e107f39c0dddcc\n\nDecrypt = RSA-OAEP-8\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 1fb9356fd5c4b1796db2ebf7d0d393cc810adf6145defc2fce714f79d93800d5e2ac211ea8bbecca4b654b94c3b18b30dd576ce34dc95436ef57a09415645923359a5d7b4171ef22c24670f1b229d3603e91f76671b7df97e7317c97734476d5f3d17d21cf82b5ba9f83df2e588d36984fd1b584468bd23b2e875f32f68953f7b2\nOutput = 4a5f4914bee25de3c69341de07\n\nDecrypt = RSA-OAEP-8\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 3afd9c6600147b21798d818c655a0f4c9212db26d0b0dfdc2a7594ccb3d22f5bf1d7c3e112cd73fc7d509c7a8bafdd3c274d1399009f9609ec4be6477e453f075aa33db382870c1c3409aef392d7386ae3a696b99a94b4da0589447e955d16c98b17602a59bd736279fcd8fb280c4462d590bfa9bf13fed570eafde97330a2c210\nOutput = 8e07d66f7b880a72563abcd3f35092bc33409fb7f88f2472be\n\nPrivateKey = RSA-OAEP-9\nType = RSA\nInput = 30820397020100300d06092a864886f70d0101010500048203813082037d0201000281c100cf2cd41e34ca3a728ea5cb8aff64c36d27bdef5364e336fd68d3123c5a196a8c287013e853d5156d58d151954520fb4f6d7b17abb68177",
-    "65909c576119659d902b1906ed8a2b10c155c24d124528dab9eeae379beac66e4a411786dcb8fd0062ebc030de1219a04c2a8c1b7dd3131e4d6b6caee2e31a5ed41ac1509b2ef1ee2ab18364be568ca941c25ecc84ff9d643b5ec1aaae102a20d73f479b780fd6da91075212d9eac03a0674d899eba2e431f4c44b615b6ba2232bd4b33baed73d625d02030100010281c0198c141e23715a92bccf6a119a5bc11389468d2811f548d727e17b4ab0eb986d6f211efb53b71f7ccbea87ee69c75ee615008c5332deb52bf390abdfbfe37d7205368159b2638c1de326e21d22251f0fb5848b3bf15005d2a74330f0afe916ee62ccc1344d1d83a709e60676273840f7f377424a5e0a4da75f01b31ff76819cf9cbfdd215243c3917c03ef38199312e567b3bf7aed3ab457f371ef8a1423f45b68c6e282ec111bba2833b987fd69fad83bc1b8c613c5e1ea16c11ed125ea7ec1026100fc8d6c04bec4eb9a8192ca7900cbe536e2e8b519decf33b2459798c6909df4f176db7d23190fc72b8865a718af895f1bcd9145298027423b605e70a47cf58390a8c3e88fc8c48e8b32e3da210dfbe3e881ea5674b6a348c21e93f9e55ea65efd026100d200d45e788aacea606a401d0460f87dd5c1027e12dc1a0d7586e8939d9cf789b40f51ac0442961de7d21cc21e05c83155c1f2aa9193387cfdf956cb48d153ba270406f9bbba537d4987d9e2f9942d7a14cbfffea74fecdda928d23e259f5ee1026100db16802f79a2f0d45f358d69fd33e44b81fae828622e93a54253e997d01b0743759da0e812b4aa4e6c8beab2328d5431955a418a67ff26a8c5c807a5da354e05ef31cc8cf758f463732950b03e265726fb94e39d6a572a26244ab08db75752ad026100a0a317cfe7df1423f87a6dee8451f4e2b4a67e5497f29b4f1e4e830b9fadd9401167026f5596e5a39c97817e0f5f16e27e19ec9902e01d7ea6fb9aa3c760afee1e381b69de6ac9c07585a06ad9c4ba00bf75c8ad2fa898a479e80ae294fed2a102600b21f335c353342eb44c3aa24445780c2d655b940174cae38c7c8a4e6493c0ba9fd303748267b083b9a7a6cb61e42db362b8c9896db7064e02ad5ae61587da15b4649c90594909feb37dbcb654beb7268ec801e5a8b4aa3911bebd88542f05be\n\nDecrypt = RSA-OAEP-9\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 267bcd118acab1fc8ba81c85d73003cb8610fa55c1d97da8d48a7c7f06896a4db751aa284255b9d36ad65f37653d829f1b37f97b8001942545b2fc2c55a7376ca7a1be4b1760c8e05a33e5aa2526b8d98e317088e7834c755b2a59b12631a182c05d5d43ab1779264f8456f515ce57dfdf512d5493dab7b7338dc4b7d78db9c091ac3baf537a69fc7f549d979f0eff9a94fda4169bd4d1d19a69c99e33c3b55490d501b39b1edae118ff6793a153261584d3a5f39f6e682e3d17c8cd1261fa72\nOutput = f735fd55ba92592c3b52b8f9c4f69aaa1cbef8fe88add095595412467f9cf4ec0b896c59eda16210e7549c8abb10cdbc21a12ec9b6b5b8fd2f10399eb6\n\nDecrypt = RSA-OAEP-9\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 93ac9f0671ec29acbb444effc1a5741351d60fdb0e393fbf754acf0de49761a14841df7772e9bc82773966a1584c4d72baea00118f83f35cca6e537cbd4d811f5583b29783d8a6d94cd31be70d6f526c10ff09c6fa7ce069795a3fcd0511fd5fcb564bcc80ea9c78f38b80012539d8a4ddf6fe81e9cddb7f50dbbbbcc7e5d86097ccf4ec49189fb8bf318be6d5a0715d516b49af191258cd32dc833ce6eb4673c03a19bbace88cc54895f636cc0c1ec89096d11ce235a265ca1764232a689ae8\nOutput = 81b906605015a63aabe42ddf11e1978912f5404c7474b26dce3ed482bf961ecc818bf420c54659\n\nDecrypt = RSA-OAEP-9\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 81ebdd95054b0c822ef9ad7693f5a87adfb4b4c4ce70df2df84ed49c04da58ba5fc20a19e1a6e8b7a3900b22796dc4e869ee6b42792d15a8eceb56c09c69914e813cea8f6931e4b8ed6f421af298d595c97f4789c7caa612c7ef360984c21b93edc5401068b5af4c78a8771b984d53b8ea8adf2f6a7d4a0ba76c75e1dd9f658f20ded4a46071d46d7791b56803d8fea7f0b0f8e41ae3f09383a6f9585fe7753eaaffd2bf94563108beecc207bbb535f5fcc705f0dde9f708c62f49a9c90371d3\nOutput = fd326429df9b890e09b54b18b8f34f1e24\n\nDecrypt = RSA-OAEP-9\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = bcc35f94cde66cb1136625d625b94432a35b22f3d2fa11a613ff0fca5bd57f87b902ccdc1cd0aebcb0715ee869d1d1fe395f6793003f5eca465059c88660d446ff5f0818552022557e38c08a67ead991262254f10682975ec56397768537f4977af6d5f6aaceb7fb25dec5937230231fd8978af49119a29f29e424ab8272b47562792d5c94f774b8829d0b0d9f1a8c9eddf37574d5fa248eefa9c5271fc5ec2579c81bdd61b410fa61fe36e424221c113addb275664c801d34ca8c6351e4a858\nOutput = f1459b5f0c92f01a0f723a2e5662484d8f8c0a20fc29dad6acd43bb5f3effdf4e1b63e07fdfe6628d0d74ca19bf2d69e4a0abf86d293925a796772f8088e\n\nDecrypt = RSA-OAEP-9\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 232afbc927fa08c2f6a27b87d4a5cb09c07dc26fae73d73a90558839f4fd66d281b87ec734bce237ba166698ed829106a7de6942cd6cdce78fed8d2e4d81428e66490d036264cef92af941d3e35055fe3981e14d29cbb9a4f67473063baec79a1179f5a17c9c1832f2838fd7d5e59bb9659d56dce8a019edef1bb3accc697cc6cc7a778f60a064c7f6f5d529c6210262e003de583e81e3167b89971fb8c0e15d44fffef89b53d8d64dd797d159b56d2b08ea5307ea12c241bd58d4ee278a1f2e\nOutput = 53e6e8c729d6f9c319dd317e74b0db8e4ccca25f3c8305746e137ac63a63ef3739e7b595abb96e8d55e54f7bd41ab433378ffb911d\n\nDecrypt = RSA-OAEP-9\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 438cc7dc08a68da249e42505f8573ba60e2c2773d5b290f4cf9dff718e842081c383e67024a0f29594ea987b9d25e4b738f285970d195abb3a8c8054e3d79d6b9c9a8327ba596f1259e27126674766907d8d582ff3a8476154929adb1e6d1235b2ccb4ec8f663ba9cc670a92bebd853c8dbf69c6436d016f61add836e94732450434207f9fd4c43dec2a12a958efa01efe2669899b5e604c255c55fb7166de5589e369597bb09168c06dd5db177e06a1740eb2d5c82faeca6d92fcee9931ba9f\nOutput = b6b28ea2198d0c1008bc64\n\nPrivateKey = RSA-OAEP-10\nType = RSA\nInput = 308204bd020100300d06092a864886f70d0101010500048204a7308204a30201000282010100ae45ed5601cec6b8cc05f803935c674ddbe0d75c4c09fd7951fc6b0caec313a8df39970c518bffba5ed68f3f0d7f22a4029d413f1ae07e4ebe9e4177ce23e7f5404b569e4ee1bdcf3c1fb03ef113802d4f855eb9b5134b5a7c8085adcae6fa2fa1417ec3763be171b0c62b760ede23c12ad92b980884c641f5a8fac26bdad4a03381a22fe1b754885094c82506d4019a535a286afeb271bb9ba592de18dcf600c2aeeae56e02f7cf79fc14cf3bdc7cd84febbbf950ca90304b2219a7aa063aefa2c3c1980e560cd64afe779585b6107657b957857efde6010988ab7de417fc88d8f384c4e6e72c3f943e0c31c0c4a5cc36f879d8a3ac9d7d59860eaada6b83bb020301000102820100056b04216fe5f354ac77250a4b6b0c8525a85c59b0bd80c56450a22d5f438e596a333aa875e291dd43f48cb88b9d5fc0d499f9fcd1c397f9afc070cd9e398c8d19e61db7c7410a6b2675dfbf5d345b804d201add502d5ce2dfcb091ce9997bbebe57306f383e4d588103f036f7e85d1934d152a323e4a8db451d6f4a5b1b0f102cc150e02feee2b88dea4ad4c1baccb24d84072d14e1d24a6771f7408ee30564fb86d4393a34bcf0b788501d193303f13a2284b001f0f649eaf79328d4ac5c430ab4414920a9460ed1b7bc40ec653e876d09abc509ae45b525190116a0c26101848298509c1c3bf3a483e7274054e15e97075036e989f60932807b5257751e7902818100ecf5aecd1e5515fffacbd75a2816c6ebf49018cdfb4638e185d66a7396b6f8090f8018c7fd95cc34b857dc17f0cc6516bb1346ab4d582cadad7b4103352387b70338d084047c9d9539b6496204b3dd6ea442499207bec01f964287ff6336c3984658336846f56e46861881c10233d2176bf15a5e96ddc780bc868aa77d3ce76902818100bc46c464fc6ac4ca783b0eb08a3c841b772f7e9b2f28babd588ae885e1a0c61e4858a0fb25ac299990f35be85164c259ba1175cdd7192707135184992b6c29b746dd0d2cabe142835f7d148cc161524b4a09946d48b828473f1ce76b6cb6886c345c03e05f41d51b5c3a90a3f24073c7d74a4fe25d9cf21c75960f3fc386318302818100c73564571d00fb15d08a3de9957a50915d7126e9442dacf42bc82e862e5673ff6a008ed4d2e374617df89f17a160b43b7fda9cb6b6b74218609815f7d45ca263c159aa32d272d127faf4bc8ca2d77378e8aeb19b0ad7da3cb3de0ae7314980f62b6d4b0a875d1df03c1bae39ccd833ef6cd7e2d9528bf084d1f969e794e9f6c10281802658b37f6df9c1030be1db68117fa9d87e39ea2b693b7e6d3a2f70947413eec6142e18fb8dfcb6ac545d7c86a0ad48f8457170f0efb26bc48126c53efd1d16920198dc2a1107dc282db6a80cd3062360ba3fa13f70e4312ff1a6cd6b8fc4cd9c5c3db17c6d6a57212f73ae29f619327bad59b153858585ba4e28b60a62a45e490281806f38526b3925085534ef3e415a836ede8b86158a2c7cbfeccb0bd834304fec683ba8d4f479c433d43416e63269623cea100776d85aff401d3fff610ee65411ce3b1363d63a9709eede42647cea561493d54570a879c18682cd97710b96205ec31117d73b5f36223fadd6e8ba90dd7c0ee61d44e163251e20c7f66eb305117cb8\n\nDecrypt = RSA-OAEP-10\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 53ea5dc08cd260fb3b858567287fa91552c30b2febfba213f0ae87702d068d19bab07fe574523dfb42139d68c3c5afeee0bfe4cb7969cbf382b804d6e61396144e2d0e60741f8993c3014b58b9b1957a8babcd23af854f4c356fb1662aa72bfcc7e586559dc4280d160c126785a723ebeebeff71f11594440aaef87d10793a8774a239d4a04c87fe1467b9daf85208ec6c7255794a96cc29142f9a8bd418e3c1fd67344b0cd0829df3b2bec60253196293c6b34d3f75d32f213dd45c6273d505adf4cced1057cb758fc26aeefa441255ed4e64c199ee075e7f16646182fdb464739b68ab5daff0e63e9552016824f054bf4d3c8c90a97bb6b6553284eb429fcc\nOutput = 8bba6bf82a6c0f86d5f1756e97956870b08953b06b4eb205bc1694ee\n\nDecrypt = RSA-OAEP-10\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = a2b1a430a9d657e2fa1c2bb5ed43ffb25c05a308fe9093c01031795f5874400110828ae58fb9b581ce9d",
-    "ddd3e549ae04a0985459bde6c626594e7b05dc4278b2a1465c1368408823c85e96dc66c3a30983c639664fc4569a37fe21e5a195b5776eed2df8d8d361af686e750229bbd663f161868a50615e0c337bec0ca35fec0bb19c36eb2e0bbcc0582fa1d93aacdb061063f59f2ce1ee43605e5d89eca183d2acdfe9f81011022ad3b43a3dd417dac94b4e11ea81b192966e966b182082e71964607b4f8002f36299844a11f2ae0faeac2eae70f8f4f98088acdcd0ac556e9fccc511521908fad26f04c64201450305778758b0538bf8b5bb144a828e629795\nOutput = e6ad181f053b58a904f2457510373e57\n\nDecrypt = RSA-OAEP-10\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 9886c3e6764a8b9a84e84148ebd8c3b1aa8050381a78f668714c16d9cfd2a6edc56979c535d9dee3b44b85c18be8928992371711472216d95dda98d2ee8347c9b14dffdff84aa48d25ac06f7d7e65398ac967b1ce90925f67dce049b7f812db0742997a74d44fe81dbe0e7a3feaf2e5c40af888d550ddbbe3bc20657a29543f8fc2913b9bd1a61b2ab2256ec409bbd7dc0d17717ea25c43f42ed27df8738bf4afc6766ff7aff0859555ee283920f4c8a63c4a7340cbafddc339ecdb4b0515002f96c932b5b79167af699c0ad3fccfdf0f44e85a70262bf2e18fe34b850589975e867ff969d48eabf212271546cdc05a69ecb526e52870c836f307bd798780ede\nOutput = 510a2cf60e866fa2340553c94ea39fbc256311e83e94454b4124\n\nDecrypt = RSA-OAEP-10\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 6318e9fb5c0d05e5307e1683436e903293ac4642358aaa223d7163013aba87e2dfda8e60c6860e29a1e92686163ea0b9175f329ca3b131a1edd3a77759a8b97bad6a4f8f4396f28cf6f39ca58112e48160d6e203daa5856f3aca5ffed577af499408e3dfd233e3e604dbe34a9c4c9082de65527cac6331d29dc80e0508a0fa7122e7f329f6cca5cfa34d4d1da417805457e008bec549e478ff9e12a763c477d15bbb78f5b69bd57830fc2c4ed686d79bc72a95d85f88134c6b0afe56a8ccfbc855828bb339bd17909cf1d70de3335ae07039093e606d655365de6550b872cd6de1d440ee031b61945f629ad8a353b0d40939e96a3c450d2a8d5eee9f678093c8\nOutput = bcdd190da3b7d300df9a06e22caae2a75f10c91ff667b7c16bde8b53064a2649a94045c9\n\nDecrypt = RSA-OAEP-10\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 75290872ccfd4a4505660d651f56da6daa09ca1301d890632f6a992f3d565cee464afded40ed3b5be9356714ea5aa7655f4a1366c2f17c728f6f2c5a5d1f8e28429bc4e6f8f2cff8da8dc0e0a9808e45fd09ea2fa40cb2b6ce6ffff5c0e159d11b68d90a85f7b84e103b09e682666480c657505c0929259468a314786d74eab131573cf234bf57db7d9e66cc6748192e002dc0deea930585f0831fdcd9bc33d51f79ed2ffc16bcf4d59812fcebcaa3f9069b0e445686d644c25ccf63b456ee5fa6ffe96f19cdf751fed9eaf35957754dbf4bfea5216aa1844dc507cb2d080e722eba150308c2b5ff1193620f1766ecf4481bafb943bd292877f2136ca494aba0\nOutput = a7dd6c7dc24b46f9dd5f1e91ada4c3b3df947e877232a9\n\nDecrypt = RSA-OAEP-10\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 2d207a73432a8fb4c03051b3f73b28a61764098dfa34c47a20995f8115aa6816679b557e82dbee584908c6e69782d7deb34dbd65af063d57fca76a5fd069492fd6068d9984d209350565a62e5c77f23038c12cb10c6634709b547c46f6b4a709bd85ca122d74465ef97762c29763e06dbc7a9e738c78bfca0102dc5e79d65b973f28240caab2e161a78b57d262457ed8195d53e3c7ae9da021883c6db7c24afdd2322eac972ad3c354c5fcef1e146c3a0290fb67adf007066e00428d2cec18ce58f9328698defef4b2eb5ec76918fde1c198cbb38b7afc67626a9aefec4322bfd90d2563481c9a221f78c8272c82d1b62ab914e1c69f6af6ef30ca5260db4a46\nOutput = eaf1a73a1b0c4609537de69cd9228bbcfb9a8ca8c6c3efaf056fe4a7f4634ed00b7c39ec6922d7b8ea2c04ebac\n\n\n# Single-shot signing tests.\n\nSignMessage = RSA-2048\nDigest = SHA256\nInput = \"Hello world\"\nOutput = 301894798b49d6ec55d32dcc74314f04230591a515781f3eb4492f5324b56046836c4bc3e25942af341e88558cb4c3814a849207575d343189147989b16e296b5138dbbc717116dc416f201dfa35943d15060493953cda1f04a13ff89845cf7fd69e1a78d5d38522a77bb234e5d0ba2ae17ada6e22fdae27a4052fdb8ac267507dfe06ed7a865e61a52b530bbbf65c7caa89739613df10ae3b0e62ff6831ee0770086aad39c329462aede9f1b29a501bc3d09e0fe4034aa5d6831d44491d508111d88a1d7ba50cee5ef7e701b3a589adc09a752a974a6805956f4a1a0582f66309a1e02e9fb6b10d2c820fe98bb2eb04f435bc8a649cc9ab6c5a4c03e83800d1\n\nVerifyMessage = RSA-2048\nDigest = SHA256\nInput = \"Hello world\"\nOutput = 301894798b49d6ec55d32dcc74314f04230591a515781f3eb4492f5324b56046836c4bc3e25942af341e88558cb4c3814a849207575d343189147989b16e296b5138dbbc717116dc416f201dfa35943d15060493953cda1f04a13ff89845cf7fd69e1a78d5d38522a77bb234e5d0ba2ae17ada6e22fdae27a4052fdb8ac267507dfe06ed7a865e61a52b530bbbf65c7caa89739613df10ae3b0e62ff6831ee0770086aad39c329462aede9f1b29a501bc3d09e0fe4034aa5d6831d44491d508111d88a1d7ba50cee5ef7e701b3a589adc09a752a974a6805956f4a1a0582f66309a1e02e9fb6b10d2c820fe98bb2eb04f435bc8a649cc9ab6c5a4c03e83800d1\n\nVerifyMessage = RSA-2048-SPKI\nDigest = SHA256\nInput = \"Hello world\"\nOutput = 301894798b49d6ec55d32dcc74314f04230591a515781f3eb4492f5324b56046836c4bc3e25942af341e88558cb4c3814a849207575d343189147989b16e296b5138dbbc717116dc416f201dfa35943d15060493953cda1f04a13ff89845cf7fd69e1a78d5d38522a77bb234e5d0ba2ae17ada6e22fdae27a4052fdb8ac267507dfe06ed7a865e61a52b530bbbf65c7caa89739613df10ae3b0e62ff6831ee0770086aad39c329462aede9f1b29a501bc3d09e0fe4034aa5d6831d44491d508111d88a1d7ba50cee5ef7e701b3a589adc09a752a974a6805956f4a1a0582f66309a1e02e9fb6b10d2c820fe98bb2eb04f435bc8a649cc9ab6c5a4c03e83800d1\n\nVerifyMessage = P-256\nDigest = SHA256\nInput = \"Hello world\"\nOutput = 304502204c66004635c267394bd6857c1e0b53b22a2bab1ca7dff9d5c1b42143858b3ea7022100ae81228510e03cd49a8863d2ebd1c05fe0c87eacd1150433132b909994cd0dbd\n\n# Digest can't be omitted in many algorithms.\nSignMessage = RSA-2048\nInput = \"Hello world\"\nError = NO_DEFAULT_DIGEST\n\nVerifyMessage = RSA-2048\nInput = \"Hello world\"\nOutput = 301894798b49d6ec55d32dcc74314f04230591a515781f3eb4492f5324b56046836c4bc3e25942af341e88558cb4c3814a849207575d343189147989b16e296b5138dbbc717116dc416f201dfa35943d15060493953cda1f04a13ff89845cf7fd69e1a78d5d38522a77bb234e5d0ba2ae17ada6e22fdae27a4052fdb8ac267507dfe06ed7a865e61a52b530bbbf65c7caa89739613df10ae3b0e62ff6831ee0770086aad39c329462aede9f1b29a501bc3d09e0fe4034aa5d6831d44491d508111d88a1d7ba50cee5ef7e701b3a589adc09a752a974a6805956f4a1a0582f66309a1e02e9fb6b10d2c820fe98bb2eb04f435bc8a649cc9ab6c5a4c03e83800d1\nError = NO_DEFAULT_DIGEST\n\n# Signing test vectors from RFC 8032.\nSignMessage = Ed25519\nInput = \"\"\nOutput = e5564300c360ac729086e2cc806e828a84877f1eb8e5d974d873e065224901555fb8821590a33bacc61e39701cf9b46bd25bf5f0595bbe24655141438e7a100b\n\nSignMessage = Ed25519-2\nInput = 72\nOutput = 92a009a9f0d4cab8720e820b5f642540a2b27b5416503f8fb3762223ebdb69da085ac1e43e15996e458f3613d0f11d8c387b2eaeb4302aeeb00d291612bb0c00\n\nSignMessage = Ed25519-3\nInput = af82\nOutput = 6291d657deec24024827e69c3abe01a30ce548a284743a445e3680d7db5ac3ac18ff9b538d16f290ae67f760984dc6594a7c15e9716ed28dc027beceea1ec40a\n\nSignMessage = Ed25519-4\nInput = 08b8b2b733424243760fe426a4b54908632110a66c2f6591eabd3345e3e4eb98fa6e264bf09efe12ee50f8f54e9f77b1e355f6c50544e23fb1433ddf73be84d879de7c0046dc4996d9e773f4bc9efe5738829adb26c81b37c93a1b270b20329d658675fc6ea534e0810a4432826bf58c941efb65d57a338bbd2e26640f89ffbc1a858efcb8550ee3a5e1998bd177e93a7363c344fe6b199ee5d02e82d522c4feba15452f80288a821a579116ec6dad2b3b310da903401aa62100ab5d1a36553e06203b33890cc9b832f79ef80560ccb9a39ce767967ed628c6ad573cb116dbefefd75499da96bd68a8a97b928a8bbc103b6621fcde2beca1231d206be6cd9ec7aff6f6c94fcd7204ed3455c68c83f4a41da4af2b74ef5c53f1d8ac70bdcb7ed185ce81bd84359d44254d95629e9855a94a7c1958d1f8ada5d0532ed8a5aa3fb2d17ba70eb6248e594e1a2297acbbb39d502f1a8c6eb6f1ce22b3de1a1f40cc24554119a831a9aad6079cad88425de6bde1a9187ebb6092cf67bf2b13fd65f27088d78b7e883c8759d2c4f5c65adb7553878ad575f9fad878e80a0c9ba63bcbcc2732e69485bbc9c90bfbd62481d9089beccf80cfe2df16a2cf65bd92dd597b0707e0917af48bbb75fed413d238f5555a7a569d80c3414a8d0859dc65a46128bab27af87a71314f318c782b23ebfe808b82b0ce26401d2e22f04d83d1255dc51addd3b75a2b1ae0784504df543af8969be3ea7082ff7fc9888c144da2af58429ec96031dbcad3dad9af0dcbaaaf268cb8fcffead94f3c7ca495e056a9b47acdb751fb73e666c6c655ade8297297d07ad1ba5e43f1bca32301651339e22904cc8c42f58c30c04aafdb038dda0847dd988dcda6f3bfd15c4b4c4525004aa06eeff8ca61783aacec57fb3d1f92b0fe2fd1a85f6724517b65e614ad6808d6f6ee34dff7310fdc82aebfd904b01e1dc54b2927094b2db68d6f903b68401adebf5a7e08d78ff4ef5d63653a65040cf9bfd4aca7984a74d37145986780fc0b16ac451649de6188a7dbdf191f64b5fc5e2ab47b57f7f7276cd419c17a3ca8e1b939ae49e488acba6b965610b5480109c8b17b80e1b7b750dfc7598d5d5011fd2dcc5600a32ef5b52a1ecc820e308aa342721aac0943bf6686b64b2579376504ccc493d97e6aed3fb0f9cd71a43dd497f01f17c0e2cb3797aa2a2f256656168e6c496afc5fb93246f6b1116398a346f1a641f3b041e989f7914f90cc2c7fff357876e50",
-    "6b50d334ba77c225bc307ba537152f3f1610e4eafe595f6d9d90d11faa933a15ef1369546868a7f3a45a96768d40fd9d03412c091c6315cf4fde7cb68606937380db2eaaa707b4c4185c32eddcdd306705e4dc1ffc872eeee475a64dfac86aba41c0618983f8741c5ef68d3a101e8a3b8cac60c905c15fc910840b94c00a0b9d0\nOutput = 0aab4c900501b3e24d7cdf4663326a3a87df5e4843b2cbdb67cbf6e460fec350aa5371b1508f9f4528ecea23c436d94b5e8fcd4f681e30a6ac00a9704a188a03\n\nSignMessage = Ed25519-5\nInput = ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f\nOutput = dc2a4459e7369633a52b1bf277839a00201009a3efbf3ecb69bea2186c26b58909351fc9ac90b3ecfdfbc7c66431e0303dca179c138ac17ad9bef1177331a704\n\n# Signing with public keys is not allowed.\nSignMessage = Ed25519-SPKI\nInput = \"\"\nError = NOT_A_PRIVATE_KEY\n\n# Verify test vectors from RFC 8032. Test verifying with both the public and\n# private key.\nVerifyMessage = Ed25519\nInput = \"\"\nOutput = e5564300c360ac729086e2cc806e828a84877f1eb8e5d974d873e065224901555fb8821590a33bacc61e39701cf9b46bd25bf5f0595bbe24655141438e7a100b\n\nVerifyMessage = Ed25519-SPKI\nInput = \"\"\nOutput = e5564300c360ac729086e2cc806e828a84877f1eb8e5d974d873e065224901555fb8821590a33bacc61e39701cf9b46bd25bf5f0595bbe24655141438e7a100b\n\nVerifyMessage = Ed25519-2\nInput = 72\nOutput = 92a009a9f0d4cab8720e820b5f642540a2b27b5416503f8fb3762223ebdb69da085ac1e43e15996e458f3613d0f11d8c387b2eaeb4302aeeb00d291612bb0c00\n\nVerifyMessage = Ed25519-SPKI-2\nInput = 72\nOutput = 92a009a9f0d4cab8720e820b5f642540a2b27b5416503f8fb3762223ebdb69da085ac1e43e15996e458f3613d0f11d8c387b2eaeb4302aeeb00d291612bb0c00\n\nVerifyMessage = Ed25519-3\nInput = af82\nOutput = 6291d657deec24024827e69c3abe01a30ce548a284743a445e3680d7db5ac3ac18ff9b538d16f290ae67f760984dc6594a7c15e9716ed28dc027beceea1ec40a\n\nVerifyMessage = Ed25519-SPKI-3\nInput = af82\nOutput = 6291d657deec24024827e69c3abe01a30ce548a284743a445e3680d7db5ac3ac18ff9b538d16f290ae67f760984dc6594a7c15e9716ed28dc027beceea1ec40a\n\nVerifyMessage = Ed25519-4\nInput = 08b8b2b733424243760fe426a4b54908632110a66c2f6591eabd3345e3e4eb98fa6e264bf09efe12ee50f8f54e9f77b1e355f6c50544e23fb1433ddf73be84d879de7c0046dc4996d9e773f4bc9efe5738829adb26c81b37c93a1b270b20329d658675fc6ea534e0810a4432826bf58c941efb65d57a338bbd2e26640f89ffbc1a858efcb8550ee3a5e1998bd177e93a7363c344fe6b199ee5d02e82d522c4feba15452f80288a821a579116ec6dad2b3b310da903401aa62100ab5d1a36553e06203b33890cc9b832f79ef80560ccb9a39ce767967ed628c6ad573cb116dbefefd75499da96bd68a8a97b928a8bbc103b6621fcde2beca1231d206be6cd9ec7aff6f6c94fcd7204ed3455c68c83f4a41da4af2b74ef5c53f1d8ac70bdcb7ed185ce81bd84359d44254d95629e9855a94a7c1958d1f8ada5d0532ed8a5aa3fb2d17ba70eb6248e594e1a2297acbbb39d502f1a8c6eb6f1ce22b3de1a1f40cc24554119a831a9aad6079cad88425de6bde1a9187ebb6092cf67bf2b13fd65f27088d78b7e883c8759d2c4f5c65adb7553878ad575f9fad878e80a0c9ba63bcbcc2732e69485bbc9c90bfbd62481d9089beccf80cfe2df16a2cf65bd92dd597b0707e0917af48bbb75fed413d238f5555a7a569d80c3414a8d0859dc65a46128bab27af87a71314f318c782b23ebfe808b82b0ce26401d2e22f04d83d1255dc51addd3b75a2b1ae0784504df543af8969be3ea7082ff7fc9888c144da2af58429ec96031dbcad3dad9af0dcbaaaf268cb8fcffead94f3c7ca495e056a9b47acdb751fb73e666c6c655ade8297297d07ad1ba5e43f1bca32301651339e22904cc8c42f58c30c04aafdb038dda0847dd988dcda6f3bfd15c4b4c4525004aa06eeff8ca61783aacec57fb3d1f92b0fe2fd1a85f6724517b65e614ad6808d6f6ee34dff7310fdc82aebfd904b01e1dc54b2927094b2db68d6f903b68401adebf5a7e08d78ff4ef5d63653a65040cf9bfd4aca7984a74d37145986780fc0b16ac451649de6188a7dbdf191f64b5fc5e2ab47b57f7f7276cd419c17a3ca8e1b939ae49e488acba6b965610b5480109c8b17b80e1b7b750dfc7598d5d5011fd2dcc5600a32ef5b52a1ecc820e308aa342721aac0943bf6686b64b2579376504ccc493d97e6aed3fb0f9cd71a43dd497f01f17c0e2cb3797aa2a2f256656168e6c496afc5fb93246f6b1116398a346f1a641f3b041e989f7914f90cc2c7fff357876e506b50d334ba77c225bc307ba537152f3f1610e4eafe595f6d9d90d11faa933a15ef1369546868a7f3a45a96768d40fd9d03412c091c6315cf4fde7cb68606937380db2eaaa707b4c4185c32eddcdd306705e4dc1ffc872eeee475a64dfac86aba41c0618983f8741c5ef68d3a101e8a3b8cac60c905c15fc910840b94c00a0b9d0\nOutput = 0aab4c900501b3e24d7cdf4663326a3a87df5e4843b2cbdb67cbf6e460fec350aa5371b1508f9f4528ecea23c436d94b5e8fcd4f681e30a6ac00a9704a188a03\n\nVerifyMessage = Ed25519-SPKI-4\nInput = 08b8b2b733424243760fe426a4b54908632110a66c2f6591eabd3345e3e4eb98fa6e264bf09efe12ee50f8f54e9f77b1e355f6c50544e23fb1433ddf73be84d879de7c0046dc4996d9e773f4bc9efe5738829adb26c81b37c93a1b270b20329d658675fc6ea534e0810a4432826bf58c941efb65d57a338bbd2e26640f89ffbc1a858efcb8550ee3a5e1998bd177e93a7363c344fe6b199ee5d02e82d522c4feba15452f80288a821a579116ec6dad2b3b310da903401aa62100ab5d1a36553e06203b33890cc9b832f79ef80560ccb9a39ce767967ed628c6ad573cb116dbefefd75499da96bd68a8a97b928a8bbc103b6621fcde2beca1231d206be6cd9ec7aff6f6c94fcd7204ed3455c68c83f4a41da4af2b74ef5c53f1d8ac70bdcb7ed185ce81bd84359d44254d95629e9855a94a7c1958d1f8ada5d0532ed8a5aa3fb2d17ba70eb6248e594e1a2297acbbb39d502f1a8c6eb6f1ce22b3de1a1f40cc24554119a831a9aad6079cad88425de6bde1a9187ebb6092cf67bf2b13fd65f27088d78b7e883c8759d2c4f5c65adb7553878ad575f9fad878e80a0c9ba63bcbcc2732e69485bbc9c90bfbd62481d9089beccf80cfe2df16a2cf65bd92dd597b0707e0917af48bbb75fed413d238f5555a7a569d80c3414a8d0859dc65a46128bab27af87a71314f318c782b23ebfe808b82b0ce26401d2e22f04d83d1255dc51addd3b75a2b1ae0784504df543af8969be3ea7082ff7fc9888c144da2af58429ec96031dbcad3dad9af0dcbaaaf268cb8fcffead94f3c7ca495e056a9b47acdb751fb73e666c6c655ade8297297d07ad1ba5e43f1bca32301651339e22904cc8c42f58c30c04aafdb038dda0847dd988dcda6f3bfd15c4b4c4525004aa06eeff8ca61783aacec57fb3d1f92b0fe2fd1a85f6724517b65e614ad6808d6f6ee34dff7310fdc82aebfd904b01e1dc54b2927094b2db68d6f903b68401adebf5a7e08d78ff4ef5d63653a65040cf9bfd4aca7984a74d37145986780fc0b16ac451649de6188a7dbdf191f64b5fc5e2ab47b57f7f7276cd419c17a3ca8e1b939ae49e488acba6b965610b5480109c8b17b80e1b7b750dfc7598d5d5011fd2dcc5600a32ef5b52a1ecc820e308aa342721aac0943bf6686b64b2579376504ccc493d97e6aed3fb0f9cd71a43dd497f01f17c0e2cb3797aa2a2f256656168e6c496afc5fb93246f6b1116398a346f1a641f3b041e989f7914f90cc2c7fff357876e506b50d334ba77c225bc307ba537152f3f1610e4eafe595f6d9d90d11faa933a15ef1369546868a7f3a45a96768d40fd9d03412c091c6315cf4fde7cb68606937380db2eaaa707b4c4185c32eddcdd306705e4dc1ffc872eeee475a64dfac86aba41c0618983f8741c5ef68d3a101e8a3b8cac60c905c15fc910840b94c00a0b9d0\nOutput = 0aab4c900501b3e24d7cdf4663326a3a87df5e4843b2cbdb67cbf6e460fec350aa5371b1508f9f4528ecea23c436d94b5e8fcd4f681e30a6ac00a9704a188a03\n\nVerifyMessage = Ed25519-5\nInput = ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f\nOutput = dc2a4459e7369633a52b1bf277839a00201009a3efbf3ecb69bea2186c26b58909351fc9ac90b3ecfdfbc7c66431e0303dca179c138ac17ad9bef1177331a704\n\nVerifyMessage = Ed25519-SPKI-5\nInput = ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f\nOutput = dc2a4459e7369633a52b1bf277839a00201009a3efbf3ecb69bea2186c26b58909351fc9ac90b3ecfdfbc7c66431e0303dca179c138ac17ad9bef1177331a704\n\n# Length is wrong.\nVerifyMessage = Ed25519-SPKI\nInput = \"\"\nOutput = e5564300c360ac729086e2cc806e828a84877f1eb8e5d974d873e065224901555fb8821590a33bacc61e39701cf9b46bd25bf5f0595bbe24655141438e7a10\nError = INVALID_SIGNATURE\n\n# Message is wrong.\nVerifyMessage = Ed25519-SPKI\nInput = \"Hello world\"\nOutput = e5564300c360ac729086e2cc806e828a84877f1eb8e5d974d873e065224901555fb8821590a33bacc61e39701cf9b46bd25bf5f0595bbe24655141438e7a100b\nError = INVALID_SIGNATURE\n\n# Ed25519 does not support configuring a digest.\nSignMessage = Ed25519\nInput = \"\"\nDigest = SHA256\nError = COMMAND_NOT_SUPPORTED\n\n# Ed25519 does not support signing a pre-hashed value.\nSign = Ed25519\nInput = \"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\"\nError = OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE\n\nVerify = Ed25519\nInput = \"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\"\nOutput = e5564300c360ac729086e2cc806e828a84877f1eb8e5d974d873e065224901555fb8821590a33bacc61e39701cf9b46bd25bf5f0595bbe24655141438e7a100b\nError = OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE\n\n\n# Derive tests.\n\nPrivateKey = ECDH-P256-Private\nType = EC\nInput = 3041020100301306072a8648ce3d020106082a864",
-    "8ce3d0301070427302502010104207d7dc5f71eb29ddaf80d6214632eeae03d9058af1fb6d22ed80badb62bc1a534\n\nPublicKey = ECDH-P256-Peer\nType = EC\nInput = 3059301306072a8648ce3d020106082a8648ce3d03010703420004700c48f77f56584c5cc632ca65640db91b6bacce3a4df6b42ce7cc838833d287db71e509e3fd9b060ddb20ba5c51dcc5948d46fbf640dfe0441782cab85fa4ac\n\nDerive = ECDH-P256-Private\nDerivePeer = ECDH-P256-Peer\nOutput = 46fc62106420ff012e54a434fbdd2d25ccc5852060561e68040dd7778997bd7b\nSmallBufferTruncates\n\nPrivateKey = X25519-Private\nType = X25519\nInput = 302e020100300506032b656e04220420a546e36bf0527c9d3b16154b82465edd62144c0ac1fc5a18506a2244ba449ac4\nExpectRawPrivate = a546e36bf0527c9d3b16154b82465edd62144c0ac1fc5a18506a2244ba449ac4\n\nPublicKey = X25519-Peer\nType = X25519\nInput = 302a300506032b656e032100e6db6867583030db3594c1a424b15f7c726624ec26b3353b10a903a6d0ab1c4c\nExpectRawPublic = e6db6867583030db3594c1a424b15f7c726624ec26b3353b10a903a6d0ab1c4c\n\nPublicKey = X25519-SmallOrderPeer\nType = X25519\nExpectRawPublic = e0eb7a7c3b41b8ae1656e3faf19fc46ada098deb9c32b1fd866205165f49b800\nInput = 302a300506032b656e032100e0eb7a7c3b41b8ae1656e3faf19fc46ada098deb9c32b1fd866205165f49b800\n\nDerive = X25519-Private\nDerivePeer = X25519-Peer\nOutput = c3da55379de9c6908e94ea4df28d084f32eccf03491c71f754b4075577a28552\n\nDerive = X25519-Private\nDerivePeer = X25519-SmallOrderPeer\nError = INVALID_PEER_KEY\n",
+    "# Public key algorithm tests\n\n# Keys used for PKEY operations.\n\n# RSA 2048 bit key.\nPrivateKey = RSA-2048\nType = RSA\nInput = 308204bc020100300d06092a864886f70d0101010500048204a6308204a20201000282010100cd0081ea7b2ae1ea06d59f7c73d9ffb94a09615c2e4ba7c636cef08dd3533ec3185525b015c769b99a77d6725bf9c3532a9b6e5f6627d5fb85160768d3dda9cbd35974511717dc3d309d2fc47ee41f97e32adb7f9dd864a1c4767a666ecd71bc1aacf5e7517f4b38594fea9b05e42d5ada9912008013e45316a4d9bb8ed086b88d28758bacaf922d46a868b485d239c9baeb0e2b64592710f42b2d1ea0a4b4802c0becab328f8a68b0073bdb546feea9809d2849912b390c1532bc7e29c7658f8175fae46f34332ff87bcab3e40649b98577869da0ea718353f0722754886913648760d122be676e0fc483dd20ffc31bda96a31966c9aa2e75ad03de47e1c44f02030100010282010060297ac7991b167a06d6b24758b8cbe208beb9b2d9ec9738bd80f90a2e35005dd7ce292d9e29ba885bd316fef1f20913bc0ac90d6b0808b2414d82104441d8624a33ce0233c8f780a48b375aff02d76712228a702484db3f9ebecccfbbee1709dba182800d949e9e4216e0bff3558388f8bd90da373a1d82743ec3fbdd1427fd16825a657a316912e8695365117ca2f845c909405fcac55f895fc15d20386c26ee78c9e99075029a178a6c1e4cf0c200e8a9cfb27e9d156f86e6c2adc22b1a84a1cd5ca5b2790875d79407c84b352395cb81cc3fed5bb043b69ede0c07204550025cee8c5f440170b6120bb48e0f747bcd8f522110850df043c428dfd187053102818100f6f961b47cbc035d3aedebc7de850a956b65ecdb9cf60764063f15aa48553c58d972fe6675056e35ddfdc37bf3b9f2f622ee271337256849c9bef2176fe8f7c3f8bb91ba374dd53baf3dec814d2bdec10c1fdc88cdd16876f26b1edfa3f094197edf4d42ff1fb2971103b898ca859c427287086a842ab410bb69cf2d35af6be302818100d47e724a7ff41048b270c2524a4101878b73159bb73d3dbc187b220e635b3534f96e243a184d93f860b6bfbb6b71c1ed9a1e1f458583023c301e96a692c1a08b53d0ec9ca910100d80451e3b7dc6a01bac4aecef8df798846bc235a08cbba2cf4c06804cc11219e95608c714e3f1430d491fadbba32a5751a04f97745834c9a502818021f2452bb9b95dfd028c914bf799f1ca77e89a95d50d3c16d384f8455f8bd7af9eb3dfa3d591d9842def235f7630a8e48c088ff6642e101794535a933e1e976fa8509fc728b2da0c4a1a08d7fcf37abaae1ff3001aca1dc1bbb05d9dffbaa1a09f7fb1eef38237d9ebccc722b9338436dde7119112798c26809c1a8dec4320610281801f7510aa62c2d8de4a3c53282781f41e02d0e8b402ae78432e449c48110161a11403f02d01880a8dcc938152d79721a4711a607ac4471ebf964810f95be47a45e60499e29f4c9773c83773404f606637728c2d0351bb03c326c8bb73a721e7fa5440ea2172bba1465fcc30dcb0d9f89930e815aa1f7f9729a857e00e0338dd590281804d1f0d756fe77e01099a652f50a88b7b685dc5bf00981d5d2376fd0c6fe29cd5b638734479305a73ad3c1599d39eae3bae035fbd6fed07c28de705933879a06e48e6a603686ed8e2560a5f6af1f2c24faf4aa960e382186f15eedce9a2491ae730680dd4cf778b70faa86826ab3223477cc91377b19a6d5a2eaea219760beed5\n\n# The public half of the same key encoded as a SubjectPublicKeyInfo.\nPublicKey = RSA-2048-SPKI\nType = RSA\nInput = 30820122300d06092a864886f70d01010105000382010f003082010a0282010100cd0081ea7b2ae1ea06d59f7c73d9ffb94a09615c2e4ba7c636cef08dd3533ec3185525b015c769b99a77d6725bf9c3532a9b6e5f6627d5fb85160768d3dda9cbd35974511717dc3d309d2fc47ee41f97e32adb7f9dd864a1c4767a666ecd71bc1aacf5e7517f4b38594fea9b05e42d5ada9912008013e45316a4d9bb8ed086b88d28758bacaf922d46a868b485d239c9baeb0e2b64592710f42b2d1ea0a4b4802c0becab328f8a68b0073bdb546feea9809d2849912b390c1532bc7e29c7658f8175fae46f34332ff87bcab3e40649b98577869da0ea718353f0722754886913648760d122be676e0fc483dd20ffc31bda96a31966c9aa2e75ad03de47e1c44f0203010001\n\n# The same key but with a negative RSA modulus.\nPublicKey = RSA-2048-SPKI-Negative\nInput = 30820121300d06092a864886f70d01010105000382010e003082010902820100cd0081ea7b2ae1ea06d59f7c73d9ffb94a09615c2e4ba7c636cef08dd3533ec3185525b015c769b99a77d6725bf9c3532a9b6e5f6627d5fb85160768d3dda9cbd35974511717dc3d309d2fc47ee41f97e32adb7f9dd864a1c4767a666ecd71bc1aacf5e7517f4b38594fea9b05e42d5ada9912008013e45316a4d9bb8ed086b88d28758bacaf922d46a868b485d239c9baeb0e2b64592710f42b2d1ea0a4b4802c0becab328f8a68b0073bdb546feea9809d2849912b390c1532bc7e29c7658f8175fae46f34332ff87bcab3e40649b98577869da0ea718353f0722754886913648760d122be676e0fc483dd20ffc31bda96a31966c9aa2e75ad03de47e1c44f0203010001\nError = NEGATIVE_NUMBER\n\n# The same key but with missing parameters rather than a NULL.\nPublicKey = RSA-2048-SPKI-Invalid\nInput = 30820120300b06092a864886f70d0101010382010f003082010a0282010100cd0081ea7b2ae1ea06d59f7c73d9ffb94a09615c2e4ba7c636cef08dd3533ec3185525b015c769b99a77d6725bf9c3532a9b6e5f6627d5fb85160768d3dda9cbd35974511717dc3d309d2fc47ee41f97e32adb7f9dd864a1c4767a666ecd71bc1aacf5e7517f4b38594fea9b05e42d5ada9912008013e45316a4d9bb8ed086b88d28758bacaf922d46a868b485d239c9baeb0e2b64592710f42b2d1ea0a4b4802c0becab328f8a68b0073bdb546feea9809d2849912b390c1532bc7e29c7658f8175fae46f34332ff87bcab3e40649b98577869da0ea718353f0722754886913648760d122be676e0fc483dd20ffc31bda96a31966c9aa2e75ad03de47e1c44f0203010001\nError = DECODE_ERROR\n\n# The same key but with an incorrectly-encoded length prefix.\nPublicKey = RSA-2048-SPKI-Invalid2\nInput = 3083000122300d06092a864886f70d01010105000382010f003082010a0282010100cd0081ea7b2ae1ea06d59f7c73d9ffb94a09615c2e4ba7c636cef08dd3533ec3185525b015c769b99a77d6725bf9c3532a9b6e5f6627d5fb85160768d3dda9cbd35974511717dc3d309d2fc47ee41f97e32adb7f9dd864a1c4767a666ecd71bc1aacf5e7517f4b38594fea9b05e42d5ada9912008013e45316a4d9bb8ed086b88d28758bacaf922d46a868b485d239c9baeb0e2b64592710f42b2d1ea0a4b4802c0becab328f8a68b0073bdb546feea9809d2849912b390c1532bc7e29c7658f8175fae46f34332ff87bcab3e40649b98577869da0ea718353f0722754886913648760d122be676e0fc483dd20ffc31bda96a31966c9aa2e75ad03de47e1c44f0203010001\nError = DECODE_ERROR\n\n# RSA 512 bit key.\nPrivateKey = RSA-512\nType = RSA\nInput = 30820154020100300d06092a864886f70d01010105000482013e3082013a020100024100dd20403d976a38c9d79152d87b5c8e9f05033eadd7b7de709bf5b0c4a5182a97d18483526b02362b992e154a9f37faa396ca2685cdab8fec09877ebe705f4dd70203010001024055bebcca655d7e39de8a6eaa9d636db682161907064039544755c53eeb99ec618c03a210dbc61471eaba10c5c365c9726d6b7a96f54d455f7d168d49367270e1022100f21a05d9fd6817301ce49ce10448f9bdd44f5ef5b7557cd7d83155db46382ae7022100e9d1f7157783db2feab1936954ddc4e83aa365695868144cda1be6813b61d791022100d6001eb0040920860ce41fafdf23ca6dfbdf74e6e9f98cf3164cf5c16f9e727d02206f6f73f4b52b10517be6f9bc5f87fa0a3bb817e2e711636b651f9af1c85d4f21022063eff2e57f5b4ca20342cfe793e25526624e3692f192461f9e1ce7f13f2d72c8\n\n# RSA 515 bit key.\nPrivateKey = RSA-515\nType = RSA\nInput = 30820157020100300d06092a864886f70d0101010500048201413082013d0201000241054fa166e205e658bbe8a2dc35311c0c2b75b7e4569fd9642c8bae809279271fc824f26baa1166ea46298ca63379ea76adbada2b61e5066820a35beaec1aca227f020301000102410266c972be0d30e53ac2acb1aa13b4bd0401cccf212452a66b4615f7e943831f67b4ca48560582d0ca886044aaaaf87945252a848c1947944186e6eb83969bf91102210309e631761842cc8a2ccfd372c20a9cba21de1a199c30ab440bc6b51079f4e825022101bf715c1db432627ca7c29a293b9210f2eff1e92d12f306ebaa5334f8ee03dcd30221018ac58a765f2b8f37d434081fe5ff92b81735ead2f263f4968ccf63d61fbe3d0d0221015b247a1159a2d5a25d0db049593c6405f77f3a278c521d066e290c2a2d8fb59d0221026224aa31fd95c14d24fd03b8a195bba4cc88df7c37f5370a5ab19f882f1404d6\n\n# EC P-256 key\nPrivateKey = P-256\nType = EC\nInput = 308187020100301306072a8648ce3d020106082a8648ce3d030107046d306b02010104208a872fb62893c4d1ffc5b9f0f91758069f8352e08fa05a49f8db926cb5728725a144034200042c150f429ce70f216c252cf5e062ce1f639cd5d165c7f89424072c27197d78b33b920e95cdb664e990dcf0cfea0d94e2a8e6af9d0e58056e653104925b9fe6c9\n\n# The same key as above with the optional public key omitted.\nPrivateKey = P-256-MissingPublic\nType = EC\nInput = 3041020100301306072a8648ce3d020106082a8648ce3d0301070427302502010104208a872fb62893c4d1ffc5b9f0f91758069f8352e08fa05a49f8db926cb5728725\n\n# The same key as above with redundant parameters.\nPrivateKey = P-256-ExtraParameters\nType = EC\nInput = 308193020100301306072a8648ce3d020106082a8648ce3d0301070479307702010104208a872fb62893c4d1ffc5b9f0f91758069f8352e08fa05a49f8db926cb5728725a00a06082a8648ce3d030107a144034200042c150f429ce70f216c252cf5e062ce1f639cd5d165c7f89424072c27197d78b33b920e95cdb664e990dcf0cfea0d94e2a8e6af9d0e58056e653104925b9fe6c9\n# The key re-encodes with the parameters removed.\nOutput = 308187020100301306072a8648ce3d020106082a8648ce3d030107046d306b02010104208a872fb62893c4d1ffc5b9f0f91758069f8352e08fa05a49f8db926cb5728725a144034200042c150f429ce70f216c252cf5e062ce1f639cd5d165c7f89424072c27197d78b33b920e95cdb664e990dcf0cfea0d94e2a8e6a",
+    "f9d0e58056e653104925b9fe6c9\n\n# The same key, but with the redundant parameters in the ECPrivateKey mismatched.\nPrivateKey = P-256-BadInnerParameters\nInput = 308190020100301306072a8648ce3d020106082a8648ce3d0301070476307402010104208a872fb62893c4d1ffc5b9f0f91758069f8352e08fa05a49f8db926cb5728725a00706052b81040022a144034200042c150f429ce70f216c252cf5e062ce1f639cd5d165c7f89424072c27197d78b33b920e95cdb664e990dcf0cfea0d94e2a8e6af9d0e58056e653104925b9fe6c9\nError = GROUP_MISMATCH\n\n# The public half of the same key encoded as a PublicKey.\nPublicKey = P-256-SPKI\nType = EC\nInput = 3059301306072a8648ce3d020106082a8648ce3d030107034200042c150f429ce70f216c252cf5e062ce1f639cd5d165c7f89424072c27197d78b33b920e95cdb664e990dcf0cfea0d94e2a8e6af9d0e58056e653104925b9fe6c9\n\n# The same as above, but with the curve explicitly spelled out.\nPublicKey = P-256-SPKI\nInput = 3082014b3082010306072a8648ce3d02013081f7020101302c06072a8648ce3d0101022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff305b0420ffffffff00000001000000000000000000000000fffffffffffffffffffffffc04205ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b031500c49d360886e704936a6678e1139d26b7819f7e900441046b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551020101034200042c150f429ce70f216c252cf5e062ce1f639cd5d165c7f89424072c27197d78b33b920e95cdb664e990dcf0cfea0d94e2a8e6af9d0e58056e653104925b9fe6c9\nError = DECODE_ERROR\n\n# The same as above, but with trailing data after the curve name.\nPublicKey = P-256-SPKI\nInput = 305b301506072a8648ce3d020106082a8648ce3d0301070500034200042c150f429ce70f216c252cf5e062ce1f639cd5d165c7f89424072c27197d78b33b920e95cdb664e990dcf0cfea0d94e2a8e6af9d0e58056e653104925b9fe6c9\nError = DECODE_ERROR\n\n# A DSA private key.\nPrivateKey = DSA-1024\nType = DSA\nInput = 308202650201003082023906072a8648ce3804013082022c02820101009e12fab3de12213501dd82aa10ca2d101d2d4ebfef4d2a3f8daa0fe0cedad8d6af85616aa2f3252c0a2b5a6db09e6f14900e0ddb8311876dd8f9669525f99ed65949e184d5064793271169a228680b95ec12f59a8e20b21f2b58eb2a2012d35bde2ee351822fe8f32d0a330565dcce5c672b7259c14b2433d0b5b2ca2b2db0ab626e8f13f47fe0345d904e7294bb038e9ce21a9e580b83356278706cfe768436c69de149ccff98b4aab8cb4f6385c9f102ce59346eaeef27e0ad222d53d6e89cc8cde5776dd00057b03f2d88ab3cedbafd7b585f0b7f7835e17a3728bbf25ea62572f245dc111f3ce39cb6ffacc31b0a2790e7bde90224ea9b09315362af3d2b022100f381dcf53ebf724f8b2e5ca82c010fb4b5eda9358d0fd88ed278589488b54fc3028201000c402a725dcc3a62e02bf4cf43cd17f4a493591220223669cf4193edab423ad08dfb552e308a6a57a5ffbc7cd0fb2087f81f8df0cb08ab2133287d2b6968714a94f633c940845a48a3e16708dde761cc6a8eab2d84db21b6ea5b07681493cc9c31fbc368b243f6ddf8c932a8b4038f44e7b15ca876344a147859f2b43b39458668ad5e0a1a9a669546dd2812e3b3617a0aef99d58e3bb4cc87fd94225e01d2dcc469a77268146c51918f18e8b4d70aa1f0c7623bcc52cf3731d38641b2d2830b7eecb2f09552ff137d046e494e7f33c3590002b16d1b97d936fda28f90c3ed3ca35338168ac16f77c3c57adc2e8f7c6c2256e41a5f65450590dbb5bcf06d66610423022100b0c768702743bc51242993a971a52889795444f7c6452203d0ce84fe6117d46e\n\n# A DSA public key.\nPublicKey = DSA-1024-SPKI\nType = DSA\nInput = 308201b73082012c06072a8648ce3804013082011f02818100b3429b8b128c9079f9b72e86857e98d265e5d91661ed8b5f4cc56e5eed1e571da30186983a9dd76297eab73ee13a1db841f8800d04a7cab478af6cde2ea4a2868531af169a24858c6268efa39ceb7ed0d4227eb5bbb01124a2a5a26038c7bcfb8cc827f68f5202345166e4718596799b65c9def82828ce44e62e38e41a0d24b1021500c5a56c81ddd87f47e676546c56d05706421624cf0281810094de40d27314fe929e47ff9b1ac65cfc73ef38c4d381c890be6217b15039ae18190e6b421af8c0bda35a5cfd050f58ae2644adce83e68c8e5ba11729df56bbb21e227a60b816cc033fa799a38fe1ba5b4aa1801b6f841ce3df99feb3b4fb96950c960af13fa2ce920aabc12dd24ad2044a35063ea0e25f67f560f4cfbdc5598303818400028180258c30ebbb7f34fdc873ce679f6cea373c7886d75d4421b90920db034daedd292c64d8edd8cdbdd7f3ad23d74cfa2135247d0cef6ecf2e14f99e19d22a8c1266bd8fb8719c0e5667c716c45c7adbdabe548085bdad2dfee636f8d52fd6adb2193df6c4f0520fbd171b91882e0e4f321f8250ffecf4dbea00e114427d3ef96c1a\n\n# The same key as above, but without the parameters.\nPublicKey = DSA-1024-SPKI-No-Params\nType = DSA\nInput = 308192300906072a8648ce38040103818400028180258c30ebbb7f34fdc873ce679f6cea373c7886d75d4421b90920db034daedd292c64d8edd8cdbdd7f3ad23d74cfa2135247d0cef6ecf2e14f99e19d22a8c1266bd8fb8719c0e5667c716c45c7adbdabe548085bdad2dfee636f8d52fd6adb2193df6c4f0520fbd171b91882e0e4f321f8250ffecf4dbea00e114427d3ef96c1a\n\n# Private keys from RFC 8032.\nPrivateKey = Ed25519\nType = Ed25519\nInput = 302e020100300506032b6570042204209d61b19deffd5a60ba844af492ec2cc44449c5697b326919703bac031cae7f60\n\nPrivateKey = Ed25519-2\nType = Ed25519\nInput = 302e020100300506032b6570042204204ccd089b28ff96da9db6c346ec114e0f5b8a319f35aba624da8cf6ed4fb8a6fb\n\nPrivateKey = Ed25519-3\nType = Ed25519\nInput = 302e020100300506032b657004220420c5aa8df43f9f837bedb7442f31dcb7b166d38535076f094b85ce3a2e0b4458f7\n\nPrivateKey = Ed25519-4\nType = Ed25519\nInput = 302e020100300506032b657004220420f5e5767cf153319517630f226876b86c8160cc583bc013744c6bf255f5cc0ee5\n\nPrivateKey = Ed25519-5\nType = Ed25519\nInput = 302e020100300506032b657004220420833fe62409237b9d62ec77587520911e9a759cec1d19755b7da901b96dca3d42\n\n# Public keys from RFC 8032.\nPublicKey = Ed25519-SPKI\nType = Ed25519\nInput = 302a300506032b6570032100d75a980182b10ab7d54bfed3c964073a0ee172f3daa62325af021a68f707511a\n\nPublicKey = Ed25519-SPKI-2\nType = Ed25519\nInput = 302a300506032b65700321003d4017c3e843895a92b70aa74d1b7ebc9c982ccf2ec4968cc0cd55f12af4660c\n\nPublicKey = Ed25519-SPKI-3\nType = Ed25519\nInput = 302a300506032b6570032100fc51cd8e6218a1a38da47ed00230f0580816ed13ba3303ac5deb911548908025\n\nPublicKey = Ed25519-SPKI-4\nType = Ed25519\nInput = 302a300506032b6570032100278117fc144c72340f67d0f2316e8386ceffbf2b2428c9c51fef7c597f1d426e\n\nPublicKey = Ed25519-SPKI-5\nType = Ed25519\nInput = 302a300506032b6570032100ec172b93ad5e563bf4932c70e1245034c35467ef2efd4d64ebf819683467e2bf\n\n# The first key, private and public, with invalid NULL parameters.\nPrivateKey = Ed25519-NULL\nInput = 3030020100300706032b65700500042204209d61b19deffd5a60ba844af492ec2cc44449c5697b326919703bac031cae7f60\nError = DECODE_ERROR\n\nPublicKey = Ed25519-SPKI-NULL\nInput = 302c300706032b65700500032100d75a980182b10ab7d54bfed3c964073a0ee172f3daa62325af021a68f707511a\nError = DECODE_ERROR\n\n# Sample public key from RFC 8410.\nPublicKey = Ed25519-SPKI-Spec\nType = Ed25519\nInput = 302a300506032b657003210019bf44096984cdfe8541bac167dc3b96c85086aa30b6b6cb0c5c38ad703166e1\n\n# Sample private key from RFC 8410.\nPrivateKey = Ed25519-Spec\nType = Ed25519\nInput = 302e020100300506032b657004220420d4ee72dbf913584ad5b6d8f1f769f8ad3afe7c28cbf1d4fbe097a88f44755842\n\n\n# RSA tests\n\nSign = RSA-2048\nDigest = SHA1\nInput = \"0123456789ABCDEF1234\"\nOutput = c09d402423cbf233d26cae21f954547bc43fe80fd41360a0336cfdbe9aedad05bef6fd2eaee6cd60089a52482d4809a238149520df3bdde4cb9e23d9307b05c0a6f327052325a29adf2cc95b66523be7024e2a585c3d4db15dfbe146efe0ecdc0402e33fe5d40324ee96c5c3edd374a15cdc0f5d84aa243c0f07e188c6518fbfceae158a9943be398e31097da81b62074f626eff738be6160741d5a26957a482b3251fd85d8df78b98148459de10aa93305dbb4a5230aa1da291a9b0e481918f99b7638d72bb687f97661d304ae145d64a474437a4ef39d7b8059332ddeb07e92bf6e0e3acaf8afedc93795e4511737ec1e7aab6d5bc9466afc950c1c17b48ad\n\nVerify = RSA-2048\nDigest = SHA1\nInput = \"0123456789ABCDEF1234\"\nOutput = c09d402423cbf233d26cae21f954547bc43fe80fd41360a0336cfdbe9aedad05bef6fd2eaee6cd60089a52482d4809a238149520df3bdde4cb9e23d9307b05c0a6f327052325a29adf2cc95b66523be7024e2a585c3d4db15dfbe146efe0ecdc0402e33fe5d40324ee96c5c3edd374a15cdc0f5d84aa243c0f07e188c6518fbfceae158a9943be398e31097da81b62074f626eff738be6160741d5a26957a482b3251fd85d8df78b98148459de10aa93305dbb4a5230aa1da291a9b0e481918f99b7638d72bb687f97661d304ae145d64a474437a4ef39d7b8059332ddeb07e92bf6e0e3acaf8afedc93795e4511737ec1e7aab6d5bc9466afc950c1c17b48ad\n\nVerify = RSA-2048-SPKI\nDigest = SHA1\nInput = \"0123456789ABCDEF1234\"\nOutput = c09d402423cbf233d26cae21f954547bc43fe80fd41360a0336cfdbe9aedad05bef6fd2eaee6cd60089a52482d4809a238149520df3bdde4cb9e23d9307b05c0a6f327052325a29adf2cc95b66523be7024e2a585c3d4db15dfbe146efe0ecdc0402e33fe5d403",
+    "24ee96c5c3edd374a15cdc0f5d84aa243c0f07e188c6518fbfceae158a9943be398e31097da81b62074f626eff738be6160741d5a26957a482b3251fd85d8df78b98148459de10aa93305dbb4a5230aa1da291a9b0e481918f99b7638d72bb687f97661d304ae145d64a474437a4ef39d7b8059332ddeb07e92bf6e0e3acaf8afedc93795e4511737ec1e7aab6d5bc9466afc950c1c17b48ad\n\n# Digest too long\nSign = RSA-2048\nDigest = SHA1\nInput = \"0123456789ABCDEF12345\"\nError = INVALID_MESSAGE_LENGTH\n\nVerify = RSA-2048\nDigest = SHA1\nInput = \"0123456789ABCDEF12345\"\nOutput = c09d402423cbf233d26cae21f954547bc43fe80fd41360a0336cfdbe9aedad05bef6fd2eaee6cd60089a52482d4809a238149520df3bdde4cb9e23d9307b05c0a6f327052325a29adf2cc95b66523be7024e2a585c3d4db15dfbe146efe0ecdc0402e33fe5d40324ee96c5c3edd374a15cdc0f5d84aa243c0f07e188c6518fbfceae158a9943be398e31097da81b62074f626eff738be6160741d5a26957a482b3251fd85d8df78b98148459de10aa93305dbb4a5230aa1da291a9b0e481918f99b7638d72bb687f97661d304ae145d64a474437a4ef39d7b8059332ddeb07e92bf6e0e3acaf8afedc93795e4511737ec1e7aab6d5bc9466afc950c1c17b48ad\nError = INVALID_MESSAGE_LENGTH\n\n# Digest too short\nSign = RSA-2048\nDigest = SHA1\nInput = \"0123456789ABCDEF123\"\nError = INVALID_MESSAGE_LENGTH\n\nVerify = RSA-2048\nDigest = SHA1\nInput = \"0123456789ABCDEF123\"\nOutput = c09d402423cbf233d26cae21f954547bc43fe80fd41360a0336cfdbe9aedad05bef6fd2eaee6cd60089a52482d4809a238149520df3bdde4cb9e23d9307b05c0a6f327052325a29adf2cc95b66523be7024e2a585c3d4db15dfbe146efe0ecdc0402e33fe5d40324ee96c5c3edd374a15cdc0f5d84aa243c0f07e188c6518fbfceae158a9943be398e31097da81b62074f626eff738be6160741d5a26957a482b3251fd85d8df78b98148459de10aa93305dbb4a5230aa1da291a9b0e481918f99b7638d72bb687f97661d304ae145d64a474437a4ef39d7b8059332ddeb07e92bf6e0e3acaf8afedc93795e4511737ec1e7aab6d5bc9466afc950c1c17b48ad\nError = INVALID_MESSAGE_LENGTH\n\n# Digest too large for key.\nSign = RSA-512\nDigest = SHA512\nInput = \"0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF\"\nError = DIGEST_TOO_BIG_FOR_RSA_KEY\n\n# Mismatched digest\nVerify = RSA-2048\nDigest = SHA1\nInput = \"0123456789ABCDEF1233\"\nOutput = c09d402423cbf233d26cae21f954547bc43fe80fd41360a0336cfdbe9aedad05bef6fd2eaee6cd60089a52482d4809a238149520df3bdde4cb9e23d9307b05c0a6f327052325a29adf2cc95b66523be7024e2a585c3d4db15dfbe146efe0ecdc0402e33fe5d40324ee96c5c3edd374a15cdc0f5d84aa243c0f07e188c6518fbfceae158a9943be398e31097da81b62074f626eff738be6160741d5a26957a482b3251fd85d8df78b98148459de10aa93305dbb4a5230aa1da291a9b0e481918f99b7638d72bb687f97661d304ae145d64a474437a4ef39d7b8059332ddeb07e92bf6e0e3acaf8afedc93795e4511737ec1e7aab6d5bc9466afc950c1c17b48ad\nError = BAD_SIGNATURE\n\n# Corrupted signature\nVerify = RSA-2048\nDigest = SHA1\nInput = \"0123456789ABCDEF1233\"\nOutput = c09d402423cbf233d26cae21f954547bc43fe80fd41360a0336cfdbe9aedad05bef6fd2eaee6cd60089a52482d4809a238149520df3bdde4cb9e23d9307b05c0a6f327052325a29adf2cc95b66523be7024e2a585c3d4db15dfbe146efe0ecdc0402e33fe5d40324ee96c5c3edd374a15cdc0f5d84aa243c0f07e188c6518fbfceae158a9943be398e31097da81b62074f626eff738be6160741d5a26957a482b3251fd85d8df78b98148459de10aa93305dbb4a5230aa1da291a9b0e481918f99b7638d72bb687f97661d304ae145d64a474437a4ef39d7b8059332ddeb07e92bf6e0e3acaf8afedc93795e4511737ec1e7aab6d5bc9466afc950c1c17b48ae\nError = BLOCK_TYPE_IS_NOT_01\n\n# parameter missing (NOTE: this differs from upstream)\nVerify = RSA-2048\nDigest = SHA1\nInput = \"0123456789ABCDEF1234\"\nOutput = 3ec3fc29eb6e122bd7aa361cd09fe1bcbe85311096a7b9e4799cedfb2351ce0ab7fe4e75b4f6b37f67edd9c60c800f9ab941c0c157d7d880ca9de40c951d60fd293ae220d4bc510b1572d6e85a1bbbd8605b52e05f1c64fafdae59a1c2fbed214b7844d0134619de62851d5a0522e32e556e5950f3f97b8150e3f0dffee612c924201c27cd9bc8b423a71533380c276d3d59fcba35a2e80a1a192ec266a6c2255012cd86a349fe90a542b355fa3355b04da6cdf1df77f0e7bd44a90e880e1760266d233e465226f5db1c68857847d82072861ee266ddfc2e596845b77e1803274a579835ab5e4975d81d20b7df9cec7795489e4a2bdb8c1cf6a6b359945ac92c\nError = BAD_SIGNATURE\n\n# embedded digest too long\nVerify = RSA-2048\nDigest = SHA1\nInput = \"0123456789ABCDEF1234\"\nOutput = afec9a0d5330a08f54283bb4a9d4e7e7e70fc1342336c4c766fba713f66970151c6e27413c48c33864ea45a0238787004f338ed3e21b53b0fe9c1151c42c388cbc7cba5a06b706c407a5b48324fbe994dc7afc3a19fb3d2841e66222596c14cd72a0f0a7455a019d8eb554f59c0183f9552b75aa96fee8bf935945e079ca283d2bd3534a86f11351f6d6181fbf433e5b01a6d1422145c7a72214d3aacdd5d3af12b2d6bf6438f9f9a64010d8aeed801c87f0859412b236150b86a545f7239be022f4a7ad246b59df87514294cb4a4c7c5a997ee53c66054d9f38ca4e76c1f7af83c30f737ef70f83a45aebe18238ddb95e1998814ca4fc72388f1533147c169d\nError = BAD_SIGNATURE\n\n# embedded digest too short\nVerify = RSA-2048\nDigest = SHA1\nInput = \"0123456789ABCDEF1234\"\nOutput = afec9a0d5330a08f54283bb4a9d4e7e7e70fc1342336c4c766fba713f66970151c6e27413c48c33864ea45a0238787004f338ed3e21b53b0fe9c1151c42c388cbc7cba5a06b706c407a5b48324fbe994dc7afc3a19fb3d2841e66222596c14cd72a0f0a7455a019d8eb554f59c0183f9552b75aa96fee8bf935945e079ca283d2bd3534a86f11351f6d6181fbf433e5b01a6d1422145c7a72214d3aacdd5d3af12b2d6bf6438f9f9a64010d8aeed801c87f0859412b236150b86a545f7239be022f4a7ad246b59df87514294cb4a4c7c5a997ee53c66054d9f38ca4e76c1f7af83c30f737ef70f83a45aebe18238ddb95e1998814ca4fc72388f1533147c169d\nError = BAD_SIGNATURE\n\n# Garbage after DigestInfo\nVerify = RSA-2048\nDigest = SHA1\nInput = \"0123456789ABCDEF1234\"\nOutput = 9ee34872d4271a7d8808af0a4052a145a6d6a8437d00da3ed14428c7f087cd39f4d43334c41af63e7fa1ba363fee7bcef401d9d36a662abbab55ce89a696e1be0dfa19a5d09ca617dd488787b6048baaefeb29bc8688b2fe3882de2b77c905b5a8b56cf9616041e5ec934ba6de863efe93acc4eef783fe7f72a00fa65d6093ed32bf98ce527e62ccb1d56317f4be18b7e0f55d7c36617d2d0678a306e3350956b662ac15df45215dd8f6b314babb9788e6c272fa461e4c9b512a11a4b92bc77c3a4c95c903fccb238794eca5c750477bf56ea6ee6a167367d881b485ae3889e7c489af8fdf38e0c0f2aed780831182e34abedd43c39281b290774bf35cc25274\nError = BAD_SIGNATURE\n\n# invalid tag for parameter\nVerify = RSA-2048\nDigest = SHA1\nInput = \"0123456789ABCDEF1234\"\nOutput = 49525db4d44c755e560cba980b1d85ea604b0e077fcadd4ba44072a3487bbddb835016200a7d8739cce2dc3223d9c20cbdd25059ab02277f1f21318efd18e21038ec89aa9d40680987129e8b41ba33bceb86518bdf47268b921cce2037acabca6575d832499538d6f40cdba0d40bd7f4d8ea6ca6e2eec87f294efc971407857f5d7db09f6a7b31e301f571c6d82a5e3d08d2bb3a36e673d28b910f5bec57f0fcc4d968fd7c94d0b9226dec17f5192ad8b42bcab6f26e1bea1fdc3b958199acb00f14ebcb2a352f3afcedd4c09000128a603bbeb9696dea13040445253972d46237a25c7845e3b464e6984c2348ea1f1210a9ff0b00d2d72b50db00c009bb39f9\nError = BAD_SIGNATURE\n\n\n# RSA-PSS tests.\n\n# Zero salt length makes the output deterministic\nSign = RSA-2048\nRSAPadding = PSS\nPSSSaltLength = 0\nDigest = SHA256\nInput = \"0123456789ABCDEF0123456789ABCDEF\"\nOutput = 4de433d5844043ef08d354da03cb29068780d52706d7d1e4d50efb7d58c9d547d83a747ddd0635a96b28f854e50145518482cb49e963054621b53c60c498d07c16e9c2789c893cf38d4d86900de71bde463bd2761d1271e358c7480a1ac0bab930ddf39602ad1bc165b5d7436b516b7a7858e8eb7ab1c420eeb482f4d207f0e462b1724959320a084e13848d11d10fb593e66bf680bf6d3f345fc3e9c3de60abbac37e1c6ec80a268c8d9fc49626c679097aa690bc1aa662b95eb8db70390861aa0898229f9349b4b5fdd030d4928c47084708a933144be23bd3c6e661b85b2c0ef9ed36d498d5b7320e8194d363d4ad478c059bae804181965e0b81b663158a\n\n# Verify of above signature\nVerify = RSA-2048-SPKI\nRSAPadding = PSS\nPSSSaltLength = 0\nDigest = SHA256\nInput = \"0123456789ABCDEF0123456789ABCDEF\"\nOutput = 4de433d5844043ef08d354da03cb29068780d52706d7d1e4d50efb7d58c9d547d83a747ddd0635a96b28f854e50145518482cb49e963054621b53c60c498d07c16e9c2789c893cf38d4d86900de71bde463bd2761d1271e358c7480a1ac0bab930ddf39602ad1bc165b5d7436b516b7a7858e8eb7ab1c420eeb482f4d207f0e462b1724959320a084e13848d11d10fb593e66bf680bf6d3f345fc3e9c3de60abbac37e1c6ec80a268c8d9fc49626c679097aa690bc1aa662b95eb8db70390861aa0898229f9349b4b5fdd030d4928c47084708a933144be23bd3c6e661b85b2c0ef9ed36d498d5b7320e8194d363d4ad478c059bae804181965e0b81b663158a\n\n# A non-zero salt length must be checked by round-tripping.\nSign = RSA-2048\nRSAPadding = PSS\nPSSSaltLength = 32\nDigest = SHA256\nInput = \"0123456789ABCDEF0123456789ABCDEF\"\nCheckVerify\n\n# Check a salt length with a non-standard digest length, to verify things are\n# not just working due to defaults. (The current default is a maximum salt\n# length, but the ecosystem has converged on matching the digest length, so we\n#",
+    " may change this in the future.)\nSign = RSA-2048\nRSAPadding = PSS\nPSSSaltLength = 42\nDigest = SHA256\nInput = \"0123456789ABCDEF0123456789ABCDEF\"\nCheckVerify\n\n# Auto-detected salt length\nVerify = RSA-2048-SPKI\nRSAPadding = PSS\nPSSSaltLength = -2\nDigest = SHA256\nInput = \"0123456789ABCDEF0123456789ABCDEF\"\nOutput = 4de433d5844043ef08d354da03cb29068780d52706d7d1e4d50efb7d58c9d547d83a747ddd0635a96b28f854e50145518482cb49e963054621b53c60c498d07c16e9c2789c893cf38d4d86900de71bde463bd2761d1271e358c7480a1ac0bab930ddf39602ad1bc165b5d7436b516b7a7858e8eb7ab1c420eeb482f4d207f0e462b1724959320a084e13848d11d10fb593e66bf680bf6d3f345fc3e9c3de60abbac37e1c6ec80a268c8d9fc49626c679097aa690bc1aa662b95eb8db70390861aa0898229f9349b4b5fdd030d4928c47084708a933144be23bd3c6e661b85b2c0ef9ed36d498d5b7320e8194d363d4ad478c059bae804181965e0b81b663158a\n\n# Signing with salt length -1 means to match the digest length.\nSign = RSA-2048\nRSAPadding = PSS\nPSSSaltLength = -1\nVerifyPSSSaltLength = 32\nDigest = SHA256\nInput = \"0123456789ABCDEF0123456789ABCDEF\"\nCheckVerify\n\n# Signing with salt length -2 means to maximize the salt length.\nSign = RSA-2048\nRSAPadding = PSS\nPSSSaltLength = -2\nVerifyPSSSaltLength = 222  # 256 - 32 - 2\nDigest = SHA256\nInput = \"0123456789ABCDEF0123456789ABCDEF\"\nCheckVerify\n\n# Wrong digest\nVerify = RSA-2048-SPKI\nRSAPadding = PSS\nPSSSaltLength = 0\nDigest = SHA256\nInput = \"00000000000000000000000000000000\"\nOutput = 4de433d5844043ef08d354da03cb29068780d52706d7d1e4d50efb7d58c9d547d83a747ddd0635a96b28f854e50145518482cb49e963054621b53c60c498d07c16e9c2789c893cf38d4d86900de71bde463bd2761d1271e358c7480a1ac0bab930ddf39602ad1bc165b5d7436b516b7a7858e8eb7ab1c420eeb482f4d207f0e462b1724959320a084e13848d11d10fb593e66bf680bf6d3f345fc3e9c3de60abbac37e1c6ec80a268c8d9fc49626c679097aa690bc1aa662b95eb8db70390861aa0898229f9349b4b5fdd030d4928c47084708a933144be23bd3c6e661b85b2c0ef9ed36d498d5b7320e8194d363d4ad478c059bae804181965e0b81b663158a\nError = BAD_SIGNATURE\n\n# Digest too short\nVerify = RSA-2048-SPKI\nRSAPadding = PSS\nPSSSaltLength = 0\nDigest = SHA256\nInput = \"0123456789ABCDEF0123456789ABCDE\"\nOutput = 4de433d5844043ef08d354da03cb29068780d52706d7d1e4d50efb7d58c9d547d83a747ddd0635a96b28f854e50145518482cb49e963054621b53c60c498d07c16e9c2789c893cf38d4d86900de71bde463bd2761d1271e358c7480a1ac0bab930ddf39602ad1bc165b5d7436b516b7a7858e8eb7ab1c420eeb482f4d207f0e462b1724959320a084e13848d11d10fb593e66bf680bf6d3f345fc3e9c3de60abbac37e1c6ec80a268c8d9fc49626c679097aa690bc1aa662b95eb8db70390861aa0898229f9349b4b5fdd030d4928c47084708a933144be23bd3c6e661b85b2c0ef9ed36d498d5b7320e8194d363d4ad478c059bae804181965e0b81b663158a\nError = INVALID_MESSAGE_LENGTH\n\n# Digest too long\nVerify = RSA-2048-SPKI\nRSAPadding = PSS\nPSSSaltLength = 0\nDigest = SHA256\nInput = \"0123456789ABCDEF0123456789ABCDEF0\"\nOutput = 4de433d5844043ef08d354da03cb29068780d52706d7d1e4d50efb7d58c9d547d83a747ddd0635a96b28f854e50145518482cb49e963054621b53c60c498d07c16e9c2789c893cf38d4d86900de71bde463bd2761d1271e358c7480a1ac0bab930ddf39602ad1bc165b5d7436b516b7a7858e8eb7ab1c420eeb482f4d207f0e462b1724959320a084e13848d11d10fb593e66bf680bf6d3f345fc3e9c3de60abbac37e1c6ec80a268c8d9fc49626c679097aa690bc1aa662b95eb8db70390861aa0898229f9349b4b5fdd030d4928c47084708a933144be23bd3c6e661b85b2c0ef9ed36d498d5b7320e8194d363d4ad478c059bae804181965e0b81b663158a\nError = INVALID_MESSAGE_LENGTH\n\n# Wrong salt length\nVerify = RSA-2048\nRSAPadding = PSS\nPSSSaltLength = 2\nDigest = SHA256\nInput = \"0123456789ABCDEF0123456789ABCDEF\"\nOutput = 4de433d5844043ef08d354da03cb29068780d52706d7d1e4d50efb7d58c9d547d83a747ddd0635a96b28f854e50145518482cb49e963054621b53c60c498d07c16e9c2789c893cf38d4d86900de71bde463bd2761d1271e358c7480a1ac0bab930ddf39602ad1bc165b5d7436b516b7a7858e8eb7ab1c420eeb482f4d207f0e462b1724959320a084e13848d11d10fb593e66bf680bf6d3f345fc3e9c3de60abbac37e1c6ec80a268c8d9fc49626c679097aa690bc1aa662b95eb8db70390861aa0898229f9349b4b5fdd030d4928c47084708a933144be23bd3c6e661b85b2c0ef9ed36d498d5b7320e8194d363d4ad478c059bae804181965e0b81b663158a\nError = SLEN_CHECK_FAILED\n\n# Wrong salt length using implicit hash length\nVerify = RSA-2048\nRSAPadding = PSS\nPSSSaltLength = -1\nDigest = SHA256\nInput = \"0123456789ABCDEF0123456789ABCDEF\"\nOutput = 4de433d5844043ef08d354da03cb29068780d52706d7d1e4d50efb7d58c9d547d83a747ddd0635a96b28f854e50145518482cb49e963054621b53c60c498d07c16e9c2789c893cf38d4d86900de71bde463bd2761d1271e358c7480a1ac0bab930ddf39602ad1bc165b5d7436b516b7a7858e8eb7ab1c420eeb482f4d207f0e462b1724959320a084e13848d11d10fb593e66bf680bf6d3f345fc3e9c3de60abbac37e1c6ec80a268c8d9fc49626c679097aa690bc1aa662b95eb8db70390861aa0898229f9349b4b5fdd030d4928c47084708a933144be23bd3c6e661b85b2c0ef9ed36d498d5b7320e8194d363d4ad478c059bae804181965e0b81b663158a\nError = SLEN_CHECK_FAILED\n\n# Wrong MGF1 digest, SHA-1\nVerify = RSA-2048\nRSAPadding = PSS\nPSSSaltLength = 0\nDigest = SHA256\nMGF1Digest = SHA1\nInput = \"0123456789ABCDEF0123456789ABCDEF\"\nOutput = 4de433d5844043ef08d354da03cb29068780d52706d7d1e4d50efb7d58c9d547d83a747ddd0635a96b28f854e50145518482cb49e963054621b53c60c498d07c16e9c2789c893cf38d4d86900de71bde463bd2761d1271e358c7480a1ac0bab930ddf39602ad1bc165b5d7436b516b7a7858e8eb7ab1c420eeb482f4d207f0e462b1724959320a084e13848d11d10fb593e66bf680bf6d3f345fc3e9c3de60abbac37e1c6ec80a268c8d9fc49626c679097aa690bc1aa662b95eb8db70390861aa0898229f9349b4b5fdd030d4928c47084708a933144be23bd3c6e661b85b2c0ef9ed36d498d5b7320e8194d363d4ad478c059bae804181965e0b81b663158a\n# If SHA-1, this input happens to succeed recovering a salt length, but it does\n# not match.\nError = SLEN_CHECK_FAILED\n\n# Wrong MGF1 digest, SHA-384\nVerify = RSA-2048\nRSAPadding = PSS\nPSSSaltLength = 0\nDigest = SHA256\nMGF1Digest = SHA384\nInput = \"0123456789ABCDEF0123456789ABCDEF\"\nOutput = 4de433d5844043ef08d354da03cb29068780d52706d7d1e4d50efb7d58c9d547d83a747ddd0635a96b28f854e50145518482cb49e963054621b53c60c498d07c16e9c2789c893cf38d4d86900de71bde463bd2761d1271e358c7480a1ac0bab930ddf39602ad1bc165b5d7436b516b7a7858e8eb7ab1c420eeb482f4d207f0e462b1724959320a084e13848d11d10fb593e66bf680bf6d3f345fc3e9c3de60abbac37e1c6ec80a268c8d9fc49626c679097aa690bc1aa662b95eb8db70390861aa0898229f9349b4b5fdd030d4928c47084708a933144be23bd3c6e661b85b2c0ef9ed36d498d5b7320e8194d363d4ad478c059bae804181965e0b81b663158a\n# If SHA-384, this input happens fail to recover the salt length altogether.\nError = SLEN_RECOVERY_FAILED\n\n# The salt length is too large for the modulus (signing).\nSign = RSA-2048\nRSAPadding = PSS\nPSSSaltLength = 223\nDigest = SHA256\nInput = \"0123456789ABCDEF0123456789ABCDEF\"\nError = DATA_TOO_LARGE_FOR_KEY_SIZE\n\n# The salt length is too large for the modulus (verifying).\nVerify = RSA-2048\nRSAPadding = PSS\nPSSSaltLength = 223\nDigest = SHA256\nInput = \"0123456789ABCDEF0123456789ABCDEF\"\nOutput = 4de433d5844043ef08d354da03cb29068780d52706d7d1e4d50efb7d58c9d547d83a747ddd0635a96b28f854e50145518482cb49e963054621b53c60c498d07c16e9c2789c893cf38d4d86900de71bde463bd2761d1271e358c7480a1ac0bab930ddf39602ad1bc165b5d7436b516b7a7858e8eb7ab1c420eeb482f4d207f0e462b1724959320a084e13848d11d10fb593e66bf680bf6d3f345fc3e9c3de60abbac37e1c6ec80a268c8d9fc49626c679097aa690bc1aa662b95eb8db70390861aa0898229f9349b4b5fdd030d4928c47084708a933144be23bd3c6e661b85b2c0ef9ed36d498d5b7320e8194d363d4ad478c059bae804181965e0b81b663158a\nError = DATA_TOO_LARGE\n\n# The hash is too large for the modulus (signing).\nSign = RSA-512\nRSAPadding = PSS\nPSSSaltLength = 0\nDigest = SHA512\nInput = \"0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF\"\nError = DATA_TOO_LARGE_FOR_KEY_SIZE\n\nSign = RSA-512\nRSAPadding = PSS\nPSSSaltLength = -2\nDigest = SHA512\nInput = \"0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF\"\nError = DATA_TOO_LARGE_FOR_KEY_SIZE\n\n# The hash is too large for the modulus (verifying).\nVerify = RSA-512\nRSAPadding = PSS\nPSSSaltLength = 0\nDigest = SHA512\nInput = \"0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF\"\nOutput = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\nError = DATA_TOO_LARGE\n\nVerify = RSA-512\nRSAPadding = PSS\nPSSSaltLength = -2\nDigest = SHA512\nInput = \"0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF\"\nOutput = 457001d9ca50a93385fc5ec721c9dbbe7a0f2e9e4",
+    "a2f846a30a8811dde66347b83901c7492039243537c7a667fafffd69049bcbd36afd0010d9b425e2d8785c1\nError = DATA_TOO_LARGE\n\n# Sample RSA-515 signature.\nVerify = RSA-515\nRSAPadding = PSS\nPSSSaltLength = 0\nDigest = SHA256\nInput = \"0123456789ABCDEF0123456789ABCDEF\"\nOutput = 00c5926600f160f85e7fe950cfe123908384211cd8fe25c90cb8e8cc0593308e9aa2efe3acbf100ec1658ded8f72f506525fc2c44f06251b08d896e7bb3f05b135\n\n# The above, but with too few leading zeros.\nVerify = RSA-515\nRSAPadding = PSS\nPSSSaltLength = 0\nDigest = SHA256\nInput = \"0123456789ABCDEF0123456789ABCDEF\"\nOutput = c5926600f160f85e7fe950cfe123908384211cd8fe25c90cb8e8cc0593308e9aa2efe3acbf100ec1658ded8f72f506525fc2c44f06251b08d896e7bb3f05b135\nError = DATA_LEN_NOT_EQUAL_TO_MOD_LEN\n\n# The above, but with too many leading zeros.\nVerify = RSA-515\nRSAPadding = PSS\nPSSSaltLength = 0\nDigest = SHA256\nInput = \"0123456789ABCDEF0123456789ABCDEF\"\nOutput = 0000c5926600f160f85e7fe950cfe123908384211cd8fe25c90cb8e8cc0593308e9aa2efe3acbf100ec1658ded8f72f506525fc2c44f06251b08d896e7bb3f05b135\nError = DATA_LEN_NOT_EQUAL_TO_MOD_LEN\n\n# The above with an invalid leading byte. The top few bits of EM are required to\n# be cleared.\nVerify = RSA-515\nRSAPadding = PSS\nPSSSaltLength = 0\nDigest = SHA256\nInput = \"0123456789ABCDEF0123456789ABCDEF\"\nOutput = 007f803c832a2090aea04013d9fa9c1630732a1625232826d235f0950f7050d3fb0eb06ef9ea8b260fad68e1165a2d770a8c7fc7a8aaa68620b021fc19c97e0041\nError = FIRST_OCTET_INVALID\n\n# The above with an invalid trailing byte.\nVerify = RSA-515\nRSAPadding = PSS\nPSSSaltLength = 0\nDigest = SHA256\nInput = \"0123456789ABCDEF0123456789ABCDEF\"\nOutput = 03e68555035891eb08d96c0967db22328cd892ad2856d88516ecb946bfdba732bb029b5c0dfa2119ed7349897d2324e95e86d91d0c4afc82700a36db8933abbf58\nError = LAST_OCTET_INVALID\n\n# Non-zero salt length.\nVerify = RSA-2048-SPKI\nRSAPadding = PSS\nPSSSaltLength = 32\nDigest = SHA256\nInput = \"0123456789ABCDEF0123456789ABCDEF\"\nOutput = 4065b284b0a6e98d4c41a8427007f878d8dd61599c87764fa79b8bf03f030c48127a4b1a5af5a6e0cf9055e57a1f47e5b0c0d8c600e78369cf1c39374899fac91a812692aa2216ba10900ce85a5cf7fddcafb726e4b83479c5bb7b3b84b08ffe183b4c2973aa3193ec7b7d4ea73bf1b579c6657b78ad7800e1975a4838c28ffe353fafef96be27b5c69677760a71b6f4df65ba6fe6b3565580a536f966928294c6e9ece807a90c1477779bcbfa3a250e98d685097c162c1c8c56ab02bd2e16eec7a019b51c067bdba7fa8cd5460796e22c607a8b6d12e1deb9be51c6943c46590f416800c48bb4cbb8c409d316573e59eadf7d3b9e6e5c2d0e570692e511e139\n\n# Non-zero salt length, wrong salt length.\nVerify = RSA-2048-SPKI\nRSAPadding = PSS\nPSSSaltLength = 31\nDigest = SHA256\nInput = \"0123456789ABCDEF0123456789ABCDEF\"\nOutput = 4065b284b0a6e98d4c41a8427007f878d8dd61599c87764fa79b8bf03f030c48127a4b1a5af5a6e0cf9055e57a1f47e5b0c0d8c600e78369cf1c39374899fac91a812692aa2216ba10900ce85a5cf7fddcafb726e4b83479c5bb7b3b84b08ffe183b4c2973aa3193ec7b7d4ea73bf1b579c6657b78ad7800e1975a4838c28ffe353fafef96be27b5c69677760a71b6f4df65ba6fe6b3565580a536f966928294c6e9ece807a90c1477779bcbfa3a250e98d685097c162c1c8c56ab02bd2e16eec7a019b51c067bdba7fa8cd5460796e22c607a8b6d12e1deb9be51c6943c46590f416800c48bb4cbb8c409d316573e59eadf7d3b9e6e5c2d0e570692e511e139\nError = SLEN_CHECK_FAILED\n\n# Non-zero salt length, match hash length.\nVerify = RSA-2048-SPKI\nRSAPadding = PSS\nPSSSaltLength = -1\nDigest = SHA256\nInput = \"0123456789ABCDEF0123456789ABCDEF\"\nOutput = 4065b284b0a6e98d4c41a8427007f878d8dd61599c87764fa79b8bf03f030c48127a4b1a5af5a6e0cf9055e57a1f47e5b0c0d8c600e78369cf1c39374899fac91a812692aa2216ba10900ce85a5cf7fddcafb726e4b83479c5bb7b3b84b08ffe183b4c2973aa3193ec7b7d4ea73bf1b579c6657b78ad7800e1975a4838c28ffe353fafef96be27b5c69677760a71b6f4df65ba6fe6b3565580a536f966928294c6e9ece807a90c1477779bcbfa3a250e98d685097c162c1c8c56ab02bd2e16eec7a019b51c067bdba7fa8cd5460796e22c607a8b6d12e1deb9be51c6943c46590f416800c48bb4cbb8c409d316573e59eadf7d3b9e6e5c2d0e570692e511e139\n\n# Non-zero salt length, auto-detected.\nVerify = RSA-2048-SPKI\nRSAPadding = PSS\nPSSSaltLength = -2\nDigest = SHA256\nInput = \"0123456789ABCDEF0123456789ABCDEF\"\nOutput = 4065b284b0a6e98d4c41a8427007f878d8dd61599c87764fa79b8bf03f030c48127a4b1a5af5a6e0cf9055e57a1f47e5b0c0d8c600e78369cf1c39374899fac91a812692aa2216ba10900ce85a5cf7fddcafb726e4b83479c5bb7b3b84b08ffe183b4c2973aa3193ec7b7d4ea73bf1b579c6657b78ad7800e1975a4838c28ffe353fafef96be27b5c69677760a71b6f4df65ba6fe6b3565580a536f966928294c6e9ece807a90c1477779bcbfa3a250e98d685097c162c1c8c56ab02bd2e16eec7a019b51c067bdba7fa8cd5460796e22c607a8b6d12e1deb9be51c6943c46590f416800c48bb4cbb8c409d316573e59eadf7d3b9e6e5c2d0e570692e511e139\n\n\n# RSA decrypt\n\nDecrypt = RSA-2048\nInput = 550af55a2904e7b9762352f8fb7fa235a9cb053aacb2d5fcb8ca48453cb2ee3619746c701abf2d4cc67003471a187900b05aa812bd25ed05c675dfc8c97a24a7bf49bd6214992cad766d05a9a2b57b74f26a737e0237b8b76c45f1f226a836d7cfbc75ba999bdbe48dbc09227aa46c88f21dccba7840141ad5a5d71fd122e6bd6ac3e564780dfe623fc1ca9b995a6037bf0bbd43b205a84ac5444f34202c05ce9113087176432476576de6ffff9a52ea57c08be3ec2f49676cb8e12f762ac71fa3c321e00ac988910c85ff52f93825666ce0d40ffaa0592078919d4493f46d95ccf76364c6d57760dd0b64805f9afc76a2365a5575ca301d5103f0ea76cb9a78\nOutput = \"Hello World\"\n\n# Corrupted ciphertext\nDecrypt = RSA-2048\nInput = 550af55a2904e7b9762352f8fb7fa235a9cb053aacb2d5fcb8ca48453cb2ee3619746c701abf2d4cc67003471a187900b05aa812bd25ed05c675dfc8c97a24a7bf49bd6214992cad766d05a9a2b57b74f26a737e0237b8b76c45f1f226a836d7cfbc75ba999bdbe48dbc09227aa46c88f21dccba7840141ad5a5d71fd122e6bd6ac3e564780dfe623fc1ca9b995a6037bf0bbd43b205a84ac5444f34202c05ce9113087176432476576de6ffff9a52ea57c08be3ec2f49676cb8e12f762ac71fa3c321e00ac988910c85ff52f93825666ce0d40ffaa0592078919d4493f46d95ccf76364c6d57760dd0b64805f9afc76a2365a5575ca301d5103f0ea76cb9a79\nError = PKCS_DECODING_ERROR\n\n# OAEP padding\nDecrypt = RSA-2048\nRSAPadding = OAEP\nInput = 458708dfbd42a1297ce7a9c86c7087ab80b1754810929b89c5107ca55368587686986fce94d86cc1595b3fb736223a656ec0f34d18ba1cc5665593610f56c58e26b272d584f3d983a5c91085700755aebd921fb280bba3eda7046ec07b43e7298e52d59edc92be4639a8ce08b2f85976ecf6d98cc469eeb9d5d8e2a32ea8a6626edafe1038b3df455668a9f3c77cad8b92fb872e00058c3d2a7ede1a1f03fc5622084ae04d9d24f6bf0995c58d35b93b699b9763595e123f2ab0863cc9229eb290e2ede7715c7a8f39e0b9a3e2e1b56ebb62f1cbfbb5986fb212ebd785b83d01d968b11d1756c7337f70c1f1a63bff03608e24f3a2fd44e67f832a8701c5d5af\nOutput = \"Hello World\"\n\n# OAEP padding with label and custom hash.\nDecrypt = RSA-2048\nRSAPadding = OAEP\nOAEPDigest = SHA512\nOAEPLabel = 00112233445566778899aabbccddeeff\nInput = 48b956c22b8e40cc38f0893672ddf488fc806cf1fcc6239c66dd8345eb543d6b5cac589e6c7ae86dac1c2436c4d72c48009a737b2c649e6000dbab17203e4d9c078bd70b649700a0830d4ddc396af0c48973177a229e48259d93247f04f76474c7611b530c66f020c4da2cc861c2e4104831ecc0336e0cb10d6520fdefd0b33606f5cdd736dd439583b9b6011cce99623c93caf5f76e21e9fefab414795dd5ac12cba551be74ebf266834fcffab182c5e7c9b6c064df154cb26ddfd4fe2fd87590005f4bf45e776a0082803e9f68995b8eeb4c6802c67b5ef349e5b2dc0cf7a12fc097030f2bd28f0253f17129b04c82993a12957728b35880fdd2f8d0cc469f\nOutput = \"Hello World\"\n\n# OAEP padding, corrupted ciphertext\nDecrypt = RSA-2048\nRSAPadding = OAEP\nInput = 458708dfbd42a1297ce7a9c86c7087ab80b1754810929b89c5107ca55368587686986fce94d86cc1595b3fb736223a656ec0f34d18ba1cc5665593610f56c58e26b272d584f3d983a5c91085700755aebd921fb280bba3eda7046ec07b43e7298e52d59edc92be4639a8ce08b2f85976ecf6d98cc469eeb9d5d8e2a32ea8a6626edafe1038b3df455668a9f3c77cad8b92fb872e00058c3d2a7ede1a1f03fc5622084ae04d9d24f6bf0995c58d35b93b699b9763595e123f2ab0863cc9229eb290e2ede7715c7a8f39e0b9a3e2e1b56ebb62f1cbfbb5986fb212ebd785b83d01d968b11d1756c7337f70c1f1a63bff03608e24f3a2fd44e67f832a8701c5d5ac\nError = OAEP_DECODING_ERROR\n\n# Test that RSA encryption successfully round-trips through decryption\n# with various parameters.\nEncrypt = RSA-2048\nInput = \"Hello World\"\nCheckDecrypt\n\nEncrypt = RSA-2048\nRSAPadding = OAEP\nInput = \"Hello World\"\nCheckDecrypt\n\nEncrypt = RSA-2048\nRSAPadding = OAEP\nOAEPDigest = SHA512\nOAEPLabel = 00112233445566778899aabbccddeeff\nInput = \"Hello World\"\nCheckDecrypt\n\n# Though we will never generate such a key, test that RSA keys where p < q work\n# properly.\nPrivateKey = RSA-Swapped\nType = RSA\nInput = 30820275020100300d06092a864886f70d01010105000482025f3082025b02010002818100ab28f98747934779011417d5bbb4095eae6f",
+    "48ed09e13081616cf390aac75b10a206a98953d402647dfef7fa363be2765a303b05ec388bd9a1d75123a1205b4ecb43c33f2e37d3e30842181d694a3acfc39afc52554946e699d97d97066596a46725ce6dea322623afcafecbd2884d9a0c5eae9c4d7da8874c29c19edb762e1902030100010281800d637ea568e169f15ab6be288f6ec55edd29425c9c6dbb941b5160fa1b89cda34ef15378b5107c016d63b0f52721e71497f876dd7f3d6b1f228c4bc20c3c12384644200e91130c9195660d1e706f55b2accf00c5e2174a1d9ee289f0e763ee58860485ec97d19d7fa2df38af5b5910b1fa52087768d288e6ec4c8d5eca23c8d3024100be757a24dc2c923692d964693b2d71ca33ccb2f946f9e5232d2090b715a97dca554068fab8876105bc9ed6dccfd0917c5e0b80339306535c3eeb787e89397bc7024100e60f5c9e52434da079b8c641791a81a96daa4d9921a07e5b48292a9fce230df7c9fc2b97b5e38834ed5caaa387a0bca35c474e989a68dd65b79a6f691a74471f0240438ccf017bc5a3260ff76291a01782204136fcd344c524ebd0f997da17a8c1a09d93f6a7d602cdfa86e79f3539cfb389f4a1079b432e1f2abc762f8a51893dc9024046604ca4e1e554c9d27283b363a888219c3a8ca25b770d303f52d8872a37eefdedfc0619d2ba57e058fc0ff71676453e73ec1c4ef26d41ccebed824754a05d6102404445374d8450e753e0a42085b56b0d6d500b3e3518536dc8f12ec8fd77aa75491835327ac0e12d73b5c3f1b09d03f6a24fe63b9c551dee6559b625435ec92429\n\nSign = RSA-Swapped\nDigest = SHA256\nInput = \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\"\nOutput = 07fa4e3de9c002c41c952dc292ef5a814c4c17dc1a6cf958c4c971e8089676d6661b442270ef9295c41e5385c9628aa1bdee2cc2558b8473ba212f2ba04b9ff2264c19187b9506b1d0a1cc2751844cc8dedf555d62ce81bc0e70bfe83d0184ee964593af91b9b327c0fb272c799148cd8737d412cbf36c2ad25fd66977bf805f\n\n# Though we will never generate such a key, test that RSA keys where p and q are\n# different sizes work properly.\nPrivateKey = RSA-PrimeMismatch\nType = RSA\nInput = 30820295020100300d06092a864886f70d01010105000482027f3082027b02010002818100c766f4fef89f5e9a8e13ed500fb38523ea94d7f8be066900eee58c913b4c6fdcb13d63d39b9108feabcefd1ffd04776403dc58f968ae817977d0809e567d8af512d604a0e9cb448fa5e402204ee519712a5ebbfd002faf8169495a782f54366b4665aac0d968bfec63c5446b6f9b13061c7f3d1f3f1b6bede8fff881b410a66f0203010001028180528c062f49485c771a0b18ca747d8a47f8941ea63c305626cb3f1f067e6861c4441c432687dbd08d484aac3b01f3ffdc3b762c719167f7cb22e565aa6acd597306ef6f7828b9720e9d440816186d940c4c5a9720dddf71fe0b59483f02a751515c8c27e43c575d6725d55f5bb77e0f977773b00afc058cfab6617ec90d0b62a9026100cb8f97c37b4fbc298b645bc3dc0526f8a4274e9a193b33c3acb76499b5b96330e4b586cbaa56368ffc12644952322253bc669496d572c0980f125fd7273739cf790d24401052b13732114d397c8c16a44716dc62d2320fb1ced99290dfd53e07022100fac51ac653609cdaba53280c6b6f209052e270be0c3c68fe8b37d6bf05fbba59026038dff2f04c58d7e2e7ae6fb1469d2de954bc22cb0d77ac1be4fb0ca1a1d39d7240c4b357de4cde4bd68b30f8077e38771af1b25c7e60e48cd7d1337402e1fc460ab57046720918b8aa4589452196669119c7ba65e602d4bdc264a9fdce7c5f2b0220773af0180bdc8bb7938fa6230191bcb1e236b7d4248d347e9242e25fc0c0874102605c4894cde334889f5b52ed8f86a2ee9c1fbe4166287e24ce44f3093bff383962f08043842f6ff3e6002104b0e29442c4a4483c5d06e2254fbe5e3930de3d0e28af10e96c6e341a4b8859382dbba24536a38ae71118e3e22413a93f298a7f744c\n\nSign = RSA-PrimeMismatch\nDigest = SHA256\nInput = \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\"\nOutput = 6192b1ce630c87d02e8245fd74d4f6ecac37eef979d188c8fa48c4d355fbe814e7dd3152f42bb020d769b540d11867af5b947387b8c99158d56901ff3708e423931178213916ae1002f162c9d497aacacdcb20e6ffe7ed40138a253fc943ddf3587433df5831a3ce46aeefce358a009bf6bad12d82d77424c2755d984d7da196\n\n\n# EC tests\n\nVerify = P-256\nDigest = SHA1\nInput = \"0123456789ABCDEF1234\"\nOutput = 3045022100b1d1cb1a577035bccdd5a86c6148c2cc7c633cd42b7234139b593076d041e15202201898cdd52b41ca502098184b409cf83a21bc945006746e3b7cea52234e043ec8\n\nVerify = P-256-SPKI\nDigest = SHA1\nInput = \"0123456789ABCDEF1234\"\nOutput = 3045022100b1d1cb1a577035bccdd5a86c6148c2cc7c633cd42b7234139b593076d041e15202201898cdd52b41ca502098184b409cf83a21bc945006746e3b7cea52234e043ec8\n\n# Digest too long\nVerify = P-256\nDigest = SHA1\nInput = \"0123456789ABCDEF12345\"\nOutput = 3045022100b1d1cb1a577035bccdd5a86c6148c2cc7c633cd42b7234139b593076d041e15202201898cdd52b41ca502098184b409cf83a21bc945006746e3b7cea52234e043ec8\nError = BAD_SIGNATURE\n\n# Digest too short\nVerify = P-256\nDigest = SHA1\nInput = \"0123456789ABCDEF123\"\nOutput = 3045022100b1d1cb1a577035bccdd5a86c6148c2cc7c633cd42b7234139b593076d041e15202201898cdd52b41ca502098184b409cf83a21bc945006746e3b7cea52234e043ec8\nError = BAD_SIGNATURE\n\n# Digest invalid\nVerify = P-256\nDigest = SHA1\nInput = \"0123456789ABCDEF1235\"\nOutput = 3045022100b1d1cb1a577035bccdd5a86c6148c2cc7c633cd42b7234139b593076d041e15202201898cdd52b41ca502098184b409cf83a21bc945006746e3b7cea52234e043ec8\nError = BAD_SIGNATURE\n\n# Invalid signature\nVerify = P-256\nDigest = SHA1\nInput = \"0123456789ABCDEF1234\"\nOutput = 3045022100b1d1cb1a577035bccdd5a86c6148c2cc7c633cd42b7234139b593076d041e15202201898cdd52b41ca502098184b409cf83a21bc945006746e3b7cea52234e043ec7\nError = BAD_SIGNATURE\n\n# Garbage after signature\nVerify = P-256\nDigest = SHA1\nInput = \"0123456789ABCDEF1234\"\nOutput = 3045022100b1d1cb1a577035bccdd5a86c6148c2cc7c633cd42b7234139b593076d041e15202201898cdd52b41ca502098184b409cf83a21bc945006746e3b7cea52234e043ec800\nError = BAD_SIGNATURE\n\n# BER signature\nVerify = P-256\nDigest = SHA1\nInput = \"0123456789ABCDEF1234\"\nOutput = 3080022100b1d1cb1a577035bccdd5a86c6148c2cc7c633cd42b7234139b593076d041e15202201898cdd52b41ca502098184b409cf83a21bc945006746e3b7cea52234e043ec80000\nError = BAD_SIGNATURE\n\n\n# Additional RSA-PSS and RSA-OAEP tests converted from\n# ftp://ftp.rsasecurity.com/pub/pkcs/pkcs-1/pkcs-1v2-1-vec.zip\n\nPublicKey = RSA-PSS-1\nType = RSA\nInput = 30819f300d06092a864886f70d010101050003818d0030818902818100a56e4a0e701017589a5187dc7ea841d156f2ec0e36ad52a44dfeb1e61f7ad991d8c51056ffedb162b4c0f283a12a88a394dff526ab7291cbb307ceabfce0b1dfd5cd9508096d5b2b8b6df5d671ef6377c0921cb23c270a70e2598e6ff89d19f105acc2d3f0cb35f29280e1386b6f64c4ef22e1e1f20d0ce8cffb2249bd9a21370203010001\n\nVerify = RSA-PSS-1\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = cd8b6538cb8e8de566b68bd067569dbf1ee2718e\nOutput = 9074308fb598e9701b2294388e52f971faac2b60a5145af185df5287b5ed2887e57ce7fd44dc8634e407c8e0e4360bc226f3ec227f9d9e54638e8d31f5051215df6ebb9c2f9579aa77598a38f914b5b9c1bd83c4e2f9f382a0d0aa3542ffee65984a601bc69eb28deb27dca12c82c2d4c3f66cd500f1ff2b994d8a4e30cbb33c\n\nVerify = RSA-PSS-1\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = e35befc17a1d160b9ce35fbd8eb16e7ee491d3fd\nOutput = 3ef7f46e831bf92b32274142a585ffcefbdca7b32ae90d10fb0f0c729984f04ef29a9df0780775ce43739b97838390db0a5505e63de927028d9d29b219ca2c4517832558a55d694a6d25b9dab66003c4cccd907802193be5170d26147d37b93590241be51c25055f47ef62752cfbe21418fafe98c22c4d4d47724fdb5669e843\n\nVerify = RSA-PSS-1\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = 0652ec67bcee30f9d2699122b91c19abdba89f91\nOutput = 666026fba71bd3e7cf13157cc2c51a8e4aa684af9778f91849f34335d141c00154c4197621f9624a675b5abc22ee7d5baaffaae1c9baca2cc373b3f33e78e6143c395a91aa7faca664eb733afd14d8827259d99a7550faca501ef2b04e33c23aa51f4b9e8282efdb728cc0ab09405a91607c6369961bc8270d2d4f39fce612b1\n\nVerify = RSA-PSS-1\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = 39c21c4cceda9c1adf839c744e1212a6437575ec\nOutput = 4609793b23e9d09362dc21bb47da0b4f3a7622649a47d464019b9aeafe53359c178c91cd58ba6bcb78be0346a7bc637f4b873d4bab38ee661f199634c547a1ad8442e03da015b136e543f7ab07c0c13e4225b8de8cce25d4f6eb8400f81f7e1833b7ee6e334d370964ca79fdb872b4d75223b5eeb08101591fb532d155a6de87\n\nVerify = RSA-PSS-1\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = 36dae913b77bd17cae6e7b09453d24544cebb33c\nOutput = 1d2aad221ca4d31ddf13509239019398e3d14b32dc34dc5af4aeaea3c095af73479cf0a45e5629635a53a018377615b16cb9b13b3e09d671eb71e387b8545c5960da5a64776e768e82b2c93583bf104c3fdb23512b7b4e89f633dd0063a530db4524b01c3f384c09310e315a79dcd3d684022a7f31c865a664e316978b759fad\n\nVerify = RSA-PSS-1\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = 45eef191f4f79c31fe5d2ede7e5098994e929d2d\nOutput = 2a34f6125e1f6b0bf971e84fbd41c632be8f2c2ace7de8b6926e31ff93e9af987fbc06e51e9be14f5198f91f3f953bd67da60a9df59764c3dc0fe08e1cbef0b75f868d10ad3fba749fef59fb6dac46a0d6e504369331586f58e4628f39aa278982543bc0eeb537dc61958019b394fb273f215858a0a01ac4d650b955c67f4c58\n\nPublicKey = RSA-PSS-2\nType = RSA\nInput = 30819f300d06092a864886f70d010101050003818d0030818902818101d40c1bcf97a68ae7cdbd8a7bf3e34fa19dcca4ef75a47454375f94514d88",
+    "fed006fb829f8419ff87d6315da68a1ff3a0938e9abb3464011c303ad99199cf0c7c7a8b477dce829e8844f625b115e5e9c4a59cf8f8113b6834336a2fd2689b472cbb5e5cabe674350c59b6c17e176874fb42f8fc3d176a017edc61fd326c4b33c90203010001\n\nVerify = RSA-PSS-2\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = 5c81a3e2a658246628cd0ee8b00bb4c012bc9739\nOutput = 014c5ba5338328ccc6e7a90bf1c0ab3fd606ff4796d3c12e4b639ed9136a5fec6c16d8884bdd99cfdc521456b0742b736868cf90de099adb8d5ffd1deff39ba4007ab746cefdb22d7df0e225f54627dc65466131721b90af445363a8358b9f607642f78fab0ab0f43b7168d64bae70d8827848d8ef1e421c5754ddf42c2589b5b3\n\nVerify = RSA-PSS-2\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = 27f71611446aa6eabf037f7dedeede3203244991\nOutput = 010991656cca182b7f29d2dbc007e7ae0fec158eb6759cb9c45c5ff87c7635dd46d150882f4de1e9ae65e7f7d9018f6836954a47c0a81a8a6b6f83f2944d6081b1aa7c759b254b2c34b691da67cc0226e20b2f18b42212761dcd4b908a62b371b5918c5742af4b537e296917674fb914194761621cc19a41f6fb953fbcbb649dea\n\nVerify = RSA-PSS-2\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = 03ecc2c33e93f05fc7224fcc0d461356cb897217\nOutput = 007f0030018f53cdc71f23d03659fde54d4241f758a750b42f185f87578520c30742afd84359b6e6e8d3ed959dc6fe486bedc8e2cf001f63a7abe16256a1b84df0d249fc05d3194ce5f0912742dbbf80dd174f6c51f6bad7f16cf3364eba095a06267dc3793803ac7526aebe0a475d38b8c2247ab51c4898df7047dc6adf52c6c4\n\nVerify = RSA-PSS-2\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = 246c727b4b9494849dddb068d582e179ac20999c\nOutput = 009cd2f4edbe23e12346ae8c76dd9ad3230a62076141f16c152ba18513a48ef6f010e0e37fd3df10a1ec629a0cb5a3b5d2893007298c30936a95903b6ba85555d9ec3673a06108fd62a2fda56d1ce2e85c4db6b24a81ca3b496c36d4fd06eb7c9166d8e94877c42bea622b3bfe9251fdc21d8d5371badad78a488214796335b40b\n\nVerify = RSA-PSS-2\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = e8617ca3ea66ce6a58ede2d11af8c3ba8a6ba912\nOutput = 00ec430824931ebd3baa43034dae98ba646b8c36013d1671c3cf1cf8260c374b19f8e1cc8d965012405e7e9bf7378612dfcc85fce12cda11f950bd0ba8876740436c1d2595a64a1b32efcfb74a21c873b3cc33aaf4e3dc3953de67f0674c0453b4fd9f604406d441b816098cb106fe3472bc251f815f59db2e4378a3addc181ecf\n\nVerify = RSA-PSS-2\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = 7a6fdc1a4e434ecbc35d657ad49a2f4fafd43bc8\nOutput = 00475b1648f814a8dc0abdc37b5527f543b666bb6e39d30e5b49d3b876dccc58eac14e32a2d55c2616014456ad2f246fc8e3d560da3ddf379a1c0bd200f10221df078c219a151bc8d4ec9d2fc2564467811014ef15d8ea01c2ebbff8c2c8efab38096e55fcbe3285c7aa558851254faffa92c1c72b78758663ef4582843139d7a6\n\nPublicKey = RSA-PSS-3\nType = RSA\nInput = 30819f300d06092a864886f70d010101050003818d0030818902818102f246ef451ed3eebb9a310200cc25859c048e4be798302991112eb68ce6db674e280da21feded1ae74880ca522b18db249385012827c515f0e466a1ffa691d98170574e9d0eadb087586ca48933da3cc953d95bd0ed50de10ddcb6736107d6c831c7f663e833ca4c097e700ce0fb945f88fb85fe8e5a773172565b914a471a4430203010001\n\nVerify = RSA-PSS-3\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = 3552be69dd74bdc56d2cf8c38ef7bafe269040fe\nOutput = 0088b135fb1794b6b96c4a3e678197f8cac52b64b2fe907d6f27de761124964a99a01a882740ecfaed6c01a47464bb05182313c01338a8cd097214cd68ca103bd57d3bc9e816213e61d784f182467abf8a01cf253e99a156eaa8e3e1f90e3c6e4e3aa2d83ed0345b89fafc9c26077c14b6ac51454fa26e446e3a2f153b2b16797f\n\nVerify = RSA-PSS-3\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = 609143ff7240e55c062aba8b9e4426a781919bc9\nOutput = 02a5f0a858a0864a4f65017a7d69454f3f973a2999839b7bbc48bf78641169179556f595fa41f6ff18e286c2783079bc0910ee9cc34f49ba681124f923dfa88f426141a368a5f5a930c628c2c3c200e18a7644721a0cbec6dd3f6279bde3e8f2be5e2d4ee56f97e7ceaf33054be7042bd91a63bb09f897bd41e81197dee99b11af\n\nVerify = RSA-PSS-3\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = 0afd22f879a9cda7c584f4135f8f1c961db114c0\nOutput = 0244bcd1c8c16955736c803be401272e18cb990811b14f72db964124d5fa760649cbb57afb8755dbb62bf51f466cf23a0a1607576e983d778fceffa92df7548aea8ea4ecad2c29dd9f95bc07fe91ecf8bee255bfe8762fd7690aa9bfa4fa0849ef728c2c42c4532364522df2ab7f9f8a03b63f7a499175828668f5ef5a29e3802c\n\nVerify = RSA-PSS-3\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = 405dd56d395ef0f01b555c48f748cc32b210650b\nOutput = 0196f12a005b98129c8df13c4cb16f8aa887d3c40d96df3a88e7532ef39cd992f273abc370bc1be6f097cfebbf0118fd9ef4b927155f3df22b904d90702d1f7ba7a52bed8b8942f412cd7bd676c9d18e170391dcd345c06a730964b3f30bcce0bb20ba106f9ab0eeb39cf8a6607f75c0347f0af79f16afa081d2c92d1ee6f836b8\n\nVerify = RSA-PSS-3\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = a2c313b0440c8a0c47233b87f0a160c61af3eae7\nOutput = 021eca3ab4892264ec22411a752d92221076d4e01c0e6f0dde9afd26ba5acf6d739ef987545d16683e5674c9e70f1de649d7e61d48d0caeb4fb4d8b24fba84a6e3108fee7d0705973266ac524b4ad280f7ae17dc59d96d3351586b5a3bdb895d1e1f7820ac6135d8753480998382ba32b7349559608c38745290a85ef4e9f9bd83\n\nVerify = RSA-PSS-3\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = f1bf6ca7b4bbdbb6bf20a4bf55728725d177154a\nOutput = 012fafec862f56e9e92f60ab0c77824f4299a0ca734ed26e0644d5d222c7f0bde03964f8e70a5cb65ed44e44d56ae0edf1ff86ca032cc5dd4404dbb76ab854586c44eed8336d08d457ce6c03693b45c0f1efef93624b95b8ec169c616d20e5538ebc0b6737a6f82b4bc0570924fc6b35759a3348426279f8b3d7744e2d222426ce\n\nPublicKey = RSA-PSS-4\nType = RSA\nInput = 30819f300d06092a864886f70d010101050003818d00308189028181054adb7886447efe6f57e0368f06cf52b0a3370760d161cef126b91be7f89c421b62a6ec1da3c311d75ed50e0ab5fff3fd338acc3aa8a4e77ee26369acb81ba900fa83f5300cf9bb6c53ad1dc8a178b815db4235a9a9da0c06de4e615ea1277ce559e9c108de58c14a81aa77f5a6f8d1335494498848c8b95940740be7bf7c37050203010001\n\nVerify = RSA-PSS-4\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = f8b0abf70fec0bca74f0accbc24f75e6e90d3bfd\nOutput = 0323d5b7bf20ba4539289ae452ae4297080feff4518423ff4811a817837e7d82f1836cdfab54514ff0887bddeebf40bf99b047abc3ecfa6a37a3ef00f4a0c4a88aae0904b745c846c4107e8797723e8ac810d9e3d95dfa30ff4966f4d75d13768d20857f2b1406f264cfe75e27d7652f4b5ed3575f28a702f8c4ed9cf9b2d44948\n\nVerify = RSA-PSS-4\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = 04a10944bfe11ab801e77889f3fd3d7f4ff0b629\nOutput = 049d0185845a264d28feb1e69edaec090609e8e46d93abb38371ce51f4aa65a599bdaaa81d24fba66a08a116cb644f3f1e653d95c89db8bbd5daac2709c8984000178410a7c6aa8667ddc38c741f710ec8665aa9052be929d4e3b16782c1662114c5414bb0353455c392fc28f3db59054b5f365c49e1d156f876ee10cb4fd70598\n\nVerify = RSA-PSS-4\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = ba01243db223eb97fb86d746c3148adaaa0ca344\nOutput = 03fbc410a2ced59500fb99f9e2af2781ada74e13145624602782e2994813eefca0519ecd253b855fb626a90d771eae028b0c47a199cbd9f8e3269734af4163599090713a3fa910fa0960652721432b971036a7181a2bc0cab43b0b598bc6217461d7db305ff7e954c5b5bb231c39e791af6bcfa76b147b081321f72641482a2aad\n\nVerify = RSA-PSS-4\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = 934bb0d38d6836daec9de82a9648d4593da67cd2\nOutput = 0486644bc66bf75d28335a6179b10851f43f09bded9fac1af33252bb9953ba4298cd6466b27539a70adaa3f89b3db3c74ab635d122f4ee7ce557a61e59b82ffb786630e5f9db53c77d9a0c12fab5958d4c2ce7daa807cd89ba2cc7fcd02ff470ca67b229fcce814c852c73cc93bea35be68459ce478e9d4655d121c8472f371d4f\n\nVerify = RSA-PSS-4\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = ec35d81abd1cceac425a935758b683465c8bd879\nOutput = 022a80045353904cb30cbb542d7d4990421a6eec16a8029a8422adfd22d6aff8c4cc0294af110a0c067ec86a7d364134459bb1ae8ff836d5a8a2579840996b320b19f13a13fad378d931a65625dae2739f0c53670b35d9d3cbac08e733e4ec2b83af4b9196d63e7c4ff1ddeae2a122791a125bfea8deb0de8ccf1f4ffaf6e6fb0a\n\nVerify = RSA-PSS-4\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = 72ce251d17b04dd3970d6ff1fbe3624899e9e941\nOutput = 00938dcb6d583046065f69c78da7a1f1757066a7fa75125a9d2929f0b79a60b627b082f11f5b196f28eb9daa6f21c05e5140f6aef1737d2023075c05ecf04a028c686a2ab3e7d5a0664f295ce12995e890908b6ad21f0839eb65b70393a7b5afd9871de0caa0cedec5b819626756209d13ab1e7bb9546a26ff37e9a51af9fd562e\n\nPublicKey = RSA-PSS-5\nType = RSA\nInput = 30819f300d06092a864886f70d010101050003818d003081890281810d10f661f29940f5ed39aa260966deb47843679d2b6fb25b3de370f3ac7c19916391fd25fb527ebfa6a4b4df45a1759d996c4bb4ebd18828c44fc52d0191871740525f47a4b0cc8da325ed8aa676b0d0f626e0a77f07692170acac8082f42faa7dc7cd123e730e31a87985204cabcbe6670d43a2dd2b2ddef5e05392fc213bc5070203010001\n\nVerify = RSA-PSS-5\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = d98b7061943510bc3dd9162f7169aabdbdcd0222\nOutput = 0ba373f76e0921b70a8fbfe622f0bf77b28a3db98e361051c3d7cb92ad0452915a4de9c0172",
+    "2f6823eeb6adf7e0ca8290f5de3e549890ac2a3c5950ab217ba58590894952de96f8df111b2575215da6c161590c745be612476ee578ed384ab33e3ece97481a252f5c79a98b5532ae00cdd62f2ecc0cd1baefe80d80b962193ec1d\n\nVerify = RSA-PSS-5\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = 7ae8e699f754988f4fd645e463302e49a2552072\nOutput = 08180de825e4b8b014a32da8ba761555921204f2f90d5f24b712908ff84f3e220ad17997c0dd6e706630ba3e84add4d5e7ab004e58074b549709565d43ad9e97b5a7a1a29e85b9f90f4aafcdf58321de8c5974ef9abf2d526f33c0f2f82e95d158ea6b81f1736db8d1af3d6ac6a83b32d18bae0ff1b2fe27de4c76ed8c7980a34e\n\nVerify = RSA-PSS-5\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = 8d46c7c05534c1ba2cc7624500d48a4531604bff\nOutput = 05e0fdbdf6f756ef733185ccfa8ced2eb6d029d9d56e35561b5db8e70257ee6fd019d2f0bbf669fe9b9821e78df6d41e31608d58280f318ee34f559941c8df13287574bac000b7e58dc4f414ba49fb127f9d0f8936638c76e85356c994f79750f7fa3cf4fd482df75e3fb9978cd061f7abb17572e6e63e0bde12cbdcf18c68b979\n\nVerify = RSA-PSS-5\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = ee3de96783fd0a157c8b20bf5566124124dcfe65\nOutput = 0bc989853bc2ea86873271ce183a923ab65e8a53100e6df5d87a24c4194eb797813ee2a187c097dd872d591da60c568605dd7e742d5af4e33b11678ccb63903204a3d080b0902c89aba8868f009c0f1c0cb85810bbdd29121abb8471ff2d39e49fd92d56c655c8e037ad18fafbdc92c95863f7f61ea9efa28fea401369d19daea1\n\nVerify = RSA-PSS-5\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = 1204df0b03c2724e2709c23fc71789a21b00ae4c\nOutput = 0aefa943b698b9609edf898ad22744ac28dc239497cea369cbbd84f65c95c0ad776b594740164b59a739c6ff7c2f07c7c077a86d95238fe51e1fcf33574a4ae0684b42a3f6bf677d91820ca89874467b2c23add77969c80717430d0efc1d3695892ce855cb7f7011630f4df26def8ddf36fc23905f57fa6243a485c770d5681fcd\n\nVerify = RSA-PSS-5\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = 29926bc3280c841f601acd0d6f17ea38023eddbc\nOutput = 02802dccfa8dfaf5279bf0b4a29ba1b157611faeaaf419b8919d15941900c1339e7e92e6fae562c53e6cc8e84104b110bce03ad18525e3c49a0eadad5d3f28f244a8ed89edbafbb686277cfa8ae909714d6b28f4bf8e293aa04c41efe7c0a81266d5c061e2575be032aa464674ff71626219bd74cc45f0e7ed4e3ff96eee758e8f\n\nPublicKey = RSA-PSS-6\nType = RSA\nInput = 30819f300d06092a864886f70d010101050003818d00308189028181164ca31cff609f3a0e7101b039f2e4fe6dd37519ab98598d179e174996598071f47d3a04559158d7be373cf1aa53f0aa6ef09039e5678c2a4c63900514c8c4f8aaed5de12a5f10b09c311af8c0ffb5b7a297f2efc63b8d6b0510931f0b98e48bf5fc6ec4e7b8db1ffaeb08c38e02adb8f03a48229c99e969431f61cb8c4dc698d10203010001\n\nVerify = RSA-PSS-6\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = ab464e8cb65ae5fdea47a53fa84b234d6bfd52f6\nOutput = 04c0cfacec04e5badbece159a5a1103f69b3f32ba593cb4cc4b1b7ab455916a96a27cd2678ea0f46ba37f7fc9c86325f29733b389f1d97f43e7201c0f348fc45fe42892335362eee018b5b161f2f9393031225c713012a576bc88e23052489868d9010cbf033ecc568e8bc152bdc59d560e41291915d28565208e22aeec9ef85d1\n\nVerify = RSA-PSS-6\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = 92d0bcae82b641f578f040f5151be8eda6d42299\nOutput = 0a2314250cf52b6e4e908de5b35646bcaa24361da8160fb0f9257590ab3ace42b0dc3e77ad2db7c203a20bd952fbb56b1567046ecfaa933d7b1000c3de9ff05b7d989ba46fd43bc4c2d0a3986b7ffa13471d37eb5b47d64707bd290cfd6a9f393ad08ec1e3bd71bb5792615035cdaf2d8929aed3be098379377e777ce79aaa4773\n\nVerify = RSA-PSS-6\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = 3569bd8fd2e28f2443375efa94f186f6911ffc2b\nOutput = 086df6b500098c120f24ff8423f727d9c61a5c9007d3b6a31ce7cf8f3cbec1a26bb20e2bd4a046793299e03e37a21b40194fb045f90b18bf20a47992ccd799cf9c059c299c0526854954aade8a6ad9d97ec91a1145383f42468b231f4d72f23706d9853c3fa43ce8ace8bfe7484987a1ec6a16c8daf81f7c8bf42774707a9df456\n\nVerify = RSA-PSS-6\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = 7abbb7b42de335730a0b641f1e314b6950b84f98\nOutput = 0b5b11ad549863ffa9c51a14a1106c2a72cc8b646e5c7262509786105a984776534ca9b54c1cc64bf2d5a44fd7e8a69db699d5ea52087a4748fd2abc1afed1e5d6f7c89025530bdaa2213d7e030fa55df6f34bcf1ce46d2edf4e3ae4f3b01891a068c9e3a44bbc43133edad6ecb9f35400c4252a5762d65744b99cb9f4c559329f\n\nVerify = RSA-PSS-6\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = 55b7eb27be7a787a59eb7e5fac468db8917a7725\nOutput = 02d71fa9b53e4654fefb7f08385cf6b0ae3a817942ebf66c35ac67f0b069952a3ce9c7e1f1b02e480a9500836de5d64cdb7ecde04542f7a79988787e24c2ba05f5fd482c023ed5c30e04839dc44bed2a3a3a4fee01113c891a47d32eb8025c28cb050b5cdb576c70fe76ef523405c08417faf350b037a43c379339fcb18d3a356b\n\nVerify = RSA-PSS-6\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = de2fa0367ef49083ff89b9905d3fd646fcc12c38\nOutput = 0a40a16e2fe2b38d1df90546167cf9469c9e3c3681a3442b4b2c2f581deb385ce99fc6188bb02a841d56e76d301891e24560550fcc2a26b55f4ccb26d837d350a154bcaca8392d98fa67959e9727b78cad03269f56968fc56b68bd679926d83cc9cb215550645ccda31c760ff35888943d2d8a1d351e81e5d07b86182e751081ef\n\nPublicKey = RSA-PSS-7\nType = RSA\nInput = 30819f300d06092a864886f70d010101050003818d0030818902818137c9da4a66c8c408b8da27d0c9d79f8ccb1eafc1d2fe48746d940b7c4ef5dee18ad12647cefaa0c4b3188b221c515386759b93f02024b25ab9242f8357d8f3fd49640ee5e643eaf6c64deefa7089727c8ff03993333915c6ef21bf5975b6e50d118b51008ec33e9f01a0a545a10a836a43ddbca9d8b5c5d3548022d7064ea29ab30203010001\n\nVerify = RSA-PSS-7\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = 8be4afbdd76bd8d142c5f4f46dba771ee5d6d29d\nOutput = 187f390723c8902591f0154bae6d4ecbffe067f0e8b795476ea4f4d51ccc810520bb3ca9bca7d0b1f2ea8a17d873fa27570acd642e3808561cb9e975ccfd80b23dc5771cdb3306a5f23159dacbd3aa2db93d46d766e09ed15d900ad897a8d274dc26b47e994a27e97e2268a766533ae4b5e42a2fcaf755c1c4794b294c60555823\n\nVerify = RSA-PSS-7\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = 402140dc605b2f5c5ec0d15bce9f9ba8857fe117\nOutput = 10fd89768a60a67788abb5856a787c8561f3edcf9a83e898f7dc87ab8cce79429b43e56906941a886194f137e591fe7c339555361fbbe1f24feb2d4bcdb80601f3096bc9132deea60ae13082f44f9ad41cd628936a4d51176e42fc59cb76db815ce5ab4db99a104aafea68f5d330329ebf258d4ede16064bd1d00393d5e1570eb8\n\nVerify = RSA-PSS-7\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = 3e885205892ff2b6b37c2c4eb486c4bf2f9e7f20\nOutput = 2b31fde99859b977aa09586d8e274662b25a2a640640b457f594051cb1e7f7a911865455242926cf88fe80dfa3a75ba9689844a11e634a82b075afbd69c12a0df9d25f84ad4945df3dc8fe90c3cefdf26e95f0534304b5bdba20d3e5640a2ebfb898aac35ae40f26fce5563c2f9f24f3042af76f3c7072d687bbfb959a88460af1\n\nVerify = RSA-PSS-7\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = 1fc2201d0c442a4736cd8b2cd00c959c47a3bf42\nOutput = 32c7ca38ff26949a15000c4ba04b2b13b35a3810e568184d7ecabaa166b7ffabddf2b6cf4ba07124923790f2e5b1a5be040aea36fe132ec130e1f10567982d17ac3e89b8d26c3094034e762d2e031264f01170beecb3d1439e05846f25458367a7d9c02060444672671e64e877864559ca19b2074d588a281b5804d23772fbbe19\n\nVerify = RSA-PSS-7\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = e4351b66819e5a31501f89acc7faf57030e9aac5\nOutput = 07eb651d75f1b52bc263b2e198336e99fbebc4f332049a922a10815607ee2d989db3a4495b7dccd38f58a211fb7e193171a3d891132437ebca44f318b280509e52b5fa98fcce8205d9697c8ee4b7ff59d4c59c79038a1970bd2a0d451ecdc5ef11d9979c9d35f8c70a6163717607890d586a7c6dc01c79f86a8f28e85235f8c2f1\n\nVerify = RSA-PSS-7\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = 49f6cc58365e514e1a3f301f4de16f9fb5347ff2\nOutput = 18da3cdcfe79bfb77fd9c32f377ad399146f0a8e810620233271a6e3ed3248903f5cdc92dc79b55d3e11615aa056a795853792a3998c349ca5c457e8ca7d29d796aa24f83491709befcfb1510ea513c92829a3f00b104f655634f320752e130ec0ccf6754ff893db302932bb025eb60e87822598fc619e0e981737a9a4c4152d33\n\nPublicKey = RSA-PSS-8\nType = RSA\nInput = 30819f300d06092a864886f70d010101050003818d00308189028181495370a1fb18543c16d3631e3163255df62be6eee890d5f25509e4f778a8ea6fbbbcdf85dff64e0d972003ab3681fbba6dd41fd541829b2e582de9f2a4a4e0a2d0900bef4753db3cee0ee06c7dfae8b1d53b5953218f9cceea695b08668edeaadced9463b1d790d5ebf27e9115b46cad4d9a2b8efab0561b0810344739ada0733f0203010001\n\nVerify = RSA-PSS-8\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = a1dd230d8ead860199b6277c2ecfe3d95f6d9160\nOutput = 0262ac254bfa77f3c1aca22c5179f8f040422b3c5bafd40a8f21cf0fa5a667ccd5993d42dbafb409c520e25fce2b1ee1e716577f1efa17f3da28052f40f0419b23106d7845aaf01125b698e7a4dfe92d3967bb00c4d0d35ba3552ab9a8b3eef07c7fecdbc5424ac4db1e20cb37d0b2744769940ea907e17fbbca673b20522380c5\n\nVerify = RSA-PSS-8\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = f6e68e53c602c5c65fa67b5aa6d786e5524b12ab\nOutput = 2707b9ad5115c58c94e932e8ec0a280f56339e44a1b58d4ddcff2f312e5f34dcfe39e89c6a94dcee86dbbdae5b79ba4e08",
+    "19a9e7bfd9d982e7ee6c86ee68396e8b3a14c9c8f34b178eb741f9d3f121109bf5c8172fada2e768f9ea1433032c004a8aa07eb990000a48dc94c8bac8aabe2b09b1aa46c0a2aa0e12f63fbba775ba7e\n\nVerify = RSA-PSS-8\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = d6f9fcd3ae27f32bb2c7c93536782eba52af1f76\nOutput = 2ad20509d78cf26d1b6c406146086e4b0c91a91c2bd164c87b966b8faa42aa0ca446022323ba4b1a1b89706d7f4c3be57d7b69702d168ab5955ee290356b8c4a29ed467d547ec23cbadf286ccb5863c6679da467fc9324a151c7ec55aac6db4084f82726825cfe1aa421bc64049fb42f23148f9c25b2dc300437c38d428aa75f96\n\nVerify = RSA-PSS-8\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = 7ff2a53ce2e2d900d468e498f230a5f5dd0020de\nOutput = 1e24e6e58628e5175044a9eb6d837d48af1260b0520e87327de7897ee4d5b9f0df0be3e09ed4dea8c1454ff3423bb08e1793245a9df8bf6ab3968c8eddc3b5328571c77f091cc578576912dfebd164b9de5454fe0be1c1f6385b328360ce67ec7a05f6e30eb45c17c48ac70041d2cab67f0a2ae7aafdcc8d245ea3442a6300ccc7\n\nVerify = RSA-PSS-8\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = 4eb309f7022ba0b03bb78601b12931ec7c1be8d3\nOutput = 33341ba3576a130a50e2a5cf8679224388d5693f5accc235ac95add68e5eb1eec31666d0ca7a1cda6f70a1aa762c05752a51950cdb8af3c5379f18cfe6b5bc55a4648226a15e912ef19ad77adeea911d67cfefd69ba43fa4119135ff642117ba985a7e0100325e9519f1ca6a9216bda055b5785015291125e90dcd07a2ca9673ee\n\nVerify = RSA-PSS-8\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = 65033bc2f67d6aba7d526acb873b8d9241e5e4d9\nOutput = 1ed1d848fb1edb44129bd9b354795af97a069a7a00d0151048593e0c72c3517ff9ff2a41d0cb5a0ac860d736a199704f7cb6a53986a88bbd8abcc0076a2ce847880031525d449da2ac78356374c536e343faa7cba42a5aaa6506087791c06a8e989335aed19bfab2d5e67e27fb0c2875af896c21b6e8e7309d04e4f6727e69463e\n\nPublicKey = RSA-PSS-9\nType = RSA\nInput = 3081df300d06092a864886f70d01010105000381cd003081c90281c100e6bd692ac96645790403fdd0f5beb8b9bf92ed10007fc365046419dd06c05c5b5b2f48ecf989e4ce269109979cbb40b4a0ad24d22483d1ee315ad4ccb1534268352691c524f6dd8e6c29d224cf246973aec86c5bf6b1401a850d1b9ad1bb8cbcec47b06f0f8c7f45d3fc8f319299c5433ddbc2b3053b47ded2ecd4a4caefd614833dc8bb622f317ed076b8057fe8de3f84480ad5e83e4a61904a4f248fb397027357e1d30e463139815c6fd4fd5ac5b8172a45230ecb6318a04f1455d84e5a8b0203010001\n\nVerify = RSA-PSS-9\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = 2715a49b8b0012cd7aee84c116446e6dfe3faec0\nOutput = 586107226c3ce013a7c8f04d1a6a2959bb4b8e205ba43a27b50f124111bc35ef589b039f5932187cb696d7d9a32c0c38300a5cdda4834b62d2eb240af33f79d13dfbf095bf599e0d9686948c1964747b67e89c9aba5cd85016236f566cc5802cb13ead51bc7ca6bef3b94dcbdbb1d570469771df0e00b1a8a06777472d2316279edae86474668d4e1efff95f1de61c6020da32ae92bbf16520fef3cf4d88f61121f24bbd9fe91b59caf1235b2a93ff81fc403addf4ebdea84934a9cdaf8e1a9e\n\nVerify = RSA-PSS-9\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = 2dac956d53964748ac364d06595827c6b4f143cd\nOutput = 80b6d643255209f0a456763897ac9ed259d459b49c2887e5882ecb4434cfd66dd7e1699375381e51cd7f554f2c271704b399d42b4be2540a0eca61951f55267f7c2878c122842dadb28b01bd5f8c025f7e228418a673c03d6bc0c736d0a29546bd67f786d9d692ccea778d71d98c2063b7a71092187a4d35af108111d83e83eae46c46aa34277e06044589903788f1d5e7cee25fb485e92949118814d6f2c3ee361489016f327fb5bc517eb50470bffa1afa5f4ce9aa0ce5b8ee19bf5501b958\n\nVerify = RSA-PSS-9\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = 28d98c46cccafbd3bc04e72f967a54bd3ea12298\nOutput = 484408f3898cd5f53483f80819efbf2708c34d27a8b2a6fae8b322f9240237f981817aca1846f1084daa6d7c0795f6e5bf1af59c38e1858437ce1f7ec419b98c8736adf6dd9a00b1806d2bd3ad0a73775e05f52dfef3a59ab4b08143f0df05cd1ad9d04bececa6daa4a2129803e200cbc77787caf4c1d0663a6c5987b605952019782caf2ec1426d68fb94ed1d4be816a7ed081b77e6ab330b3ffc073820fecde3727fcbe295ee61a050a343658637c3fd659cfb63736de32d9f90d3c2f63eca\n\nVerify = RSA-PSS-9\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = 0866d2ff5a79f25ef668cd6f31b42dee421e4c0e\nOutput = 84ebeb481be59845b46468bafb471c0112e02b235d84b5d911cbd1926ee5074ae0424495cb20e82308b8ebb65f419a03fb40e72b78981d88aad143053685172c97b29c8b7bf0ae73b5b2263c403da0ed2f80ff7450af7828eb8b86f0028bd2a8b176a4d228cccea18394f238b09ff758cc00bc04301152355742f282b54e663a919e709d8da24ade5500a7b9aa50226e0ca52923e6c2d860ec50ff480fa57477e82b0565f4379f79c772d5c2da80af9fbf325ece6fc20b00961614bee89a183e\n\nVerify = RSA-PSS-9\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = 6a5b4be4cd36cc97dfde9995efbf8f097a4a991a\nOutput = 82102df8cb91e7179919a04d26d335d64fbc2f872c44833943241de8454810274cdf3db5f42d423db152af7135f701420e39b494a67cbfd19f9119da233a23da5c6439b5ba0d2bc373eee3507001378d4a4073856b7fe2aba0b5ee93b27f4afec7d4d120921c83f606765b02c19e4d6a1a3b95fa4c422951be4f52131077ef17179729cddfbdb56950dbaceefe78cb16640a099ea56d24389eef10f8fecb31ba3ea3b227c0a86698bb89e3e9363905bf22777b2a3aa521b65b4cef76d83bde4c\n\nVerify = RSA-PSS-9\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = b9dfd1df76a461c51e6576c6c8ed0a923d1c50e7\nOutput = a7fdb0d259165ca2c88d00bbf1028a867d337699d061193b17a9648e14ccbbaadeacaacdec815e7571294ebb8a117af205fa078b47b0712c199e3ad05135c504c24b81705115740802487992ffd511d4afc6b854491eb3f0dd523139542ff15c3101ee85543517c6a3c79417c67e2dd9aa741e9a29b06dcb593c2336b3670ae3afbac7c3e76e215473e866e338ca244de00b62624d6b9426822ceae9f8cc460895f41250073fd45c5a1e7b425c204a423a699159f6903e710b37a7bb2bc8049f\n\nPublicKey = RSA-PSS-10\nType = RSA\nInput = 30820122300d06092a864886f70d01010105000382010f003082010a0282010100a5dd867ac4cb02f90b9457d48c14a770ef991c56c39c0ec65fd11afa8937cea57b9be7ac73b45c0017615b82d622e318753b6027c0fd157be12f8090fee2a7adcd0eef759f88ba4997c7a42d58c9aa12cb99ae001fe521c13bb5431445a8d5ae4f5e4c7e948ac227d3604071f20e577e905fbeb15dfaf06d1de5ae6253d63a6a2120b31a5da5dabc9550600e20f27d3739e2627925fea3cc509f21dff04e6eea4549c540d6809ff9307eede91fff58733d8385a237d6d3705a33e391900992070df7adf1357cf7e3700ce3667de83f17b8df1778db381dce09cb4ad058a511001a738198ee27cf55a13b754539906582ec8b174bd58d5d1f3d767c613721ae050203010001\n\nVerify = RSA-PSS-10\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = 9596bb630cf6a8d4ea4600422b9eba8b13675dd4\nOutput = 82c2b160093b8aa3c0f7522b19f87354066c77847abf2a9fce542d0e84e920c5afb49ffdfdace16560ee94a1369601148ebad7a0e151cf16331791a5727d05f21e74e7eb811440206935d744765a15e79f015cb66c532c87a6a05961c8bfad741a9a6657022894393e7223739796c02a77455d0f555b0ec01ddf259b6207fd0fd57614cef1a5573baaff4ec00069951659b85f24300a25160ca8522dc6e6727e57d019d7e63629b8fe5e89e25cc15beb3a647577559299280b9b28f79b0409000be25bbd96408ba3b43cc486184dd1c8e62553fa1af4040f60663de7f5e49c04388e257f1ce89c95dab48a315d9b66b1b7628233876ff2385230d070d07e1666\n\nVerify = RSA-PSS-10\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = b503319399277fd6c1c8f1033cbf04199ea21716\nOutput = 14ae35d9dd06ba92f7f3b897978aed7cd4bf5ff0b585a40bd46ce1b42cd2703053bb9044d64e813d8f96db2dd7007d10118f6f8f8496097ad75e1ff692341b2892ad55a633a1c55e7f0a0ad59a0e203a5b8278aec54dd8622e2831d87174f8caff43ee6c46445345d84a59659bfb92ecd4c818668695f34706f66828a89959637f2bf3e3251c24bdba4d4b7649da0022218b119c84e79a6527ec5b8a5f861c159952e23ec05e1e717346faefe8b1686825bd2b262fb2531066c0de09acde2e4231690728b5d85e115a2f6b92b79c25abc9bd9399ff8bcf825a52ea1f56ea76dd26f43baafa18bfa92a504cbd35699e26d1dcc5a2887385f3c63232f06f3244c3\n\nVerify = RSA-PSS-10\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = 50aaede8536b2c307208b275a67ae2df196c7628\nOutput = 6e3e4d7b6b15d2fb46013b8900aa5bbb3939cf2c095717987042026ee62c74c54cffd5d7d57efbbf950a0f5c574fa09d3fc1c9f513b05b4ff50dd8df7edfa20102854c35e592180119a70ce5b085182aa02d9ea2aa90d1df03f2daae885ba2f5d05afdac97476f06b93b5bc94a1a80aa9116c4d615f333b098892b25fface266f5db5a5a3bcc10a824ed55aad35b727834fb8c07da28fcf416a5d9b2224f1f8b442b36f91e456fdea2d7cfe3367268de0307a4c74e924159ed33393d5e0655531c77327b89821bdedf880161c78cd4196b5419f7acc3f13e5ebf161b6e7c6724716ca33b85c2e25640192ac2859651d50bde7eb976e51cec828b98b6563b86bb\n\nVerify = RSA-PSS-10\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = aa0b72b8b371ddd10c8ae474425ccccf8842a294\nOutput = 34047ff96c4dc0dc90b2d4ff59a1a361a4754b255d2ee0af7d8bf87c9bc9e7ddeede33934c63ca1c0e3d262cb145ef932a1f2c0a997aa6a34f8eaee7477d82ccf09095a6b8acad38d4eec9fb7eab7ad02da1d11d8e54c1825e55bf58c2a23234b902be124f9e9038a8f68fa45dab72f66e0945bf1d8bacc9044c6f07098c9fcec58a3aab100c805178155f030a124c450e5acbda47d0e4f10b80a23f803e774d023b0015c20b9f9bbe7c91296338d5ecb471cafb032007b67a60be5f69504a9f01abb3cb467b260e2bce860be8d95bf92c0c8e1496ed1e528",
+    "593a4abb6df462dde8a0968dffe4683116857a232f5ebf6c85be238745ad0f38f767a5fdbf486fb\n\nVerify = RSA-PSS-10\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = fad3902c9750622a2bc672622c48270cc57d3ea8\nOutput = 7e0935ea18f4d6c1d17ce82eb2b3836c55b384589ce19dfe743363ac9948d1f346b7bfddfe92efd78adb21faefc89ade42b10f374003fe122e67429a1cb8cbd1f8d9014564c44d120116f4990f1a6e38774c194bd1b8213286b077b0499d2e7b3f434ab12289c556684deed78131934bb3dd6537236f7c6f3dcb09d476be07721e37e1ceed9b2f7b406887bd53157305e1c8b4f84d733bc1e186fe06cc59b6edb8f4bd7ffefdf4f7ba9cfb9d570689b5a1a4109a746a690893db3799255a0cb9215d2d1cd490590e952e8c8786aa0011265252470c041dfbc3eec7c3cbf71c24869d115c0cb4a956f56d530b80ab589acfefc690751ddf36e8d383f83cedd2cc\n\nVerify = RSA-PSS-10\nRSAPadding = PSS\nMGF1Digest = SHA1\nInput = 122196deb5d122bd8c6fc781ff6924d7c695aade\nOutput = 6d3b5b87f67ea657af21f75441977d2180f91b2c5f692de82955696a686730d9b9778d970758ccb26071c2209ffbd6125be2e96ea81b67cb9b9308239fda17f7b2b64ecda096b6b935640a5a1cb42a9155b1c9ef7a633a02c59f0d6ee59b852c43b35029e73c940ff0410e8f114eed46bbd0fae165e42be2528a401c3b28fd818ef3232dca9f4d2a0f5166ec59c42396d6c11dbc1215a56fa17169db9575343ef34f9de32a49cdc3174922f229c23e18e45df9353119ec4319cedce7a17c64088c1f6f52be29634100b3919d38f3d1ed94e6891e66a73b8fb849f5874df59459e298c7bbce2eee782a195aa66fe2d0732b25e595f57d3e061b1fc3e4063bf98f\n\nPrivateKey = RSA-OAEP-1\nType = RSA\nInput = 30820276020100300d06092a864886f70d0101010500048202603082025c02010002818100a8b3b284af8eb50b387034a860f146c4919f318763cd6c5598c8ae4811a1e0abc4c7e0b082d693a5e7fced675cf4668512772c0cbc64a742c6c630f533c8cc72f62ae833c40bf25842e984bb78bdbf97c0107d55bdb662f5c4e0fab9845cb5148ef7392dd3aaff93ae1e6b667bb3d4247616d4f5ba10d4cfd226de88d39f16fb020301000102818053339cfdb79fc8466a655c7316aca85c55fd8f6dd898fdaf119517ef4f52e8fd8e258df93fee180fa0e4ab29693cd83b152a553d4ac4d1812b8b9fa5af0e7f55fe7304df41570926f3311f15c4d65a732c483116ee3d3d2d0af3549ad9bf7cbfb78ad884f84d5beb04724dc7369b31def37d0cf539e9cfcdd3de653729ead5d1024100d32737e7267ffe1341b2d5c0d150a81b586fb3132bed2f8d5262864a9cb9f30af38be448598d413a172efb802c21acf1c11c520c2f26a471dcad212eac7ca39d024100cc8853d1d54da630fac004f471f281c7b8982d8224a490edbeb33d3e3d5cc93c4765703d1dd791642f1f116a0dd852be2419b2af72bfe9a030e860b0288b5d7702400e12bf1718e9cef5599ba1c3882fe8046a90874eefce8f2ccc20e4f2741fb0a33a3848aec9c9305fbecbd2d76819967d4671acc6431e4037968db37878e695c102410095297b0f95a2fa67d00707d609dfd4fc05c89dafc2ef6d6ea55bec771ea333734d9251e79082ecda866efef13c459e1a631386b7e354c899f5f112ca85d7158302404f456c502493bdc0ed2ab756a3a6ed4d67352a697d4216e93212b127a63d5411ce6fa98d5dbefd73263e3728142743818166ed7dd63687dd2a8ca1d2f4fbd8e1\n\nDecrypt = RSA-OAEP-1\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 354fe67b4a126d5d35fe36c777791a3f7ba13def484e2d3908aff722fad468fb21696de95d0be911c2d3174f8afcc201035f7b6d8e69402de5451618c21a535fa9d7bfc5b8dd9fc243f8cf927db31322d6e881eaa91a996170e657a05a266426d98c88003f8477c1227094a0d9fa1e8c4024309ce1ecccb5210035d47ac72e8a\nOutput = 6628194e12073db03ba94cda9ef9532397d50dba79b987004afefe34\n\nDecrypt = RSA-OAEP-1\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 640db1acc58e0568fe5407e5f9b701dff8c3c91e716c536fc7fcec6cb5b71c1165988d4a279e1577d730fc7a29932e3f00c81515236d8d8e31017a7a09df4352d904cdeb79aa583adcc31ea698a4c05283daba9089be5491f67c1a4ee48dc74bbbe6643aef846679b4cb395a352d5ed115912df696ffe0702932946d71492b44\nOutput = 750c4047f547e8e41411856523298ac9bae245efaf1397fbe56f9dd5\n\nDecrypt = RSA-OAEP-1\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 423736ed035f6026af276c35c0b3741b365e5f76ca091b4e8c29e2f0befee603595aa8322d602d2e625e95eb81b2f1c9724e822eca76db8618cf09c5343503a4360835b5903bc637e3879fb05e0ef32685d5aec5067cd7cc96fe4b2670b6eac3066b1fcf5686b68589aafb7d629b02d8f8625ca3833624d4800fb081b1cf94eb\nOutput = d94ae0832e6445ce42331cb06d531a82b1db4baad30f746dc916df24d4e3c2451fff59a6423eb0e1d02d4fe646cf699dfd818c6e97b051\n\nDecrypt = RSA-OAEP-1\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 45ead4ca551e662c9800f1aca8283b0525e6abae30be4b4aba762fa40fd3d38e22abefc69794f6ebbbc05ddbb11216247d2f412fd0fba87c6e3acd888813646fd0e48e785204f9c3f73d6d8239562722dddd8771fec48b83a31ee6f592c4cfd4bc88174f3b13a112aae3b9f7b80e0fc6f7255ba880dc7d8021e22ad6a85f0755\nOutput = 52e650d98e7f2a048b4f86852153b97e01dd316f346a19f67a85\n\nDecrypt = RSA-OAEP-1\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 36f6e34d94a8d34daacba33a2139d00ad85a9345a86051e73071620056b920e219005855a213a0f23897cdcd731b45257c777fe908202befdd0b58386b1244ea0cf539a05d5d10329da44e13030fd760dcd644cfef2094d1910d3f433e1c7c6dd18bc1f2df7f643d662fb9dd37ead9059190f4fa66ca39e869c4eb449cbdc439\nOutput = 8da89fd9e5f974a29feffb462b49180f6cf9e802\n\nDecrypt = RSA-OAEP-1\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 42cee2617b1ecea4db3f4829386fbd61dafbf038e180d837c96366df24c097b4ab0fac6bdf590d821c9f10642e681ad05b8d78b378c0f46ce2fad63f74e0ad3df06b075d7eb5f5636f8d403b9059ca761b5c62bb52aa45002ea70baace08ded243b9d8cbd62a68ade265832b56564e43a6fa42ed199a099769742df1539e8255\nOutput = 26521050844271\n\nPrivateKey = RSA-OAEP-2\nType = RSA\nInput = 30820276020100300d06092a864886f70d0101010500048202603082025c02010002818101947c7fce90425f47279e70851f25d5e62316fe8a1df19371e3e628e260543e4901ef6081f68c0b8141190d2ae8daba7d1250ec6db636e944ec3722877c7c1d0a67f14b1694c5f0379451a43e49a32dde83670b73da91a1c99bc23b436a60055c610f0baf99c1a079565b95a3f1526632d1d4da60f20eda25e653c4f002766f4502030100010281800823f20fadb5da89088a9d00893e21fa4a1b11fbc93c64a3be0baaea97fb3b93c3ff713704c19c963c1d107aae99054739f79e02e186de86f87a6ddefea6d8ccd1d3c81a47bfa7255be20601a4a4b2f08a167b5e279d715b1b455bdd7eab245941d9768b9acefb3ccda5952da3cee72525b4501663a8ee15c9e992d92462fe3902410159dbde04a33ef06fb608b80b190f4d3e22bcc13ac8e4a081033abfa416edb0b338aa08b57309ea5a5240e7dc6e54378c69414c31d97ddb1f406db3769cc41a430241012b652f30403b38b40995fd6ff41a1acc8ada70373236b7202d39b2ee30cfb46db09511f6f307cc61cc21606c18a75b8a62f822df031ba0df0dafd5506f568bd70240436ef508de736519c2da4c580d98c82cb7452a3fb5efadc3b9c7789a1bc6584f795addbbd32439c74686552ecb6c2c307a4d3af7f539eec157248c7b31f1a2550241012b15a89f3dfb2b39073e73f02bdd0c1a7b379dd435f05cdde2eff9e462948b7cec62ee9050d5e0816e0785a856b49108dcb75f3683874d1ca6329a19013066ff02400270db17d5914b018d76118b24389a7350ec836b0063a21721236fd8edb6d89b51e7eeb87b611b7132cb7ea7356c23151c1e7751507c786d9ee1794170a8c8e8\n\nDecrypt = RSA-OAEP-2\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 0181af8922b9fcb4d79d92ebe19815992fc0c1439d8bcd491398a0f4ad3a329a5bd9385560db532683c8b7da04e4b12aed6aacdf471c34c9cda891addcc2df3456653aa6382e9ae59b54455257eb099d562bbe10453f2b6d13c59c02e10f1f8abb5da0d0570932dacf2d0901db729d0fefcc054e70968ea540c81b04bcaefe720e\nOutput = 8ff00caa605c702830634d9a6c3d42c652b58cf1d92fec570beee7\n\nDecrypt = RSA-OAEP-2\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 018759ff1df63b2792410562314416a8aeaf2ac634b46f940ab82d64dbf165eee33011da749d4bab6e2fcd18129c9e49277d8453112b429a222a8471b070993998e758861c4d3f6d749d91c4290d332c7a4ab3f7ea35ff3a07d497c955ff0ffc95006b62c6d296810d9bfab024196c7934012c2df978ef299aba239940cba10245\nOutput = 2d\n\nDecrypt = RSA-OAEP-2\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 018802bab04c60325e81c4962311f2be7c2adce93041a00719c88f957575f2c79f1b7bc8ced115c706b311c08a2d986ca3b6a9336b147c29c6f229409ddec651bd1fdd5a0b7f610c9937fdb4a3a762364b8b3206b4ea485fd098d08f63d4aa8bb2697d027b750c32d7f74eaf5180d2e9b66b17cb2fa55523bc280da10d14be2053\nOutput = 74fc88c51bc90f77af9d5e9a4a70133d4b4e0b34da3c37c7ef8e\n\nDecrypt = RSA-OAEP-2\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 00a4578cbc176318a638fba7d01df15746af44d4f6cd96d7e7c495cbf425b09c649d32bf886da48fbaf989a2117187cafb1fb580317690e3ccd446920b7af82b31db5804d87d01514acbfa9156e782f867f6bed9449e0e9a2c09bcecc6aa087636965e34b3ec766f2fe2e43018a2fddeb140616a0e9d82e5331024ee0652fc7641\nOutput = a7eb2a5036931d27d4e891326d99692ffadda9bf7efd3e34e622c4adc085f721dfe885072c78a203b151739be540fa8c153a10f00a\n\nDecrypt = RSA-OAEP-2\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 00ebc5f5fda77cfdad3c83641a9025e77d72d8a6fb33a810f5950f8d74c73e8d931e8634d86ab1246256ae07b6005b71b7f2fb98351218331ce69b8ffbdc9da08bbc9c704f876deb9df9fc2ec065cad87f9090b07acc17aa7f997b27aca48806e897f771d95141fe4526d8a5301b678627efab707fd40fbebd6e792a25613e7aec\nOutput = 2ef2b066f854c33f3b",
+    "dcbb5994a435e73d6c6c\n\nDecrypt = RSA-OAEP-2\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 010839ec20c27b9052e55befb9b77e6fc26e9075d7a54378c646abdf51e445bd5715de81789f56f1803d9170764a9e93cb78798694023ee7393ce04bc5d8f8c5a52c171d43837e3aca62f609eb0aa5ffb0960ef04198dd754f57f7fbe6abf765cf118b4ca443b23b5aab266f952326ac4581100644325f8b721acd5d04ff14ef3a\nOutput = 8a7fb344c8b6cb2cf2ef1f643f9a3218f6e19bba89c0\n\nPrivateKey = RSA-OAEP-3\nType = RSA\nInput = 30820277020100300d06092a864886f70d0101010500048202613082025d02010002818102b58fec039a860700a4d7b6462f93e6cdd491161ddd74f4e810b40e3c1652006a5c277b2774c11305a4cbab5a78efa57e17a86df7a3fa36fc4b1d2249f22ec7c2dd6a463232accea906d66ebe80b5704b10729da6f833234abb5efdd4a292cbfad33b4d33fa7a14b8c397b56e3acd21203428b77cdfa33a6da706b3d8b0fc43e9020301000102818015b48a5b5683a94670e23b5718f814fa0e13f85038f50711182cba61510581f3d22c7e232ef937e22e551d68b86e2f8cb1aad8be2e488f5df7efd279e3f568d4eaf36f80cf7141ace60fcc9113fb6c4a841fd50bbc7c512ffcbeff21487aa811eb3ca8c62005346a86de86bfa1d8a948fd3f348c22eaadf333c3ce6ce13208fd024101bf01d216d73595cf0270c2beb78d40a0d8447d31da919a983f7eea781b77d85fe371b3e9373e7b69217d3150a02d8958de7fad9d555160958b4454127e0e7eaf0241018d3399658166db3829816d7b295416759e9c91987f5b2d8aecd63b04b48bd7b2fcf229bb7f8a6dc88ba13dd2e39ad55b6d1a06160708f9700be80b8fd3744ce7024006c0a249d20a6f2ee75c88b494d53f6aae99aa427c88c28b163a769445e5f390cf40c274fd6ea6329a5ce7c7ce03a2158396ee2a7845786e09e2885a9728e4e5024100d1d27c29fedd92d86c348edd0ccbfac14f746e051ce1d1811df35d61f2ee1c97d4bf2804802f6427187ba8e90a8af44243b4079b03445e602e29fa5193e64fe90241008cb2f756bd8941b1d3b770e5ad31ee373b28acda69ff9b6f40fe578b9f1afb85836f9627d37acff73c2779e634bb26011c2c8f7f3361ae2a9ea65ed689e3639a\n\nDecrypt = RSA-OAEP-3\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 026a0485d96aebd96b4382085099b962e6a2bdec3d90c8db625e14372de85e2d5b7baab65c8faf91bb5504fb495afce5c988b3f6a52e20e1d6cbd3566c5cd1f2b8318bb542cc0ea25c4aab9932afa20760eaddec784396a07ea0ef24d4e6f4d37e5052a7a31e146aa480a111bbe926401307e00f410033842b6d82fe5ce4dfae80\nOutput = 087820b569e8fa8d\n\nDecrypt = RSA-OAEP-3\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 024db89c7802989be0783847863084941bf209d761987e38f97cb5f6f1bc88da72a50b73ebaf11c879c4f95df37b850b8f65d7622e25b1b889e80fe80baca2069d6e0e1d829953fc459069de98ea9798b451e557e99abf8fe3d9ccf9096ebbf3e5255d3b4e1c6d2ecadf067a359eea86405acd47d5e165517ccafd47d6dbee4bf5\nOutput = 4653acaf171960b01f52a7be63a3ab21dc368ec43b50d82ec3781e04\n\nDecrypt = RSA-OAEP-3\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 0239bce681032441528877d6d1c8bb28aa3bc97f1df584563618995797683844ca86664732f4bed7a0aab083aaabfb7238f582e30958c2024e44e57043b97950fd543da977c90cdde5337d618442f99e60d7783ab59ce6dd9d69c47ad1e962bec22d05895cff8d3f64ed5261d92b2678510393484990ba3f7f06818ae6ffce8a3a\nOutput = d94cd0e08fa404ed89\n\nDecrypt = RSA-OAEP-3\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 02994c62afd76f498ba1fd2cf642857fca81f4373cb08f1cbaee6f025c3b512b42c3e8779113476648039dbe0493f9246292fac28950600e7c0f32edf9c81b9dec45c3bde0cc8d8847590169907b7dc5991ceb29bb0714d613d96df0f12ec5d8d3507c8ee7ae78dd83f216fa61de100363aca48a7e914ae9f42ddfbe943b09d9a0\nOutput = 6cc641b6b61e6f963974dad23a9013284ef1\n\nDecrypt = RSA-OAEP-3\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 0162042ff6969592a6167031811a239834ce638abf54fec8b99478122afe2ee67f8c5b18b0339805bfdbc5a4e6720b37c59cfba942464c597ff532a119821545fd2e59b114e61daf71820529f5029cf524954327c34ec5e6f5ba7efcc4de943ab8ad4ed787b1454329f70db798a3a8f4d92f8274e2b2948ade627ce8ee33e43c60\nOutput = df5151832b61f4f25891fb4172f328d2eddf8371ffcfdbe997939295f30eca6918017cfda1153bf7a6af87593223\n\nDecrypt = RSA-OAEP-3\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 00112051e75d064943bc4478075e43482fd59cee0679de6893eec3a943daa490b9691c93dfc0464b6623b9f3dbd3e70083264f034b374f74164e1a00763725e574744ba0b9db83434f31df96f6e2a26f6d8eba348bd4686c2238ac07c37aac3785d1c7eea2f819fd91491798ed8e9cef5e43b781b0e0276e37c43ff9492d005730\nOutput = 3c3bad893c544a6d520ab022319188c8d504b7a788b850903b85972eaa18552e1134a7ad6098826254ff7ab672b3d8eb3158fac6d4cbaef1\n\nPrivateKey = RSA-OAEP-4\nType = RSA\nInput = 30820277020100300d06092a864886f70d0101010500048202613082025d020100028181051240b6cc0004fa48d0134671c078c7c8dec3b3e2f25bc2564467339db38853d06b85eea5b2de353bff42ac2e46bc97fae6ac9618da9537a5c8f553c1e357625991d6108dcd7885fb3a25413f53efcad948cb35cd9b9ae9c1c67626d113d57dde4c5bea76bb5bb7de96c00d07372e9685a6d75cf9d239fa148d70931b5f3fb03902030100010281800411ffca3b7ca5e9e9be7fe38a85105e353896db05c5796aecd2a725161eb3651c8629a9b862b904d7b0c7b37f8cb5a1c2b54001018a00a1eb2cafe4ee4e9492c348bc2bedab4b9ebbf064e8eff322b9009f8eec653905f40df88a3cdc49d4567f75627d41aca624129b46a0b7c698e5e65f2b7ba102c749a10135b6540d04010241027458c19ec1636919e736c9af25d609a51b8f561d19c6bf6943dd1ee1ab8a4a3f232100bd40b88decc6ba235548b6ef792a11c9de823d0a7922c7095b6eba570102410210ee9b33ab61716e27d251bd465f4b35a1a232e2da00901c294bf22350ce490d099f642b5375612db63ba1f20386492bf04d34b3c22bceb909d13441b53b5139024039fa028b826e88c1121b750a8b242fa9a35c5b66bdfd1fa637d3cc48a84a4f457a194e7727e49f7bcc6e5a5a412657fc470c7322ebc37416ef458c307a8c09010241015d99a84195943979fa9e1be2c3c1b69f432f46fd03e47d5befbbbfd6b1d1371d83efb330a3e020942b2fed115e5d02be24fd92c9019d1cecd6dd4cf1e54cc899024101f0b7015170b3f5e42223ba30301c41a6d87cbb70e30cb7d3c67d25473db1f6cbf03e3f9126e3e97968279a865b2c2b426524cfc52a683d31ed30eb984be412ba\n\nDecrypt = RSA-OAEP-4\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 04cce19614845e094152a3fe18e54e3330c44e5efbc64ae16886cb1869014cc5781b1f8f9e045384d0112a135ca0d12e9c88a8e4063416deaae3844f60d6e96fe155145f4525b9a34431ca3766180f70e15a5e5d8e8b1a516ff870609f13f896935ced188279a58ed13d07114277d75c6568607e0ab092fd803a223e4a8ee0b1a8\nOutput = 4a86609534ee434a6cbca3f7e962e76d455e3264c19f605f6e5ff6137c65c56d7fb344cd52bc93374f3d166c9f0c6f9c506bad19330972d2\n\nDecrypt = RSA-OAEP-4\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 0097b698c6165645b303486fbf5a2a4479c0ee85889b541a6f0b858d6b6597b13b854eb4f839af03399a80d79bda6578c841f90d645715b280d37143992dd186c80b949b775cae97370e4ec97443136c6da484e970ffdb1323a20847821d3b18381de13bb49aaea66530c4a4b8271f3eae172cd366e07e6636f1019d2a28aed15e\nOutput = b0adc4f3fe11da59ce992773d9059943c03046497ee9d9f9a06df1166db46d98f58d27ec074c02eee6cbe2449c8b9fc5080c5c3f4433092512ec46aa793743c8\n\nDecrypt = RSA-OAEP-4\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 0301f935e9c47abcb48acbbe09895d9f5971af14839da4ff95417ee453d1fd77319072bb7297e1b55d7561cd9d1bb24c1a9a37c619864308242804879d86ebd001dce5183975e1506989b70e5a83434154d5cbfd6a24787e60eb0c658d2ac193302d1192c6e622d4a12ad4b53923bca246df31c6395e37702c6a78ae081fb9d065\nOutput = bf6d42e701707b1d0206b0c8b45a1c72641ff12889219a82bdea965b5e79a96b0d0163ed9d578ec9ada20f2fbcf1ea3c4089d83419ba81b0c60f3606da99\n\nDecrypt = RSA-OAEP-4\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 02d110ad30afb727beb691dd0cf17d0af1a1e7fa0cc040ec1a4ba26a42c59d0a796a2e22c8f357ccc98b6519aceb682e945e62cb734614a529407cd452bee3e44fece8423cc19e55548b8b994b849c7ecde4933e76037e1d0ce44275b08710c68e430130b929730ed77e09b015642c5593f04e4ffb9410798102a8e96ffdfe11e4\nOutput = fb2ef112f5e766eb94019297934794f7be2f6fc1c58e\n\nDecrypt = RSA-OAEP-4\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 00dbb8a7439d90efd919a377c54fae8fe11ec58c3b858362e23ad1b8a44310799066b99347aa525691d2adc58d9b06e34f288c170390c5f0e11c0aa3645959f18ee79e8f2be8d7ac5c23d061f18dd74b8c5f2a58fcb5eb0c54f99f01a83247568292536583340948d7a8c97c4acd1e98d1e29dc320e97a260532a8aa7a758a1ec2\nOutput = 28ccd447bb9e85166dabb9e5b7d1adadc4b9d39f204e96d5e440ce9ad928bc1c2284\n\nDecrypt = RSA-OAEP-4\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 00a5ffa4768c8bbecaee2db77e8f2eec99595933545520835e5ba7db9493d3e17cddefe6a5f567624471908db4e2d83a0fbee60608fc84049503b2234a07dc83b27b22847ad8920ff42f674ef79b76280b00233d2b51b8cb2703a9d42bfbc8250c96ec32c051e57f1b4ba528db89c37e4c54e27e6e64ac69635ae887d9541619a9\nOutput = f22242751ec6b1\n\nPrivateKey = RSA-OAEP-5\nType = RSA\nInput = 30820279020100300d06092a864886f70d0101010500048202633082025f0201000281810aadf3f9c125e5d891f31ac448e993defe580f802b45f9d7f22ba5021e9c47576b5a1e68031ba9db4e6dabe4d96a1d6f3d267268cff408005f118efcadb99888d1c234467166b2a2b849a05a889c060ac0da0c5fae8b55f309ba62e703742fa0326f2d10b01102",
+    "1489ff497770190d895fd39f52293c39efd73a698bdab9f10ed902030100010281810256eb4cba7067f2d2be540dcdff4582a36b7d31d1c9099bb214b79848466a268f80f58a49ac04c0e3648934a0206c04537c19b236643a6082732144df75fa217588f794682be89168276dc726c5c0cbdb84d31bbf26d0a43af495717f7d528acfee341561f6ff3cae05c578f8470d9682f9c0d072f9f6068b56d5880f682be2c5024103b0d3962f6d17549cbfca11294348dcf0e7e39f8c2bc6824f2164b606d687860dae1e632393cfedf513228229069e2f60e4acd7e633a436063f82385f48993707024102e4c32e2f517269b7072309f00c0e31365f7ce28b236b82912df239abf39572cf0ed604b02982e53564c52d6a05397de5c052a2fddc141ef7189836346aeb331f024101e84b119d25161fa67b00256a5bd9b645d2b232ecb05b015180029a88622adc3f09b3aeacde6161ab7cde22c2ad26e7797df54e072cbd3b2673800b3e4338dbd5024100eb90aa1a40135b4cea07197cedc8819be1e7cbff2547662116f465a4a9f487ab12f3ba4fef13822265a65297d98b7bded9372e3ffe81a38b3e9600fed055754f0241012f7f8138f9404062eb85a42924520b38f5bb886a0196f48bb8dcea60fd92cc027f18e78158a34a5c5d5f860a0f6c04071a7d01312c065062f1eb48b79d1c83cb\n\nDecrypt = RSA-OAEP-5\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 036046a4a47d9ed3ba9a89139c105038eb7492b05a5d68bfd53accff4597f7a68651b47b4a4627d927e485eed7b4566420e8b409879e5d606eae251d22a5df799f7920bfc117b992572a53b1263146bcea03385cc5e853c9a101c8c3e1bda31a519807496c6cb5e5efb408823a352b8fa0661fb664efadd593deb99fff5ed000e5\nOutput = af71a901e3a61d3132f0fc1fdb474f9ea6579257ffc24d164170145b3dbde8\n\nDecrypt = RSA-OAEP-5\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 03d6eb654edce615bc59f455265ed4e5a18223cbb9be4e4069b473804d5de96f54dcaaa603d049c5d94aa1470dfcd2254066b7c7b61ff1f6f6770e3215c51399fd4e34ec5082bc48f089840ad04354ae66dc0f1bd18e461a33cc1258b443a2837a6df26759aa2302334986f87380c9cc9d53be9f99605d2c9a97da7b0915a4a7ad\nOutput = a3b844a08239a8ac41605af17a6cfda4d350136585903a417a79268760519a4b4ac3303ec73f0f87cfb32399\n\nDecrypt = RSA-OAEP-5\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 0770952181649f9f9f07ff626ff3a22c35c462443d905d456a9fd0bff43cac2ca7a9f554e9478b9acc3ac838b02040ffd3e1847de2e4253929f9dd9ee4044325a9b05cabb808b2ee840d34e15d105a3f1f7b27695a1a07a2d73fe08ecaaa3c9c9d4d5a89ff890d54727d7ae40c0ec1a8dd86165d8ee2c6368141016a48b55b6967\nOutput = 308b0ecbd2c76cb77fc6f70c5edd233fd2f20929d629f026953bb62a8f4a3a314bde195de85b5f816da2aab074d26cb6acddf323ae3b9c678ac3cf12fbdde7\n\nDecrypt = RSA-OAEP-5\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 0812b76768ebcb642d040258e5f4441a018521bd96687e6c5e899fcd6c17588ff59a82cc8ae03a4b45b31299af1788c329f7dcd285f8cf4ced82606b97612671a45bedca133442144d1617d114f802857f0f9d739751c57a3f9ee400912c61e2e6992be031a43dd48fa6ba14eef7c422b5edc4e7afa04fdd38f402d1c8bb719abf\nOutput = 15c5b9ee1185\n\nDecrypt = RSA-OAEP-5\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 07b60e14ec954bfd29e60d0047e789f51d57186c63589903306793ced3f68241c743529aba6a6374f92e19e0163efa33697e196f7661dfaaa47aac6bde5e51deb507c72c589a2ca1693d96b1460381249b2cdb9eac44769f2489c5d3d2f99f0ee3c7ee5bf64a5ac79c42bd433f149be8cb59548361640595513c97af7bc2509723\nOutput = 21026e6800c7fa728fcaaba0d196ae28d7a2ac4ffd8abce794f0985f60c8a6737277365d3fea11db8923a2029a\n\nDecrypt = RSA-OAEP-5\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 08c36d4dda33423b2ed6830d85f6411ba1dcf470a1fae0ebefee7c089f256cef74cb96ea69c38f60f39abee44129bcb4c92de7f797623b20074e3d9c2899701ed9071e1efa0bdd84d4c3e5130302d8f0240baba4b84a71cc032f2235a5ff0fae277c3e8f9112bef44c9ae20d175fc9a4058bfc930ba31b02e2e4f444483710f24a\nOutput = 541e37b68b6c8872b84c02\n\nPrivateKey = RSA-OAEP-6\nType = RSA\nInput = 30820279020100300d06092a864886f70d0101010500048202633082025f02010002818112b17f6dad2ecd19ff46dc13f7860f09e0e0cfb677b38a52592305ceaf022c166db90d04ac29e33f7dd12d9faf66e0816bb63ead267cc7d46c17c37be214bca2a22d723a64e44407436b6fc965729aefc2554f376cd5dcea68293780a62bf39d0029485a160bbb9e5dc0972d21a504f52e5ee028aa416332f510b2e9cff5f722af02030100010281810295eca3560618369559cecd303aa9cfdafc1d9f06959df75ffef929aa896961bcd190dc6997eda7f5963e724d07b4dc11f3065e5ae97d96835112280b9084bb14f2a21ebd4e889d41b9c4132ec1956fcab8bb2fed0575884936522c5ff7d33261904824e7cadee4e0bb372d2457cf78e2bd1286228ff83f10731ce63c90cff3f9024104a6ce8b7358dfa69bdcf742617005afb5385f5f3a58a24ef74a22a8c05cb7cc38ebd4cc9d9a9d789a62cd0f60f0cb941d3423c9692efa4fe3adff290c4749a38b02410404c9a803371fedb4c5be39f3c00b009e5e08a63be1e40035cdaca5011cc701cf7eebcb99f0ffe17cfd0a4bf7befd2dd536ac946db797fdbc4abe8f29349b91ed024103961c8f760aa2bd5154c7aafd77225b3bacd0139ae7b5948ea3311fccd86fb95c75afa767284b9b2de559572f15d8d044c7eb83a1be5fadf2cc377c0d8475294b0241022197e066742196aabc03fa2feeb4e70b15cb787d617acd31bb75c7bc234ad706f7c48d2182d1f0ff9c228dcf41967b6c0ba6d2c0ad110a1b857831ec245e2cb102410401c4c0c53d45dbdb5e9d96d0fecf4275df0974bc4a0736b4a74c3269053efb686ace2406e22c9e058ddb4ae540627ae2fdb08261e8e7e4bcbc994daafa305c45\n\nDecrypt = RSA-OAEP-6\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 0630eebcd2856c24f798806e41f9e67345eda9ceda386acc9facaea1eeed06ace583709718d9d169fadf414d5c76f92996833ef305b75b1e4b95f662a20faedc3bae0c4827a8bf8a88edbd57ec203a27a841f02e43a615bab1a8cac0701de34debdef62a088089b55ec36ea7522fd3ec8d06b6a073e6df833153bc0aefd93bd1a3\nOutput = 4046ca8baa3347ca27f49e0d81f9cc1d71be9ba517d4\n\nDecrypt = RSA-OAEP-6\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 0ebc37376173a4fd2f89cc55c2ca62b26b11d51c3c7ce49e8845f74e7607317c436bc8d23b9667dfeb9d087234b47bc6837175ae5c0559f6b81d7d22416d3e50f4ac533d8f0812f2db9e791fe9c775ac8b6ad0f535ad9ceb23a4a02014c58ab3f8d3161499a260f39348e714ae2a1d3443208fd8b722ccfdfb393e98011f99e63f\nOutput = 5cc72c60231df03b3d40f9b57931bc31109f972527f28b19e7480c7288cb3c92b22512214e4be6c914792ddabdf57faa8aa7\n\nDecrypt = RSA-OAEP-6\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 0a98bf1093619394436cf68d8f38e2f158fde8ea54f3435f239b8d06b8321844202476aeed96009492480ce3a8d705498c4c8c68f01501dc81db608f60087350c8c3b0bd2e9ef6a81458b7c801b89f2e4fe99d4900ba6a4b5e5a96d865dc676c7755928794130d6280a8160a190f2df3ea7cf9aa0271d88e9e6905ecf1c5152d65\nOutput = b20e651303092f4bccb43070c0f86d23049362ed96642fc5632c27db4a52e3d831f2ab068b23b149879c002f6bf3feee97591112562c\n\nDecrypt = RSA-OAEP-6\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 008e7a67cacfb5c4e24bec7dee149117f19598ce8c45808fef88c608ff9cd6e695263b9a3c0ad4b8ba4c95238e96a8422b8535629c8d5382374479ad13fa39974b242f9a759eeaf9c83ad5a8ca18940a0162ba755876df263f4bd50c6525c56090267c1f0e09ce0899a0cf359e88120abd9bf893445b3cae77d3607359ae9a52f8\nOutput = 684e3038c5c041f7\n\nDecrypt = RSA-OAEP-6\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 00003474416c7b68bdf961c385737944d7f1f40cb395343c693cc0b4fe63b31fedf1eaeeac9ccc0678b31dc32e0977489514c4f09085f6298a9653f01aea4045ff582ee887be26ae575b73eef7f3774921e375a3d19adda0ca31aa1849887c1f42cac9677f7a2f4e923f6e5a868b38c084ef187594dc9f7f048fea2e02955384ab\nOutput = 32488cb262d041d6e4dd35f987bf3ca696db1f06ac29a44693\n\nDecrypt = RSA-OAEP-6\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 0a026dda5fc8785f7bd9bf75327b63e85e2c0fdee5dadb65ebdcac9ae1de95c92c672ab433aa7a8e69ce6a6d8897fac4ac4a54de841ae5e5bbce7687879d79634cea7a30684065c714d52409b928256bbf53eabcd5231eb7259504537399bd29164b726d33a46da701360a4168a091ccab72d44a62fed246c0ffea5b1348ab5470\nOutput = 50ba14be8462720279c306ba\n\nPrivateKey = RSA-OAEP-7\nType = RSA\nInput = 30820278020100300d06092a864886f70d0101010500048202623082025e020100028181311179f0bcfc9b9d3ca315d00ef30d7bdd3a2cfae9911bfedcb948b3a4782d0732b6ab44aa4bf03741a644dc01bec3e69b01a033e675d8acd7c4925c6b1aec3119051dfd89762d215d45475ffcb59f908148623f37177156f6ae86dd7a7c5f43dc1e1f908254058a284a5f06c0021793a87f1ac5feff7dcaee69c5e51a3789e3730203010001028181070cfcff2feb8276e27432c45dfee48f49b7917d6530e1f0ca3460f32e0276174487c56e22a45d2500d7775495219d7d165a9cf3bd92c32af9a98d8dc9cc296800adc94a0a54fb40f34291bf84ee8ea12b6f109359c6d3542a50f9c767f5cfff05a681c2e656fb77caaadb4be9468d8abcd4df98f58e86d2053fa1349f748e21b102410749262c111cd470ec2566e6b3732fc09329469aa19071d3b9c01906514c6f1d26baa14beab0971c8b7e611a4f79009d6fea776928ca25285b0de3643d1a3f8c71024106bc1e50e96c02bf636e9eea8b899bbebf7651de77dd474c3e9bc23bad8182b61904c7d97dfbebfb1e00108878b6e67e415391d67942c2b2bf9b4435f88b0cb023024103bc7ea7f0aab143abc6ce8b97118636a30172e4cfe02c8fa0dda3b7baaf90f8092982985525f488bdfcb4bd726e22639ac64a3092ab7ffcbf1d5334cfa50b5bf102410262a6aa29c2a3c67dc5346c06381afd987aa3cc93cfbfecf54fdd9f9d78",
+    "7d7f59a523d398979da137a2f6381fe94801f7c94da21518dc34cb40870c4697994ad90240649d4c17b6ee1721e772d0389a559c3d3cdf9550d457c46b037b74641b1d52166af8a213c8396206cdfba4422f18d6f61dbcb5d214c971bf482aeb976a7370c2\n\nDecrypt = RSA-OAEP-7\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 1688e4ce7794bba6cb7014169ecd559cede2a30b56a52b68d9fe18cf1973ef97b2a03153951c755f6294aa49adbdb55845ab6875fb3986c93ecf927962840d282f9e54ce8b690f7c0cb8bbd73440d9571d1b16cd9260f9eab4783cc482e5223dc60973871783ec27b0ae0fd47732cbc286a173fc92b00fb4ba6824647cd93c85c1\nOutput = 47aae909\n\nDecrypt = RSA-OAEP-7\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 1052ed397b2e01e1d0ee1c50bf24363f95e504f4a03434a08fd822574ed6b9736edbb5f390db10321479a8a139350e2bd4977c3778ef331f3e78ae118b268451f20a2f01d471f5d53c566937171b2dbc2d4bde459a5799f0372d6574239b2323d245d0bb81c286b63c89a361017337e4902f88a467f4c7f244bfd5ab46437ff3b6\nOutput = 1d9b2e2223d9bc13bfb9f162ce735db48ba7c68f6822a0a1a7b6ae165834e7\n\nDecrypt = RSA-OAEP-7\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 2155cd843ff24a4ee8badb7694260028a490813ba8b369a4cbf106ec148e5298707f5965be7d101c1049ea8584c24cd63455ad9c104d686282d3fb803a4c11c1c2e9b91c7178801d1b6640f003f5728df007b8a4ccc92bce05e41a27278d7c85018c52414313a5077789001d4f01910b72aad05d220aa14a58733a7489bc54556b\nOutput = d976fc\n\nDecrypt = RSA-OAEP-7\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 0ab14c373aeb7d4328d0aaad8c094d88b9eb098b95f21054a29082522be7c27a312878b637917e3d819e6c3c568db5d843802b06d51d9e98a2be0bf40c031423b00edfbff8320efb9171bd2044653a4cb9c5122f6c65e83cda2ec3c126027a9c1a56ba874d0fea23f380b82cf240b8cf540004758c4c77d934157a74f3fc12bfac\nOutput = d4738623df223aa43843df8467534c41d013e0c803c624e263666b239bde40a5f29aeb8de79e3daa61dd0370f49bd4b013834b98212aef6b1c5ee373b3cb\n\nDecrypt = RSA-OAEP-7\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 028387a318277434798b4d97f460068df5298faba5041ba11761a1cb7316b24184114ec500257e2589ed3b607a1ebbe97a6cc2e02bf1b681f42312a33b7a77d8e7855c4a6de03e3c04643f786b91a264a0d6805e2cea91e68177eb7a64d9255e4f27e713b7ccec00dc200ebd21c2ea2bb890feae4942df941dc3f97890ed347478\nOutput = bb47231ca5ea1d3ad46c99345d9a8a61\n\nDecrypt = RSA-OAEP-7\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 14c678a94ad60525ef39e959b2f3ba5c097a94ff912b67dbace80535c187abd47d075420b1872152bba08f7fc31f313bbf9273c912fc4c0149a9b0cfb79807e346eb332069611bec0ff9bcd168f1f7c33e77313cea454b94e2549eecf002e2acf7f6f2d2845d4fe0aab2e5a92ddf68c480ae11247935d1f62574842216ae674115\nOutput = 2184827095d35c3f86f600e8e59754013296\n\nPrivateKey = RSA-OAEP-8\nType = RSA\nInput = 30820279020100300d06092a864886f70d0101010500048202633082025f0201000281815bdf0e30d321dda5147f882408fa69195480df8f80d3f6e8bf5818504f36427ca9b1f5540b9c65a8f6974cf8447a244d9280201bb49fcbbe6378d1944cd227e230f96e3d10f819dcef276c64a00b2a4b6701e7d01de5fabde3b1e9a0df82f4631359cd22669647fbb1717246134ed7b497cfffbdc42b59c73a96ed90166212dff702030100010281810f7d1e9e5aaa25fd13e4a0663ae144e0d15f5cd18bcdb09df2cc7e64e3c5e915ad62645304161d098c715bb7ab8bd01d07eaf3fed7c7ed08af2a8a62ef44ab16b320e14af72a48f96afe262a0ae4cf65e635e910790cd4ee5cea768a4b2639f7e6f677b3f0bb6be32b75747d8909036f0264f58d401cdba131716157a75ecf633102410a02ef8448d9fad8bbd0d004c8c2aa9751ef9721c1b0d03236a54b0df947cbaed5a255ee9e8e20d491ea1723fe094704a9762e88afd16ebb5994412ca966dc4f9f0241092d362e7ed3a0bfd9e9fd0e6c0301b6df29159cf50cc83b9b0cf4d6eea71a61e002b46e0ae9f2de62d25b5d7452d498b81c9ac6fc58593d4c3fb4f5d72dfbb0a9024107c71410af103962db367404e37ae850baa4e9c29dd92145815294a67c7d1c6ded263aa030a9b633ae50303e14035d1af014123eba687820308d8ebc85b6957d7d024100ae2c75380c02c016ad05891b3301de881f28ae1171182b6b2c83bea7c515eca9ca298c7b1cab5817a597068fc85060de4da8a016378aae43c7f967bcc37904b902410598d1059e3ada4f6320752c09d805ff7d1f1ae0d017aeeee9cefa0d7dd7ff775e44b578322f6405d6211da19519666aa87fdc4cd8c88f6b6e3d67e961dcbba3d0\n\nDecrypt = RSA-OAEP-8\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 09b3683d8a2eb0fb295b62ed1fb9290b714457b7825319f4647872af889b30409472020ad12912bf19b11d4819f49614824ffd84d09c0a17e7d17309d12919790410aa2995699f6a86dbe3242b5acc23af45691080d6b1ae810fb3e3057087f0970092ce00be9562ff4053b6262ce0caa93e13723d2e3a5ba075d45f0d61b54b61\nOutput = 050b755e5e6880f7b9e9d692a74c37aae449b31bfea6deff83747a897f6c2c825bb1adbf850a3c96994b5de5b33cbc7d4a17913a7967\n\nDecrypt = RSA-OAEP-8\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 2ecf15c97c5a15b1476ae986b371b57a24284f4a162a8d0c8182e7905e792256f1812ba5f83f1f7a130e42dcc02232844edc14a31a68ee97ae564a383a3411656424c5f62ddb646093c367be1fcda426cf00a06d8acb7e57776fbbd855ac3df506fc16b1d7c3f2110f3d8068e91e186363831c8409680d8da9ecd8cf1fa20ee39d\nOutput = 4eb68dcd93ca9b19df111bd43608f557026fe4aa1d5cfac227a3eb5ab9548c18a06dded23f81825986b2fcd71109ecef7eff88873f075c2aa0c469f69c92bc\n\nDecrypt = RSA-OAEP-8\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 4bc89130a5b2dabb7c2fcf90eb5d0eaf9e681b7146a38f3173a3d9cfec52ea9e0a41932e648a9d69344c50da763f51a03c95762131e8052254dcd2248cba40fd31667786ce05a2b7b531ac9dac9ed584a59b677c1a8aed8c5d15d68c05569e2be780bf7db638fd2bfd2a85ab276860f3777338fca989ffd743d13ee08e0ca9893f\nOutput = 8604ac56328c1ab5ad917861\n\nDecrypt = RSA-OAEP-8\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 2e456847d8fc36ff0147d6993594b9397227d577752c79d0f904fcb039d4d812fea605a7b574dd82ca786f93752348438ee9f5b5454985d5f0e1699e3e7ad175a32e15f03deb042ab9fe1dd9db1bb86f8c089ccb45e7ef0c5ee7ca9b7290ca6b15bed47039788a8a93ff83e0e8d6244c71006362deef69b6f416fb3c684383fbd0\nOutput = fdda5fbf6ec361a9d9a4ac68af216a0686f438b1e0e5c36b955f74e107f39c0dddcc\n\nDecrypt = RSA-OAEP-8\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 1fb9356fd5c4b1796db2ebf7d0d393cc810adf6145defc2fce714f79d93800d5e2ac211ea8bbecca4b654b94c3b18b30dd576ce34dc95436ef57a09415645923359a5d7b4171ef22c24670f1b229d3603e91f76671b7df97e7317c97734476d5f3d17d21cf82b5ba9f83df2e588d36984fd1b584468bd23b2e875f32f68953f7b2\nOutput = 4a5f4914bee25de3c69341de07\n\nDecrypt = RSA-OAEP-8\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 3afd9c6600147b21798d818c655a0f4c9212db26d0b0dfdc2a7594ccb3d22f5bf1d7c3e112cd73fc7d509c7a8bafdd3c274d1399009f9609ec4be6477e453f075aa33db382870c1c3409aef392d7386ae3a696b99a94b4da0589447e955d16c98b17602a59bd736279fcd8fb280c4462d590bfa9bf13fed570eafde97330a2c210\nOutput = 8e07d66f7b880a72563abcd3f35092bc33409fb7f88f2472be\n\nPrivateKey = RSA-OAEP-9\nType = RSA\nInput = 30820397020100300d06092a864886f70d0101010500048203813082037d0201000281c100cf2cd41e34ca3a728ea5cb8aff64c36d27bdef5364e336fd68d3123c5a196a8c287013e853d5156d58d151954520fb4f6d7b17abb6817765909c576119659d902b1906ed8a2b10c155c24d124528dab9eeae379beac66e4a411786dcb8fd0062ebc030de1219a04c2a8c1b7dd3131e4d6b6caee2e31a5ed41ac1509b2ef1ee2ab18364be568ca941c25ecc84ff9d643b5ec1aaae102a20d73f479b780fd6da91075212d9eac03a0674d899eba2e431f4c44b615b6ba2232bd4b33baed73d625d02030100010281c0198c141e23715a92bccf6a119a5bc11389468d2811f548d727e17b4ab0eb986d6f211efb53b71f7ccbea87ee69c75ee615008c5332deb52bf390abdfbfe37d7205368159b2638c1de326e21d22251f0fb5848b3bf15005d2a74330f0afe916ee62ccc1344d1d83a709e60676273840f7f377424a5e0a4da75f01b31ff76819cf9cbfdd215243c3917c03ef38199312e567b3bf7aed3ab457f371ef8a1423f45b68c6e282ec111bba2833b987fd69fad83bc1b8c613c5e1ea16c11ed125ea7ec1026100fc8d6c04bec4eb9a8192ca7900cbe536e2e8b519decf33b2459798c6909df4f176db7d23190fc72b8865a718af895f1bcd9145298027423b605e70a47cf58390a8c3e88fc8c48e8b32e3da210dfbe3e881ea5674b6a348c21e93f9e55ea65efd026100d200d45e788aacea606a401d0460f87dd5c1027e12dc1a0d7586e8939d9cf789b40f51ac0442961de7d21cc21e05c83155c1f2aa9193387cfdf956cb48d153ba270406f9bbba537d4987d9e2f9942d7a14cbfffea74fecdda928d23e259f5ee1026100db16802f79a2f0d45f358d69fd33e44b81fae828622e93a54253e997d01b0743759da0e812b4aa4e6c8beab2328d5431955a418a67ff26a8c5c807a5da354e05ef31cc8cf758f463732950b03e265726fb94e39d6a572a26244ab08db75752ad026100a0a317cfe7df1423f87a6dee8451f4e2b4a67e5497f29b4f1e4e830b9fadd9401167026f5596e5a39c97817e0f5f16e27e19ec9902e01d7ea6fb9aa3c760afee1e381b69de6ac9c07585a06ad9c4ba00bf75c8ad2fa898a479e80ae294fed2a102600b21f335c353342eb44c3aa24445780c2d655b940174cae38c7c8a4e6493c0ba9fd303748267b083b9a7a6cb61e42db362b8c9896db7064e02ad5ae61587da15b4649c90594909feb37dbcb654beb7268ec801e5a8b4aa3911bebd88542f05be\n\nDecrypt = RSA-OAEP-9\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 267bcd118acab1fc8ba81c8",
+    "5d73003cb8610fa55c1d97da8d48a7c7f06896a4db751aa284255b9d36ad65f37653d829f1b37f97b8001942545b2fc2c55a7376ca7a1be4b1760c8e05a33e5aa2526b8d98e317088e7834c755b2a59b12631a182c05d5d43ab1779264f8456f515ce57dfdf512d5493dab7b7338dc4b7d78db9c091ac3baf537a69fc7f549d979f0eff9a94fda4169bd4d1d19a69c99e33c3b55490d501b39b1edae118ff6793a153261584d3a5f39f6e682e3d17c8cd1261fa72\nOutput = f735fd55ba92592c3b52b8f9c4f69aaa1cbef8fe88add095595412467f9cf4ec0b896c59eda16210e7549c8abb10cdbc21a12ec9b6b5b8fd2f10399eb6\n\nDecrypt = RSA-OAEP-9\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 93ac9f0671ec29acbb444effc1a5741351d60fdb0e393fbf754acf0de49761a14841df7772e9bc82773966a1584c4d72baea00118f83f35cca6e537cbd4d811f5583b29783d8a6d94cd31be70d6f526c10ff09c6fa7ce069795a3fcd0511fd5fcb564bcc80ea9c78f38b80012539d8a4ddf6fe81e9cddb7f50dbbbbcc7e5d86097ccf4ec49189fb8bf318be6d5a0715d516b49af191258cd32dc833ce6eb4673c03a19bbace88cc54895f636cc0c1ec89096d11ce235a265ca1764232a689ae8\nOutput = 81b906605015a63aabe42ddf11e1978912f5404c7474b26dce3ed482bf961ecc818bf420c54659\n\nDecrypt = RSA-OAEP-9\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 81ebdd95054b0c822ef9ad7693f5a87adfb4b4c4ce70df2df84ed49c04da58ba5fc20a19e1a6e8b7a3900b22796dc4e869ee6b42792d15a8eceb56c09c69914e813cea8f6931e4b8ed6f421af298d595c97f4789c7caa612c7ef360984c21b93edc5401068b5af4c78a8771b984d53b8ea8adf2f6a7d4a0ba76c75e1dd9f658f20ded4a46071d46d7791b56803d8fea7f0b0f8e41ae3f09383a6f9585fe7753eaaffd2bf94563108beecc207bbb535f5fcc705f0dde9f708c62f49a9c90371d3\nOutput = fd326429df9b890e09b54b18b8f34f1e24\n\nDecrypt = RSA-OAEP-9\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = bcc35f94cde66cb1136625d625b94432a35b22f3d2fa11a613ff0fca5bd57f87b902ccdc1cd0aebcb0715ee869d1d1fe395f6793003f5eca465059c88660d446ff5f0818552022557e38c08a67ead991262254f10682975ec56397768537f4977af6d5f6aaceb7fb25dec5937230231fd8978af49119a29f29e424ab8272b47562792d5c94f774b8829d0b0d9f1a8c9eddf37574d5fa248eefa9c5271fc5ec2579c81bdd61b410fa61fe36e424221c113addb275664c801d34ca8c6351e4a858\nOutput = f1459b5f0c92f01a0f723a2e5662484d8f8c0a20fc29dad6acd43bb5f3effdf4e1b63e07fdfe6628d0d74ca19bf2d69e4a0abf86d293925a796772f8088e\n\nDecrypt = RSA-OAEP-9\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 232afbc927fa08c2f6a27b87d4a5cb09c07dc26fae73d73a90558839f4fd66d281b87ec734bce237ba166698ed829106a7de6942cd6cdce78fed8d2e4d81428e66490d036264cef92af941d3e35055fe3981e14d29cbb9a4f67473063baec79a1179f5a17c9c1832f2838fd7d5e59bb9659d56dce8a019edef1bb3accc697cc6cc7a778f60a064c7f6f5d529c6210262e003de583e81e3167b89971fb8c0e15d44fffef89b53d8d64dd797d159b56d2b08ea5307ea12c241bd58d4ee278a1f2e\nOutput = 53e6e8c729d6f9c319dd317e74b0db8e4ccca25f3c8305746e137ac63a63ef3739e7b595abb96e8d55e54f7bd41ab433378ffb911d\n\nDecrypt = RSA-OAEP-9\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 438cc7dc08a68da249e42505f8573ba60e2c2773d5b290f4cf9dff718e842081c383e67024a0f29594ea987b9d25e4b738f285970d195abb3a8c8054e3d79d6b9c9a8327ba596f1259e27126674766907d8d582ff3a8476154929adb1e6d1235b2ccb4ec8f663ba9cc670a92bebd853c8dbf69c6436d016f61add836e94732450434207f9fd4c43dec2a12a958efa01efe2669899b5e604c255c55fb7166de5589e369597bb09168c06dd5db177e06a1740eb2d5c82faeca6d92fcee9931ba9f\nOutput = b6b28ea2198d0c1008bc64\n\nPrivateKey = RSA-OAEP-10\nType = RSA\nInput = 308204bd020100300d06092a864886f70d0101010500048204a7308204a30201000282010100ae45ed5601cec6b8cc05f803935c674ddbe0d75c4c09fd7951fc6b0caec313a8df39970c518bffba5ed68f3f0d7f22a4029d413f1ae07e4ebe9e4177ce23e7f5404b569e4ee1bdcf3c1fb03ef113802d4f855eb9b5134b5a7c8085adcae6fa2fa1417ec3763be171b0c62b760ede23c12ad92b980884c641f5a8fac26bdad4a03381a22fe1b754885094c82506d4019a535a286afeb271bb9ba592de18dcf600c2aeeae56e02f7cf79fc14cf3bdc7cd84febbbf950ca90304b2219a7aa063aefa2c3c1980e560cd64afe779585b6107657b957857efde6010988ab7de417fc88d8f384c4e6e72c3f943e0c31c0c4a5cc36f879d8a3ac9d7d59860eaada6b83bb020301000102820100056b04216fe5f354ac77250a4b6b0c8525a85c59b0bd80c56450a22d5f438e596a333aa875e291dd43f48cb88b9d5fc0d499f9fcd1c397f9afc070cd9e398c8d19e61db7c7410a6b2675dfbf5d345b804d201add502d5ce2dfcb091ce9997bbebe57306f383e4d588103f036f7e85d1934d152a323e4a8db451d6f4a5b1b0f102cc150e02feee2b88dea4ad4c1baccb24d84072d14e1d24a6771f7408ee30564fb86d4393a34bcf0b788501d193303f13a2284b001f0f649eaf79328d4ac5c430ab4414920a9460ed1b7bc40ec653e876d09abc509ae45b525190116a0c26101848298509c1c3bf3a483e7274054e15e97075036e989f60932807b5257751e7902818100ecf5aecd1e5515fffacbd75a2816c6ebf49018cdfb4638e185d66a7396b6f8090f8018c7fd95cc34b857dc17f0cc6516bb1346ab4d582cadad7b4103352387b70338d084047c9d9539b6496204b3dd6ea442499207bec01f964287ff6336c3984658336846f56e46861881c10233d2176bf15a5e96ddc780bc868aa77d3ce76902818100bc46c464fc6ac4ca783b0eb08a3c841b772f7e9b2f28babd588ae885e1a0c61e4858a0fb25ac299990f35be85164c259ba1175cdd7192707135184992b6c29b746dd0d2cabe142835f7d148cc161524b4a09946d48b828473f1ce76b6cb6886c345c03e05f41d51b5c3a90a3f24073c7d74a4fe25d9cf21c75960f3fc386318302818100c73564571d00fb15d08a3de9957a50915d7126e9442dacf42bc82e862e5673ff6a008ed4d2e374617df89f17a160b43b7fda9cb6b6b74218609815f7d45ca263c159aa32d272d127faf4bc8ca2d77378e8aeb19b0ad7da3cb3de0ae7314980f62b6d4b0a875d1df03c1bae39ccd833ef6cd7e2d9528bf084d1f969e794e9f6c10281802658b37f6df9c1030be1db68117fa9d87e39ea2b693b7e6d3a2f70947413eec6142e18fb8dfcb6ac545d7c86a0ad48f8457170f0efb26bc48126c53efd1d16920198dc2a1107dc282db6a80cd3062360ba3fa13f70e4312ff1a6cd6b8fc4cd9c5c3db17c6d6a57212f73ae29f619327bad59b153858585ba4e28b60a62a45e490281806f38526b3925085534ef3e415a836ede8b86158a2c7cbfeccb0bd834304fec683ba8d4f479c433d43416e63269623cea100776d85aff401d3fff610ee65411ce3b1363d63a9709eede42647cea561493d54570a879c18682cd97710b96205ec31117d73b5f36223fadd6e8ba90dd7c0ee61d44e163251e20c7f66eb305117cb8\n\nDecrypt = RSA-OAEP-10\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 53ea5dc08cd260fb3b858567287fa91552c30b2febfba213f0ae87702d068d19bab07fe574523dfb42139d68c3c5afeee0bfe4cb7969cbf382b804d6e61396144e2d0e60741f8993c3014b58b9b1957a8babcd23af854f4c356fb1662aa72bfcc7e586559dc4280d160c126785a723ebeebeff71f11594440aaef87d10793a8774a239d4a04c87fe1467b9daf85208ec6c7255794a96cc29142f9a8bd418e3c1fd67344b0cd0829df3b2bec60253196293c6b34d3f75d32f213dd45c6273d505adf4cced1057cb758fc26aeefa441255ed4e64c199ee075e7f16646182fdb464739b68ab5daff0e63e9552016824f054bf4d3c8c90a97bb6b6553284eb429fcc\nOutput = 8bba6bf82a6c0f86d5f1756e97956870b08953b06b4eb205bc1694ee\n\nDecrypt = RSA-OAEP-10\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = a2b1a430a9d657e2fa1c2bb5ed43ffb25c05a308fe9093c01031795f5874400110828ae58fb9b581ce9dddd3e549ae04a0985459bde6c626594e7b05dc4278b2a1465c1368408823c85e96dc66c3a30983c639664fc4569a37fe21e5a195b5776eed2df8d8d361af686e750229bbd663f161868a50615e0c337bec0ca35fec0bb19c36eb2e0bbcc0582fa1d93aacdb061063f59f2ce1ee43605e5d89eca183d2acdfe9f81011022ad3b43a3dd417dac94b4e11ea81b192966e966b182082e71964607b4f8002f36299844a11f2ae0faeac2eae70f8f4f98088acdcd0ac556e9fccc511521908fad26f04c64201450305778758b0538bf8b5bb144a828e629795\nOutput = e6ad181f053b58a904f2457510373e57\n\nDecrypt = RSA-OAEP-10\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 9886c3e6764a8b9a84e84148ebd8c3b1aa8050381a78f668714c16d9cfd2a6edc56979c535d9dee3b44b85c18be8928992371711472216d95dda98d2ee8347c9b14dffdff84aa48d25ac06f7d7e65398ac967b1ce90925f67dce049b7f812db0742997a74d44fe81dbe0e7a3feaf2e5c40af888d550ddbbe3bc20657a29543f8fc2913b9bd1a61b2ab2256ec409bbd7dc0d17717ea25c43f42ed27df8738bf4afc6766ff7aff0859555ee283920f4c8a63c4a7340cbafddc339ecdb4b0515002f96c932b5b79167af699c0ad3fccfdf0f44e85a70262bf2e18fe34b850589975e867ff969d48eabf212271546cdc05a69ecb526e52870c836f307bd798780ede\nOutput = 510a2cf60e866fa2340553c94ea39fbc256311e83e94454b4124\n\nDecrypt = RSA-OAEP-10\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 6318e9fb5c0d05e5307e1683436e903293ac4642358aaa223d7163013aba87e2dfda8e60c6860e29a1e92686163ea0b9175f329ca3b131a1edd3a77759a8b97bad6a4f8f4396f28cf6f39ca58112e48160d6e203daa5856f3aca5ffed577af499408e3dfd233e3e604dbe34a9c4c9082de65527cac6331d29dc80e0508a0fa7122e7f329f6cca5cfa34d4d1da417805457e008bec549e478ff9e12a763c477d15bbb78f5b69bd57830fc2c4ed686d79bc72a95d85f88134c6b0afe56a8ccfbc855828bb339bd17909cf1d70de3335ae07039093e606d655365de6550b872cd6de1d440ee031b61945f629ad8a353b0d40939e96a3c450d2a8d5eee9f678093c8\nOutput = bcdd190da3b7d300df9a06e22caae2a75f10c91ff667b7c16b",
+    "de8b53064a2649a94045c9\n\nDecrypt = RSA-OAEP-10\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 75290872ccfd4a4505660d651f56da6daa09ca1301d890632f6a992f3d565cee464afded40ed3b5be9356714ea5aa7655f4a1366c2f17c728f6f2c5a5d1f8e28429bc4e6f8f2cff8da8dc0e0a9808e45fd09ea2fa40cb2b6ce6ffff5c0e159d11b68d90a85f7b84e103b09e682666480c657505c0929259468a314786d74eab131573cf234bf57db7d9e66cc6748192e002dc0deea930585f0831fdcd9bc33d51f79ed2ffc16bcf4d59812fcebcaa3f9069b0e445686d644c25ccf63b456ee5fa6ffe96f19cdf751fed9eaf35957754dbf4bfea5216aa1844dc507cb2d080e722eba150308c2b5ff1193620f1766ecf4481bafb943bd292877f2136ca494aba0\nOutput = a7dd6c7dc24b46f9dd5f1e91ada4c3b3df947e877232a9\n\nDecrypt = RSA-OAEP-10\nRSAPadding = OAEP\nMGF1Digest = SHA1\nInput = 2d207a73432a8fb4c03051b3f73b28a61764098dfa34c47a20995f8115aa6816679b557e82dbee584908c6e69782d7deb34dbd65af063d57fca76a5fd069492fd6068d9984d209350565a62e5c77f23038c12cb10c6634709b547c46f6b4a709bd85ca122d74465ef97762c29763e06dbc7a9e738c78bfca0102dc5e79d65b973f28240caab2e161a78b57d262457ed8195d53e3c7ae9da021883c6db7c24afdd2322eac972ad3c354c5fcef1e146c3a0290fb67adf007066e00428d2cec18ce58f9328698defef4b2eb5ec76918fde1c198cbb38b7afc67626a9aefec4322bfd90d2563481c9a221f78c8272c82d1b62ab914e1c69f6af6ef30ca5260db4a46\nOutput = eaf1a73a1b0c4609537de69cd9228bbcfb9a8ca8c6c3efaf056fe4a7f4634ed00b7c39ec6922d7b8ea2c04ebac\n\n\n# Single-shot signing tests.\n\nSignMessage = RSA-2048\nDigest = SHA256\nInput = \"Hello world\"\nOutput = 301894798b49d6ec55d32dcc74314f04230591a515781f3eb4492f5324b56046836c4bc3e25942af341e88558cb4c3814a849207575d343189147989b16e296b5138dbbc717116dc416f201dfa35943d15060493953cda1f04a13ff89845cf7fd69e1a78d5d38522a77bb234e5d0ba2ae17ada6e22fdae27a4052fdb8ac267507dfe06ed7a865e61a52b530bbbf65c7caa89739613df10ae3b0e62ff6831ee0770086aad39c329462aede9f1b29a501bc3d09e0fe4034aa5d6831d44491d508111d88a1d7ba50cee5ef7e701b3a589adc09a752a974a6805956f4a1a0582f66309a1e02e9fb6b10d2c820fe98bb2eb04f435bc8a649cc9ab6c5a4c03e83800d1\n\nVerifyMessage = RSA-2048\nDigest = SHA256\nInput = \"Hello world\"\nOutput = 301894798b49d6ec55d32dcc74314f04230591a515781f3eb4492f5324b56046836c4bc3e25942af341e88558cb4c3814a849207575d343189147989b16e296b5138dbbc717116dc416f201dfa35943d15060493953cda1f04a13ff89845cf7fd69e1a78d5d38522a77bb234e5d0ba2ae17ada6e22fdae27a4052fdb8ac267507dfe06ed7a865e61a52b530bbbf65c7caa89739613df10ae3b0e62ff6831ee0770086aad39c329462aede9f1b29a501bc3d09e0fe4034aa5d6831d44491d508111d88a1d7ba50cee5ef7e701b3a589adc09a752a974a6805956f4a1a0582f66309a1e02e9fb6b10d2c820fe98bb2eb04f435bc8a649cc9ab6c5a4c03e83800d1\n\nVerifyMessage = RSA-2048-SPKI\nDigest = SHA256\nInput = \"Hello world\"\nOutput = 301894798b49d6ec55d32dcc74314f04230591a515781f3eb4492f5324b56046836c4bc3e25942af341e88558cb4c3814a849207575d343189147989b16e296b5138dbbc717116dc416f201dfa35943d15060493953cda1f04a13ff89845cf7fd69e1a78d5d38522a77bb234e5d0ba2ae17ada6e22fdae27a4052fdb8ac267507dfe06ed7a865e61a52b530bbbf65c7caa89739613df10ae3b0e62ff6831ee0770086aad39c329462aede9f1b29a501bc3d09e0fe4034aa5d6831d44491d508111d88a1d7ba50cee5ef7e701b3a589adc09a752a974a6805956f4a1a0582f66309a1e02e9fb6b10d2c820fe98bb2eb04f435bc8a649cc9ab6c5a4c03e83800d1\n\nVerifyMessage = P-256\nDigest = SHA256\nInput = \"Hello world\"\nOutput = 304502204c66004635c267394bd6857c1e0b53b22a2bab1ca7dff9d5c1b42143858b3ea7022100ae81228510e03cd49a8863d2ebd1c05fe0c87eacd1150433132b909994cd0dbd\n\n# Digest can't be omitted in many algorithms.\nSignMessage = RSA-2048\nInput = \"Hello world\"\nError = NO_DEFAULT_DIGEST\n\nVerifyMessage = RSA-2048\nInput = \"Hello world\"\nOutput = 301894798b49d6ec55d32dcc74314f04230591a515781f3eb4492f5324b56046836c4bc3e25942af341e88558cb4c3814a849207575d343189147989b16e296b5138dbbc717116dc416f201dfa35943d15060493953cda1f04a13ff89845cf7fd69e1a78d5d38522a77bb234e5d0ba2ae17ada6e22fdae27a4052fdb8ac267507dfe06ed7a865e61a52b530bbbf65c7caa89739613df10ae3b0e62ff6831ee0770086aad39c329462aede9f1b29a501bc3d09e0fe4034aa5d6831d44491d508111d88a1d7ba50cee5ef7e701b3a589adc09a752a974a6805956f4a1a0582f66309a1e02e9fb6b10d2c820fe98bb2eb04f435bc8a649cc9ab6c5a4c03e83800d1\nError = NO_DEFAULT_DIGEST\n\n# Signing test vectors from RFC 8032.\nSignMessage = Ed25519\nInput = \"\"\nOutput = e5564300c360ac729086e2cc806e828a84877f1eb8e5d974d873e065224901555fb8821590a33bacc61e39701cf9b46bd25bf5f0595bbe24655141438e7a100b\n\nSignMessage = Ed25519-2\nInput = 72\nOutput = 92a009a9f0d4cab8720e820b5f642540a2b27b5416503f8fb3762223ebdb69da085ac1e43e15996e458f3613d0f11d8c387b2eaeb4302aeeb00d291612bb0c00\n\nSignMessage = Ed25519-3\nInput = af82\nOutput = 6291d657deec24024827e69c3abe01a30ce548a284743a445e3680d7db5ac3ac18ff9b538d16f290ae67f760984dc6594a7c15e9716ed28dc027beceea1ec40a\n\nSignMessage = Ed25519-4\nInput = 08b8b2b733424243760fe426a4b54908632110a66c2f6591eabd3345e3e4eb98fa6e264bf09efe12ee50f8f54e9f77b1e355f6c50544e23fb1433ddf73be84d879de7c0046dc4996d9e773f4bc9efe5738829adb26c81b37c93a1b270b20329d658675fc6ea534e0810a4432826bf58c941efb65d57a338bbd2e26640f89ffbc1a858efcb8550ee3a5e1998bd177e93a7363c344fe6b199ee5d02e82d522c4feba15452f80288a821a579116ec6dad2b3b310da903401aa62100ab5d1a36553e06203b33890cc9b832f79ef80560ccb9a39ce767967ed628c6ad573cb116dbefefd75499da96bd68a8a97b928a8bbc103b6621fcde2beca1231d206be6cd9ec7aff6f6c94fcd7204ed3455c68c83f4a41da4af2b74ef5c53f1d8ac70bdcb7ed185ce81bd84359d44254d95629e9855a94a7c1958d1f8ada5d0532ed8a5aa3fb2d17ba70eb6248e594e1a2297acbbb39d502f1a8c6eb6f1ce22b3de1a1f40cc24554119a831a9aad6079cad88425de6bde1a9187ebb6092cf67bf2b13fd65f27088d78b7e883c8759d2c4f5c65adb7553878ad575f9fad878e80a0c9ba63bcbcc2732e69485bbc9c90bfbd62481d9089beccf80cfe2df16a2cf65bd92dd597b0707e0917af48bbb75fed413d238f5555a7a569d80c3414a8d0859dc65a46128bab27af87a71314f318c782b23ebfe808b82b0ce26401d2e22f04d83d1255dc51addd3b75a2b1ae0784504df543af8969be3ea7082ff7fc9888c144da2af58429ec96031dbcad3dad9af0dcbaaaf268cb8fcffead94f3c7ca495e056a9b47acdb751fb73e666c6c655ade8297297d07ad1ba5e43f1bca32301651339e22904cc8c42f58c30c04aafdb038dda0847dd988dcda6f3bfd15c4b4c4525004aa06eeff8ca61783aacec57fb3d1f92b0fe2fd1a85f6724517b65e614ad6808d6f6ee34dff7310fdc82aebfd904b01e1dc54b2927094b2db68d6f903b68401adebf5a7e08d78ff4ef5d63653a65040cf9bfd4aca7984a74d37145986780fc0b16ac451649de6188a7dbdf191f64b5fc5e2ab47b57f7f7276cd419c17a3ca8e1b939ae49e488acba6b965610b5480109c8b17b80e1b7b750dfc7598d5d5011fd2dcc5600a32ef5b52a1ecc820e308aa342721aac0943bf6686b64b2579376504ccc493d97e6aed3fb0f9cd71a43dd497f01f17c0e2cb3797aa2a2f256656168e6c496afc5fb93246f6b1116398a346f1a641f3b041e989f7914f90cc2c7fff357876e506b50d334ba77c225bc307ba537152f3f1610e4eafe595f6d9d90d11faa933a15ef1369546868a7f3a45a96768d40fd9d03412c091c6315cf4fde7cb68606937380db2eaaa707b4c4185c32eddcdd306705e4dc1ffc872eeee475a64dfac86aba41c0618983f8741c5ef68d3a101e8a3b8cac60c905c15fc910840b94c00a0b9d0\nOutput = 0aab4c900501b3e24d7cdf4663326a3a87df5e4843b2cbdb67cbf6e460fec350aa5371b1508f9f4528ecea23c436d94b5e8fcd4f681e30a6ac00a9704a188a03\n\nSignMessage = Ed25519-5\nInput = ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f\nOutput = dc2a4459e7369633a52b1bf277839a00201009a3efbf3ecb69bea2186c26b58909351fc9ac90b3ecfdfbc7c66431e0303dca179c138ac17ad9bef1177331a704\n\n# Signing with public keys is not allowed.\nSignMessage = Ed25519-SPKI\nInput = \"\"\nError = NOT_A_PRIVATE_KEY\n\n# Verify test vectors from RFC 8032. Test verifying with both the public and\n# private key.\nVerifyMessage = Ed25519\nInput = \"\"\nOutput = e5564300c360ac729086e2cc806e828a84877f1eb8e5d974d873e065224901555fb8821590a33bacc61e39701cf9b46bd25bf5f0595bbe24655141438e7a100b\n\nVerifyMessage = Ed25519-SPKI\nInput = \"\"\nOutput = e5564300c360ac729086e2cc806e828a84877f1eb8e5d974d873e065224901555fb8821590a33bacc61e39701cf9b46bd25bf5f0595bbe24655141438e7a100b\n\nVerifyMessage = Ed25519-2\nInput = 72\nOutput = 92a009a9f0d4cab8720e820b5f642540a2b27b5416503f8fb3762223ebdb69da085ac1e43e15996e458f3613d0f11d8c387b2eaeb4302aeeb00d291612bb0c00\n\nVerifyMessage = Ed25519-SPKI-2\nInput = 72\nOutput = 92a009a9f0d4cab8720e820b5f642540a2b27b5416503f8fb3762223ebdb69da085ac1e43e15996e458f3613d0f11d8c387b2eaeb4302aeeb00d291612bb0c00\n\nVerifyMessage = Ed25519-3\nInput = af82\nOutput = 6291d657deec24024827e69c3abe01a30ce548a284743a445e3680d7db5ac3ac18ff9b538d16f290ae67f760984dc6594",
+    "a7c15e9716ed28dc027beceea1ec40a\n\nVerifyMessage = Ed25519-SPKI-3\nInput = af82\nOutput = 6291d657deec24024827e69c3abe01a30ce548a284743a445e3680d7db5ac3ac18ff9b538d16f290ae67f760984dc6594a7c15e9716ed28dc027beceea1ec40a\n\nVerifyMessage = Ed25519-4\nInput = 08b8b2b733424243760fe426a4b54908632110a66c2f6591eabd3345e3e4eb98fa6e264bf09efe12ee50f8f54e9f77b1e355f6c50544e23fb1433ddf73be84d879de7c0046dc4996d9e773f4bc9efe5738829adb26c81b37c93a1b270b20329d658675fc6ea534e0810a4432826bf58c941efb65d57a338bbd2e26640f89ffbc1a858efcb8550ee3a5e1998bd177e93a7363c344fe6b199ee5d02e82d522c4feba15452f80288a821a579116ec6dad2b3b310da903401aa62100ab5d1a36553e06203b33890cc9b832f79ef80560ccb9a39ce767967ed628c6ad573cb116dbefefd75499da96bd68a8a97b928a8bbc103b6621fcde2beca1231d206be6cd9ec7aff6f6c94fcd7204ed3455c68c83f4a41da4af2b74ef5c53f1d8ac70bdcb7ed185ce81bd84359d44254d95629e9855a94a7c1958d1f8ada5d0532ed8a5aa3fb2d17ba70eb6248e594e1a2297acbbb39d502f1a8c6eb6f1ce22b3de1a1f40cc24554119a831a9aad6079cad88425de6bde1a9187ebb6092cf67bf2b13fd65f27088d78b7e883c8759d2c4f5c65adb7553878ad575f9fad878e80a0c9ba63bcbcc2732e69485bbc9c90bfbd62481d9089beccf80cfe2df16a2cf65bd92dd597b0707e0917af48bbb75fed413d238f5555a7a569d80c3414a8d0859dc65a46128bab27af87a71314f318c782b23ebfe808b82b0ce26401d2e22f04d83d1255dc51addd3b75a2b1ae0784504df543af8969be3ea7082ff7fc9888c144da2af58429ec96031dbcad3dad9af0dcbaaaf268cb8fcffead94f3c7ca495e056a9b47acdb751fb73e666c6c655ade8297297d07ad1ba5e43f1bca32301651339e22904cc8c42f58c30c04aafdb038dda0847dd988dcda6f3bfd15c4b4c4525004aa06eeff8ca61783aacec57fb3d1f92b0fe2fd1a85f6724517b65e614ad6808d6f6ee34dff7310fdc82aebfd904b01e1dc54b2927094b2db68d6f903b68401adebf5a7e08d78ff4ef5d63653a65040cf9bfd4aca7984a74d37145986780fc0b16ac451649de6188a7dbdf191f64b5fc5e2ab47b57f7f7276cd419c17a3ca8e1b939ae49e488acba6b965610b5480109c8b17b80e1b7b750dfc7598d5d5011fd2dcc5600a32ef5b52a1ecc820e308aa342721aac0943bf6686b64b2579376504ccc493d97e6aed3fb0f9cd71a43dd497f01f17c0e2cb3797aa2a2f256656168e6c496afc5fb93246f6b1116398a346f1a641f3b041e989f7914f90cc2c7fff357876e506b50d334ba77c225bc307ba537152f3f1610e4eafe595f6d9d90d11faa933a15ef1369546868a7f3a45a96768d40fd9d03412c091c6315cf4fde7cb68606937380db2eaaa707b4c4185c32eddcdd306705e4dc1ffc872eeee475a64dfac86aba41c0618983f8741c5ef68d3a101e8a3b8cac60c905c15fc910840b94c00a0b9d0\nOutput = 0aab4c900501b3e24d7cdf4663326a3a87df5e4843b2cbdb67cbf6e460fec350aa5371b1508f9f4528ecea23c436d94b5e8fcd4f681e30a6ac00a9704a188a03\n\nVerifyMessage = Ed25519-SPKI-4\nInput = 08b8b2b733424243760fe426a4b54908632110a66c2f6591eabd3345e3e4eb98fa6e264bf09efe12ee50f8f54e9f77b1e355f6c50544e23fb1433ddf73be84d879de7c0046dc4996d9e773f4bc9efe5738829adb26c81b37c93a1b270b20329d658675fc6ea534e0810a4432826bf58c941efb65d57a338bbd2e26640f89ffbc1a858efcb8550ee3a5e1998bd177e93a7363c344fe6b199ee5d02e82d522c4feba15452f80288a821a579116ec6dad2b3b310da903401aa62100ab5d1a36553e06203b33890cc9b832f79ef80560ccb9a39ce767967ed628c6ad573cb116dbefefd75499da96bd68a8a97b928a8bbc103b6621fcde2beca1231d206be6cd9ec7aff6f6c94fcd7204ed3455c68c83f4a41da4af2b74ef5c53f1d8ac70bdcb7ed185ce81bd84359d44254d95629e9855a94a7c1958d1f8ada5d0532ed8a5aa3fb2d17ba70eb6248e594e1a2297acbbb39d502f1a8c6eb6f1ce22b3de1a1f40cc24554119a831a9aad6079cad88425de6bde1a9187ebb6092cf67bf2b13fd65f27088d78b7e883c8759d2c4f5c65adb7553878ad575f9fad878e80a0c9ba63bcbcc2732e69485bbc9c90bfbd62481d9089beccf80cfe2df16a2cf65bd92dd597b0707e0917af48bbb75fed413d238f5555a7a569d80c3414a8d0859dc65a46128bab27af87a71314f318c782b23ebfe808b82b0ce26401d2e22f04d83d1255dc51addd3b75a2b1ae0784504df543af8969be3ea7082ff7fc9888c144da2af58429ec96031dbcad3dad9af0dcbaaaf268cb8fcffead94f3c7ca495e056a9b47acdb751fb73e666c6c655ade8297297d07ad1ba5e43f1bca32301651339e22904cc8c42f58c30c04aafdb038dda0847dd988dcda6f3bfd15c4b4c4525004aa06eeff8ca61783aacec57fb3d1f92b0fe2fd1a85f6724517b65e614ad6808d6f6ee34dff7310fdc82aebfd904b01e1dc54b2927094b2db68d6f903b68401adebf5a7e08d78ff4ef5d63653a65040cf9bfd4aca7984a74d37145986780fc0b16ac451649de6188a7dbdf191f64b5fc5e2ab47b57f7f7276cd419c17a3ca8e1b939ae49e488acba6b965610b5480109c8b17b80e1b7b750dfc7598d5d5011fd2dcc5600a32ef5b52a1ecc820e308aa342721aac0943bf6686b64b2579376504ccc493d97e6aed3fb0f9cd71a43dd497f01f17c0e2cb3797aa2a2f256656168e6c496afc5fb93246f6b1116398a346f1a641f3b041e989f7914f90cc2c7fff357876e506b50d334ba77c225bc307ba537152f3f1610e4eafe595f6d9d90d11faa933a15ef1369546868a7f3a45a96768d40fd9d03412c091c6315cf4fde7cb68606937380db2eaaa707b4c4185c32eddcdd306705e4dc1ffc872eeee475a64dfac86aba41c0618983f8741c5ef68d3a101e8a3b8cac60c905c15fc910840b94c00a0b9d0\nOutput = 0aab4c900501b3e24d7cdf4663326a3a87df5e4843b2cbdb67cbf6e460fec350aa5371b1508f9f4528ecea23c436d94b5e8fcd4f681e30a6ac00a9704a188a03\n\nVerifyMessage = Ed25519-5\nInput = ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f\nOutput = dc2a4459e7369633a52b1bf277839a00201009a3efbf3ecb69bea2186c26b58909351fc9ac90b3ecfdfbc7c66431e0303dca179c138ac17ad9bef1177331a704\n\nVerifyMessage = Ed25519-SPKI-5\nInput = ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f\nOutput = dc2a4459e7369633a52b1bf277839a00201009a3efbf3ecb69bea2186c26b58909351fc9ac90b3ecfdfbc7c66431e0303dca179c138ac17ad9bef1177331a704\n\n# Length is wrong.\nVerifyMessage = Ed25519-SPKI\nInput = \"\"\nOutput = e5564300c360ac729086e2cc806e828a84877f1eb8e5d974d873e065224901555fb8821590a33bacc61e39701cf9b46bd25bf5f0595bbe24655141438e7a10\nError = INVALID_SIGNATURE\n\n# Message is wrong.\nVerifyMessage = Ed25519-SPKI\nInput = \"Hello world\"\nOutput = e5564300c360ac729086e2cc806e828a84877f1eb8e5d974d873e065224901555fb8821590a33bacc61e39701cf9b46bd25bf5f0595bbe24655141438e7a100b\nError = INVALID_SIGNATURE\n\n# Ed25519 does not support configuring a digest.\nSignMessage = Ed25519\nInput = \"\"\nDigest = SHA256\nError = COMMAND_NOT_SUPPORTED\n\n# Ed25519 does not support signing a pre-hashed value.\nSign = Ed25519\nInput = \"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\"\nError = OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE\n\nVerify = Ed25519\nInput = \"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\"\nOutput = e5564300c360ac729086e2cc806e828a84877f1eb8e5d974d873e065224901555fb8821590a33bacc61e39701cf9b46bd25bf5f0595bbe24655141438e7a100b\nError = OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE\n",
 };
 static const size_t kLen37 = 1262;
 
 static const char *kData37[] = {
     "#\n# Copyright 2001-2017 The OpenSSL Project Authors. All Rights Reserved.\n#\n# Licensed under the OpenSSL license (the \"License\").  You may not use\n# this file except in compliance with the License.  You can obtain a copy\n# in the file LICENSE in the source distribution or at\n# https://www.openssl.org/source/license.html\n\nPassword = \"\"\nSalt = \"\"\nN = 16\nr = 1\np = 1\nKey = 77d6576238657b203b19ca42c18a0497f16b4844e3074ae8dfdffa3fede21442fcd0069ded0948f8326a753a0fc81f17e8d3e0fb2e0d3628cf35e20c38d18906\n\nPassword = \"password\"\nSalt = \"NaCl\"\nN = 1024\nr = 8\np = 16\nKey = fdbabe1c9d3472007856e7190d01e9fe7c6ad7cbc8237830e77376634b3731622eaf30d92e22a3886ff109279d9830dac727afb94a83ee6d8360cbdfa2cc0640\n\nPassword = \"pleaseletmein\"\nSalt = \"SodiumChloride\"\nN = 16384\nr = 8\np = 1\nKey = 7023bdcb3afd7348461c06cd81fd38ebfda8fbba904f8e3ea9b543f6545da1f2d5432955613f0fcf62d49705242a9af9e61e85dc0d651e40dfcf017b45575887\n\n# NB: this test requires more than 1GB of memory to run so it is disabled by\n# default. Uncomment it to run.\n# Password = \"pleaseletmein\"\n# Salt = \"SodiumChloride\"\n# N = 1048576\n# r = 8\n# p = 1\n# Key = 2101cb9b6a511aaeaddbbe09cf70f881ec568d574a2ffd4dabe5ee9820adaa478e56fd8f4ba5d09ffa1c6d927c40f4c337304049e8a952fbcbf45c6fa77a41a4\n# MaxMemory = 10000000000\n",
 };
-static const size_t kLen38 = 2270;
+static const size_t kLen38 = 1834;
 
 static const char *kData38[] = {
-    "# Test vectors from FIPS-197, Appendix C.\n\nMode = Raw\nKey = 000102030405060708090a0b0c0d0e0f\nPlaintext = 00112233445566778899aabbccddeeff\nCiphertext = 69c4e0d86a7b0430d8cdb78070b4c55a\n\nMode = Raw\nKey = 000102030405060708090a0b0c0d0e0f1011121314151617\nPlaintext = 00112233445566778899aabbccddeeff\nCiphertext = dda97ca4864cdfe06eaf70a0ec0d7191\n\nMode = Raw\nKey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nPlaintext = 00112233445566778899aabbccddeeff\nCiphertext = 8ea2b7ca516745bfeafc49904b496089\n\n\n# Test vectors from\n# http://csrc.nist.gov/groups/ST/toolkit/documents/kms/key-wrap.pdf\n\nMode = KeyWrap\nKey = 000102030405060708090a0b0c0d0e0f\nPlaintext = 00112233445566778899aabbccddeeff\nCiphertext = 1fa68b0a8112b447aef34bd8fb5a7b829d3e862371d2cfe5\n\nMode = KeyWrap\nKey = 000102030405060708090a0b0c0d0e0f1011121314151617\nPlaintext = 00112233445566778899aabbccddeeff\nCiphertext = 96778b25ae6ca435f92b5b97c050aed2468ab8a17ad84e5d\n\nMode = KeyWrap\nKey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nPlaintext = 00112233445566778899aabbccddeeff\nCiphertext = 64e8c3f9ce0f5ba263e9777905818a2a93c8191e7d6e8ae7\n\nMode = KeyWrap\nKey = 000102030405060708090a0b0c0d0e0f1011121314151617\nPlaintext = 00112233445566778899aabbccddeeff0001020304050607\nCiphertext = 031d33264e15d33268f24ec260743edce1c6c7ddee725a936ba814915c6762d2\n\nMode = KeyWrap\nKey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nPlaintext = 00112233445566778899aabbccddeeff0001020304050607\nCiphertext = a8f9bc1612c68b3ff6e6f4fbe30e71e4769c8b80a32cb8958cd5d17d6b254da1\n\nMode = KeyWrap\nKey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nPlaintext = 00112233445566778899aabbccddeeff000102030405060708090a0b0c0d0e0f\nCiphertext = 28c9f404c4b810f4cbccb35cfb87f8263f5786e2d80ed326cbc7f0e71a99f43bfb988b9b7a02dd21\n\n\n# Test vectors from https://tools.ietf.org/html/rfc5649#section-6\n\nMode = KeyWrapWithPadding\nKey = 5840df6e29b02af1ab493b705bf16ea1ae8338f4dcc176a8\nPlaintext = c37b7e6492584340bed12207808941155068f738\nCiphertext = 138bdeaa9b8fa7fc61f97742e72248ee5ae6ae5360d1ae6a5f54f373fa543b6a\n\nMode = KeyWrapWithPadding\nKey = 5840df6e29b02af1ab493b705bf16ea1ae8338f4dcc176a8\nPlaintext = 466f7250617369\nCiphertext = afbeb0f07dfbf5419200f2ccb50bb24f\n",
+    "# Test vectors from FIPS-197, Appendix C.\n\nMode = Raw\nKey = 000102030405060708090a0b0c0d0e0f\nPlaintext = 00112233445566778899aabbccddeeff\nCiphertext = 69c4e0d86a7b0430d8cdb78070b4c55a\n\nMode = Raw\nKey = 000102030405060708090a0b0c0d0e0f1011121314151617\nPlaintext = 00112233445566778899aabbccddeeff\nCiphertext = dda97ca4864cdfe06eaf70a0ec0d7191\n\nMode = Raw\nKey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nPlaintext = 00112233445566778899aabbccddeeff\nCiphertext = 8ea2b7ca516745bfeafc49904b496089\n\n\n# Test vectors from\n# http://csrc.nist.gov/groups/ST/toolkit/documents/kms/key-wrap.pdf\n\nMode = KeyWrap\nKey = 000102030405060708090a0b0c0d0e0f\nPlaintext = 00112233445566778899aabbccddeeff\nCiphertext = 1fa68b0a8112b447aef34bd8fb5a7b829d3e862371d2cfe5\n\nMode = KeyWrap\nKey = 000102030405060708090a0b0c0d0e0f1011121314151617\nPlaintext = 00112233445566778899aabbccddeeff\nCiphertext = 96778b25ae6ca435f92b5b97c050aed2468ab8a17ad84e5d\n\nMode = KeyWrap\nKey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nPlaintext = 00112233445566778899aabbccddeeff\nCiphertext = 64e8c3f9ce0f5ba263e9777905818a2a93c8191e7d6e8ae7\n\nMode = KeyWrap\nKey = 000102030405060708090a0b0c0d0e0f1011121314151617\nPlaintext = 00112233445566778899aabbccddeeff0001020304050607\nCiphertext = 031d33264e15d33268f24ec260743edce1c6c7ddee725a936ba814915c6762d2\n\nMode = KeyWrap\nKey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nPlaintext = 00112233445566778899aabbccddeeff0001020304050607\nCiphertext = a8f9bc1612c68b3ff6e6f4fbe30e71e4769c8b80a32cb8958cd5d17d6b254da1\n\nMode = KeyWrap\nKey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nPlaintext = 00112233445566778899aabbccddeeff000102030405060708090a0b0c0d0e0f\nCiphertext = 28c9f404c4b810f4cbccb35cfb87f8263f5786e2d80ed326cbc7f0e71a99f43bfb988b9b7a02dd21\n",
 };
 static const size_t kLen39 = 909405;
 
@@ -2756,74 +2753,58 @@
     "90485624c88ae11e57347a676902e7553f056188493209bdbb30acc63c9e41e16a9d6c009416b520a76ba38f57628170c43626b5cb46179dc5bf65de865085f84bf741c223fbe474d2d19d8f43914fbd6586351089e73babf344f988b7963fe44528457d7aad3c564f6bcbd0d772a4c9fd328e6022d1c7c9f86726f8d5a23797d309c0f653ab1ac687833eb2700f156296062a8b377078f45f6b68c3d07cae1913ba8d5a6f9bf7525a3439eb932d4cefc4bf8e1b07b48ca13ece366cbc3e0388915915d1757475103a9e9454e7e6355de2d6acbf4710f9a63e4f6d3cd70c2d6fca88dd8a14448fdb63ce9350fdaafbe0b8bd1c5d307dae76dfed799aef2d8f23d5608d37d1330dd38b94860905dbeebf78d7b7318b7d42aed40d3f9899e9f420cbd92a6eeae3026f7725694e0e4bee016ba346fed2c21172bdb4a461cebe0cfe38e76645226ac127a259c193264d735ce8c8a57e17dd3f0579e2e86dc295ad1f45ba2d85db35044da61f7d401274b31eefbeb34e8d2ae596e9b4541aae117bdac5ed0b324c20539c27c07a411d5288b0b5f6fa16e9a7df85dc319fa6b71cd08a859c06a3f7b0289e1750adbf182f9750fea96fea5ab7aa3473340607cd7ed2c626f5382491c26d5d5bea61401dee7319c94d418f297e61ceac8f258ee8c23831bda081591f5a918e96855774ddedffc51e5b180f1971806d42fc333020b734aeb45adb0bc47325d0cea5f6713a786558022afc39d573892aa3635efbfd8bcb11c57f306c72146afe8b45388125cb7bf9ecf965a7ba4f768c77be366470dcdcf214b7f6a5a9460ed4fe44ae559d85e2fdc2094de83fff12ea8804db1215c4ca865871bdd7f8ef32ab799bf923ffb02c1ded7d129beadad46c5eda31ab1a6f43da05ea08bff7ffa88d8966353d01830558c39b930b01d175e437124d8edd0d2698fd8932f2b2c9b14746e52879c57a395538150f390264f00e60d470711202f4194499ff79037ca9885dc8d695f7d917a3086ca88e8f8d0243efee09302cf39e039eb7cc8dd19d28120d5fe533b5727cd39133181c729ca6f90a015ed30be7668d5cb5ecc33a53ee69bf7d1a5ecbdb153803743c6adaaabd36bf84e5be38d3f04a5d5dbfd67bdcd3b176e65bd1391ade775cc32ce43a847fb6c672a3fe97a5d4081c4986959ec5fb898f42a9397ba2b3ec2c1018f8d76d057f2366bd0e4465514ad6560c599664fb85621fe771e00f43d39b591b2a6a321100f4d1ef23a376d5ae3eeedbfe23da73dff0ee4d16b34ebddd8f5f053db9824105fc7300dbee7ea6af56b112319e3e215a0fc79ae946f6b5227453ec7fcaf17cf7651f71499a50d81221404d5f129ac50ea7528ff0e0069ec4ab8acb7919d81749ab37a870c5ef2cc5a15cf96709d3c65b4addc77e7416847160bcabb94ea36377e0ef71be80b5cc53effd5444888044a353574c72c924bba2a8b4e8354188ebfedc852f59073f4347a8c8a28c99e21\nMAC = c6e5d1810fd878ac6b844c66cef36a22\n\n# Length 2063.\nKey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nInput = 248ac31085b6c2adaaa38259a0d7192c5c35d1bb4ef39ad94c38d1c82479e2dd2159a077024b0589bc8a20101b506f0a1ad0bbab76e83a83f1b94be6beae74e874cab692c5963a75436b776121ec9f62399a3e66b2d22707dae81933b6277f3c8516bcbe26dbbd86f373103d7cf4cad1888c952118fbfbd0d7b4bedc4ae4936aff91157e7aa47c54442ea78d6ac251d324a0fbe49d89cc3521b66d16e9c66a3709894e4eb0a4eedc4ae19468e66b81f271351b1d921ea551047abcc6b87a901fde7db79fa1818c11336dbc07244a40eb14cf77bde35e78ae9ad7d3f57ed7e7f23926c9172f82d77684ea5ed7d74ebc6f142b997036bcb7cce8df1bbc0d5b35a46509c954fc9469d214d6238f166cbf872156b4c41d7aac5942cffb175023078252a3f36e315c5d4ce0e39928a018252862becacef96a19f03bdcf46d75584299d1f8b03c0169e9e407d937145b5e5024139e7022a1978f114f24cdfa23780a119735c41da8fb759bbb3f025c6ec30e6c6e9bce8615be68e392fce59fd26a8e6a6cc5c606e3848116e4d01d29565a1facfb524b6d29643b826eee1e42869fc76df229dd79b39a2b1df28bb335c3a5f15a855d0121e4a6da34b5e4d5b7b5d5746a03ecff70811e1516fcec1bf7462e8876a2d21710aa168c78f45a6a15015950e221da85d3ec822ad6d0a6931b25a06b7bb5f3c10bb36cd4d647f9561982fde9818de5d4bf8db7f86c53b4ff14928ac15f79023b61861e73e44216540bb302153770da2533de9795252ab5fb77ad924c9338c8144c23d4c90dab9a18feac1a1574d4545e1435eb405e6c4c439fc724fce992ae85badf345bad16d85fbd338f04433703614754d0e7e54c4ccde2670587d52ecfb5a70a14a501bacc727722649931d8515b13d020a78e511fe136d45fbf97f9c7f689fcc677cfb3683723878350ffe9d08130cc6e567b6179e01b7eb2b3bbcf0873e1308eec018edeb8cce946338e15d5bf68c71916a83a99358039ef071e009546a2df936879dffbba397a93925d229a469fd17d71b7f524e03a30da6ee927542f8b369bed4734fe25dbd63d24ffd2a222f5f84f75d858ab989be925af570ad6d45bd28ce61b5139e1dd2f0b7795fe072e6e83acbb5e7b777a70c641e4cab2af40eed69abc334cd2703c3273204fac580c6a3d6680427e5f7d051e8380a53f93a180f4556ecea4530b9a2d5948dad63d415b6874f6b90e767d6d265be86351b53ba690780bb57c21b57418c5b97559e840c68257f839e7583a4bf7c7645c5987d40cc1ba79a218c35edfacdabe581d950e4bb7a481ebe64d61d00e75b1f25f1ce5f5462334a5b9038a697aa0937a3f8017e05d2c9c05dcb05c0b02508dea619b137f5444b6f088eb3cb2c66788f88afdfbba8faa1c490485624c88ae11e57347a676902e7553f056188493209bdbb30acc63c9e41e16a9d6c009416b520a76ba38f57628170c43626b5cb46179dc5bf65de865085f84bf741c223fbe474d2d19d8f43914fbd6586351089e73babf344f988b7963fe44528457d7aad3c564f6bcbd0d772a4c9fd328e6022d1c7c9f86726f8d5a23797d309c0f653ab1ac687833eb2700f156296062a8b377078f45f6b68c3d07cae1913ba8d5a6f9bf7525a3439eb932d4cefc4bf8e1b07b48ca13ece366cbc3e0388915915d1757475103a9e9454e7e6355de2d6acbf4710f9a63e4f6d3cd70c2d6fca88dd8a14448fdb63ce9350fdaafbe0b8bd1c5d307dae76dfed799aef2d8f23d5608d37d1330dd38b94860905dbeebf78d7b7318b7d42aed40d3f9899e9f420cbd92a6eeae3026f7725694e0e4bee016ba346fed2c21172bdb4a461cebe0cfe38e76645226ac127a259c193264d735ce8c8a57e17dd3f0579e2e86dc295ad1f45ba2d85db35044da61f7d401274b31eefbeb34e8d2ae596e9b4541aae117bdac5ed0b324c20539c27c07a411d5288b0b5f6fa16e9a7df85dc319fa6b71cd08a859c06a3f7b0289e1750adbf182f9750fea96fea5ab7aa3473340607cd7ed2c626f5382491c26d5d5bea61401dee7319c94d418f297e61ceac8f258ee8c23831bda081591f5a918e96855774ddedffc51e5b180f1971806d42fc333020b734aeb45adb0bc47325d0cea5f6713a786558022afc39d573892aa3635efbfd8bcb11c57f306c72146afe8b45388125cb7bf9ecf965a7ba4f768c77be366470dcdcf214b7f6a5a9460ed4fe44ae559d85e2fdc2094de83fff12ea8804db1215c4ca865871bdd7f8ef32ab799bf923ffb02c1ded7d129beadad46c5eda31ab1a6f43da05ea08bff7ffa88d8966353d01830558c39b930b01d175e437124d8edd0d2698fd8932f2b2c9b14746e52879c57a395538150f390264f00e60d470711202f4194499ff79037ca9885dc8d695f7d917a3086ca88e8f8d0243efee09302cf39e039eb7cc8dd19d28120d5fe533b5727cd39133181c729ca6f90a015ed30be7668d5cb5ecc33a53ee69bf7d1a5ecbdb153803743c6adaaabd36bf84e5be38d3f04a5d5dbfd67bdcd3b176e65bd1391ade775cc32ce43a847fb6c672a3fe97a5d4081c4986959ec5fb898f42a9397ba2b3ec2c1018f8d76d057f2366bd0e4465514ad6560c599664fb85621fe771e00f43d39b591b2a6a321100f4d1ef23a376d5ae3eeedbfe23da73dff0ee4d16b34ebddd8f5f053db9824105fc7300dbee7ea6af56b112319e3e215a0fc79ae946f6b5227453ec7fcaf17cf7651f71499a50d81221404d5f129ac50ea7528ff0e0069ec4ab8acb7919d81749ab37a870c5ef2cc5a15cf96709d3c65b4addc77e7416847160bcabb94ea36377e0ef71be80b5cc53effd5444888044a353574c72c924bba2a8b4e8354188ebfedc852f59073f4347a8c8a28c99e21df\nMAC = f6eaae369c3cb5c05748e8d919178e00\n\n# Regression test for https://rt.openssl.org/Ticket/Display.html?id=4439\nKey = 2d773be37adb1e4d683bf0075e79c4ee037918535a7f99ccb7040fb5f5f43aea\nInput = 89dab80b7717c1db5db437860a3f70218e93e1b8f461fb677f16f35f6f87e2a91c99bc3a47ace47640cc95c345be5ecca5a3523c35cc01893af0b64a620334270372ec12482d1b1e363561698a578b359803495bb4e2ef1930b17a5190b580f141300df30adbeca28f6427a8bc1a999fd51c554a017d095d8c3e3127daf9f595\nMAC = c85d15ed44c378d6b00e23064c7bcd51\n\n# Regression tests for https://rt.openssl.org/Ticket/Display.html?id=4483\n\nKey = 7f1b02640000000000000000000000000000000000000000cccccccccccccccc\nInput = cccccccccccccccccccccccccccccccccccccccccccccccccc80ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccceccccccccccccccccccccccccccccccccccccc5cccccccccccccccccccccccccccccccccccccccccce3ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccaccccccccccccccccccccce6cccccccccc000000afccccccccccccccccccfffffff5000000000000000000000000000000000000000000000000000000ffffffe70000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000719205a8521dfc\nMAC = 8559b876eceed66eb37798c0457baff9\n\nKey = e00016000000000000000000000000000000aaaaaaaaaaaaaaaaaaaaaaaaaaaa\nInput = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa000000000000000000800264\nMAC = 00bd1258978e205444c9aaaa82006fed\n\nKey = 0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c\nInput = 02fc\nMAC = 06120c0c0c0c0c0c0c0c0c0c0c0c0c0c\n\nKey = 00ff000000000000000000000000000000000000001e00000000000000007b7b\nInput = 7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7a7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b5c7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b",
     "7b7b7b7b7b7b7b7b7b7b7b7b7b6e7b007b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7a7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b5c7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b6e7b001300000000b300000000000000000000000000000000000000000000f20000000000000000000000000000000000002000efff0009000000000000000000000000100000000009000000640000000000000000000000001300000000b300000000000000000000000000000000000000000000f20000000000000000000000000000000000002000efff00090000000000000000007a000010000000000900000064000000000000000000000000000000000000000000000000fc\nMAC = 33205bbf9e9f8f7212ab9e2ab9b7e4a5\n",
 };
-static const size_t kLen48 = 90795;
+static const size_t kLen48 = 18852;
 
 static const char *kData48[] = {
-    "# Random test vectors generated from another implementation of SipHash-2-4.\n\nKEY: 5a174c22c487d0c5c1161e570d10d145\nIN:\nHASH: 9f06a76d8ae7ff05\n\nKEY: d56745469ae42734c2ad87e7c13ea101\nIN: 3c\nHASH: 9698cd8e2620362f\n\nKEY: cc7c78ae24ca106c5d771742b530cbce\nIN: 6cfb\nHASH: a94c8f359a6034d0\n\nKEY: c8de6d120462739b29b25913f75f8be4\nIN: 8bff10\nHASH: 5f12329867deb530\n\nKEY: c435d95c06085dc26060e488f0691013\nIN: f575791b\nHASH: 38824fa193583e1c\n\nKEY: 5d5853675bbe37b0034e019c8703bbea\nIN: 20be54d583\nHASH: 5586f5ed0a52d560\n\nKEY: 77fdc2467cb5cfadba4dcb02f08d5de0\nIN: 58ff9d2af71e\nHASH: acc2bf8eb5308b5b\n\nKEY: 3f1abc8a74470e697aade7bb409d8c36\nIN: 2a0d12d99b8c10\nHASH: 2349992cbb601e73\n\nKEY: ad977640b6902db5fb05c35bde85e221\nIN: 336ddbba25fc15fd\nHASH: c7a610c0743b7f8c\n\nKEY: 9eeb5f0ce1545597c93fcd236e022df9\nIN: 123569d0a53d5399cf\nHASH: 7f25736f962974ce\n\nKEY: 56d9ecda6345127adbf79e4ec0871116\nIN: b472f565c1370a620c66\nHASH: 3f3acf72be80cb20\n\nKEY: 4b5a67fad0b4c6dd41656e79e47e4ccc\nIN: 317e7ef64c39cf111212cd\nHASH: 4c8ee337c7103c0b\n\nKEY: e0e04322fb57cf43fb6809a33d392565\nIN: a783aca573cb07e82829eb47\nHASH: 3d5ca090c68d3a94\n\nKEY: 2895c38788e064541584f222900a45fb\nIN: 6381894b7947f3cdb6eca1e8c5\nHASH: 8ee7682323bbf06b\n\nKEY: c3a0b4ea71d4e824459acac0aa2caa9d\nIN: 6a9257065f991f36ba175ec177b8\nHASH: 078b76ac3dc840e2\n\nKEY: 56e7c5dc7ba9c37095117d3b78b6be0c\nIN: d9a8402bc9303b5a67c3aa0f1975ac\nHASH: f5fc32c55915e9ff\n\nKEY: ffcd0ca31dbb4c0a64bce83d4a876e2f\nIN: 4c50fca688dcc34a62bf77554af22fca\nHASH: 9e266efdc2b55efa\n\nKEY: a358acb475fe3a545aba172e6a2e606b\nIN: e2e6007adac976736a222ad2a607d4d15d\nHASH: c4bb7312a7d39486\n\nKEY: cc611d043067a99cb5572bb0121beac8\nIN: 7428cfc5fd76f0ffc59a216b142576d9ee5d\nHASH: 67dc4aa8a52069df\n\nKEY: 19c44128e61c992e625a1187036566b5\nIN: f6b8f9422f6eda5c70999737573142bd0d503f\nHASH: 35d6199bb8b26627\n\nKEY: cc690d64cbbd6766af28d5e8809804e2\nIN: 80b9e15766ecf0fd988658701328a266220528f9\nHASH: 8da47f7d2c8a24b9\n\nKEY: d097c32707d111358a8f6470c4bbd3bb\nIN: 4a174edf086a5406f36aa20f1dc5f854df264ec159\nHASH: 8dab02709978b647\n\nKEY: 79a047071edd76cc634f9510dd0113c7\nIN: 247ba72455b9a97dabab6905b0a1227635f79f3e530e\nHASH: 1364c8043fb9baac\n\nKEY: b3092acdd6023215701aa9c99ae4e218\nIN: ce36b755300273c22805eebdfe7dadb59fff0bf8167fba\nHASH: c8e50f39c0605ecb\n\nKEY: db6c7ce746a0431f8269407f8c35a4cd\nIN: 40dbedc0f4c351a6ffc058a2ff63794419b1c2ecb4759f6d\nHASH: 9f46bd8f53a03217\n\nKEY: 110301071f6676fc2ae41a5cea83b10f\nIN: 7947c7e55c5fe0fd584ade5a30f8af69cfbcc4825ca4e45fd8\nHASH: 7305e77b0e3dd8bb\n\nKEY: 976c2ee47783766ea8235001f65d256b\nIN: 912be0ef8e0e7becfa176ed4006ee8f2e77107f022e42351cc20\nHASH: 2f05ddca521adcf1\n\nKEY: 58b1de6e33ffea228e144b4f25e5762e\nIN: 02e8b89312479f1b0a6da0f7f35e6ccb50ade322e70ba2f5b0a354\nHASH: dd0547e80e8505e1\n\nKEY: bc57f28c8f461d9714b48c087164a695\nIN: 990ceb64628bbafa3c0c4bdabf465a19d075fb66918dd240ebef176f\nHASH: 7ce492853fc22eb8\n\nKEY: 16c2ffc4e03d5f17064f22fe0512eebc\nIN: 42e78f029eaaa1474268d534d1542e6019af7c311b70a3b80d89fc8394\nHASH: 5830bdb3f6cdbf80\n\nKEY: 546cec4ec1ccdd1dec16ffd684fba160\nIN: 36fa97e2d20f91a56389c84d3c2670c25afd2d551de8930c735f30dc0f8e\nHASH: cc29ae6a40051fa9\n\nKEY: dc04255c1214077c60ed57c00719c4ae\nIN: f6eddb62225c75e47636587d992abb31fb1429cf0e4bdf7ca7610833c6c145\nHASH: 8959c817d89057b1\n\nKEY: 66fa7b74c5d112044e6e26a8f056672e\nIN: 9c303c5097358b4671f2b282d2286ccb9925e22717f3e1bb16a2a7f088c89efb\nHASH: ef44eb07b3dabf20\n\nKEY: e68c0b8b0fc194402a074069fa79bcc9\nIN: 68740dd32b54ab57313b7aba7212eeaeedcd00fc34b5a295c3742361acb450c331\nHASH: 31c38d85506f95e2\n\nKEY: 5a9bda075c2c3756bb03637b833a2c7c\nIN: 0a20ae05077a2775accf3e93197c2cbe58ec0c8cb2d666a6d1c5ab8f6a88921b33a6\nHASH: 83ac7417ef2f78cc\n\nKEY: bddb529beb2c89ee5f3e6b91c786f7be\nIN: a963b7e8a6ab9ebce913d39af035540d1172488c29b85217edf02143c23183da52a3ba\nHASH: 87bfacf3844aa239\n\nKEY: 65bf6deca182d55e94ebbf8fe0df1e01\nIN: 7c95a702ffec11b19ddafcb53feb2571214b06219feae9b8a058509fde4b54e1f16cb89b\nHASH: 170b6b574e480859\n\nKEY: 7ef0aa07183687c13f800f268a00ea86\nIN: 8c2b513a5facec6f5a34f49eedcdcda7bccf99fd9de0526ceff7c81ee11797d451d62cb689\nHASH: 5d0f521bc4b1c1e1\n\nKEY: 490cc83d84a0102cd83c11f8123733d2\nIN: 1f7312100fe65f082abecc08f276ff81164b21ad7ea83d7729dfd1ef622b5c39c884b3f82e49\nHASH: 2b72bb41af9f002a\n\nKEY: 81e1981c81e5c3010ca4b048eea1cc72\nIN: 012273854b89fb3c66e4427d460e8493927d71f44ba7ed7dc2b3cd3178faeb6f0471bc31436a85\nHASH: 6d67485ebe1e15ad\n\nKEY: b47f522fa34143dbccffc3b1f4093b09\nIN: ba235ce1ad78f2566f78270021fe9f31417c3f65f1533c43ef71d6d281d17722ae4bc8eb87636c2c\nHASH: 390e3fe50119cac3\n\nKEY: 9a3fedb06d1e550dbbb4c4c6c42c7b58\nIN: 95f641d66e88414ee49060d1b7bbb2d62f326eaf6cc3c77a359ea2dbcb0526f737b4a1797e7026d813\nHASH: a58b6f3f1df212fb\n\nKEY: 9111abb078f38c77eed9ff96e25ec5ea\nIN: e1476ccebc8fd7a5f5d1b944bd488bafa08caa713795f87e0364227b473b1cd5d83d0c72ce4ebab3e187\nHASH: 30527d54ef667563\n\nKEY: 42808b700fca9f85fddfb5d590807f0a\nIN: 5f81bd275320d97416e5e50d5d185d5542a157778b2d05521f27805b925e4f187d06829a2efd407ba11691\nHASH: e58617ceafeab62f\n\nKEY: b609075989500f06abed2bfc45c83d13\nIN: dfedfc41d8a98c617adab43f94b8d55a4fb1c02bd9c4939f8517e7207d3b8227d2bb8af086dc37e2ac24f437\nHASH: 0037588ae129b9e4\n\nKEY: c9afb75085e1759dc2bb6790ae29ff1d\nIN: 01a06ae550215331ad34fc87c2e9597d2a369753009c5a5fa2044481c6126bbbeab1a9f3d49f6198565fc6db9b\nHASH: 236763204e7ce6be\n\nKEY: ca4a9f84ef63e8b62514d34f2d74b4b6\nIN: 5f670e9e199c590700b7a7fd6b777f325ceb90f05b611ab77a970dda67db8636ba82bfc8770f742a22e66d39a59c\nHASH: bb3bd93cf471803a\n\nKEY: bbb3452a0a57a75460a77f238bdde048\nIN: 6279c2ee80f83cfc3074f24e5026a3fdbbc29e95f46a4e2862af2dda8e0c49b896f8186e0a3aa527dc4fad02a7c21b\nHASH: 823931f402c9d3ae\n\nKEY: c1f2268a501653c08ce64a34b1eda186\nIN: 2b55a854ed9125c148e97ed0fd128ab7a48bd0abf150aa86f60292feb3cb02da159698a01adc48bea1bd38a8f0339496\nHASH: 050afb47067c73d4\n\nKEY: b4a12074ce0969ae5de1cbd25e4f6f5d\nIN: a1543098dc8e85c7319269c590513eafae8bc5bec292b7718ea49018e3a0ce80843ce1aa644732eb083cfdb418582a4a7f\nHASH: 7c0fb55d3f5e8363\n\nKEY: 598233eb95280098c909e3dd3f93dcc7\nIN: af6e57e39dbfe09b91e57c212977b9b5ef48d30bf8bc8764e3796b5aa82680fb590d7ec73f4ef2357c34aaf2e12b45dd1f47\nHASH: 78ab42112974448c\n\nKEY: a91a39cfbfd3a01ba163294d96d99477\nIN: 092c683817c7484996b32e6c1fb46f3754b829b1b46120bfe1bb9123d139d46f5565c8dbc11a60273bf6b8e1bc38bc9a6f1995\nHASH: 7fa74c95642f9644\n\nKEY: 0b564ed2eee9e3649ccf53fe50d8b1c6\nIN: 05f42bd7cc89c80fb6eb8d09d4f4968fc47aabc0db6ebdbdf70a416815622d6e92de69cc675671db24d021be0b6c7545aab0becd\nHASH: 708bebc79de07dc6\n\nKEY: bae7c48ecb04834a577ad26c87022cd3\nIN: 9f5af8c66983938b16fe3a2de4d59faef425ca769d3a31c62330aafa1aba57e53bfc3d61357b618f1ae01bba3efecc65a70edcc8b8\nHASH: e9d43d98f790f1e9\n\nKEY: ac86394cf9e8668900fc3e731e5573d2\nIN: b832f6c610c6f3bc5ae50b656709f26777a9cfa6266faa80d788376d7a4b0af3c84e2f14a4b538bcde23e45f0554e7a333a95224b474\nHASH: 689de641675e6b3c\n\nKEY: dd60e6ec34522428fe517767fd94a5cf\nIN: 3ed67357449c3b24b6d8a381d92a443d333532aafd1c90411a29b80ffb6566cb13762c5c8c8ef87741023ffafe8ca473f77934acbd25c6\nHASH: 30ff83beb6a4eb30\n\nKEY: 9f5c48c10551808854f2c5965f2b8402\nIN: 9b160f17162a71a9aebbca3a32939cf09ea4aaaeb98c75aa5fe0c15a8a94cdbfb7716ea37b7f0aaa9e058d93ef5800e9ec863a5df85d51ff\nHASH: 987b4b16546765bc\n\nKEY: df955ec1e84432fec581bc446b10ba8a\nIN: 44ae821f9ddb1e1bfbec2259fad2042558fb216dee7c56af074d24b94a61074f37a011a46fc7542907af3a5c03ad64b34f1940219e3c129b8f\nHASH: ed3e957005bf498a\n\nKEY: 5a901ece66329a9488bd17ad3f350ec9\nIN: 3e404145993bf0c296c97729f9f2e6eb3bf22010fe642312c8136c0da176ed4c314eaee878047cfe0705a835a8a22e7d2b29c9328370032d4824\nHASH: b5e479243d036ead\n\nKEY: 6835a439c331ce630ef771f866f045a5\nIN: 5f2d95f898406fce05b36d1cfe21c57541bcbbb9293c3dd56e6fa8519e1ee76b40c2db8097ed008e84dd47b8aaae3c2b33037f9f7af38f3f41c9c4\nHASH: 7ce56ef8daac6676\n\nKEY: 84b224c92018a348dba300d4e17cd139\nIN: 9c520b111bb008086c5815f450a6b7b6daec0925c4b0c8cf99f9f9ddb6198000a379fcb62527d7c361ccbda2597deecdd055850abc6a17251c08577b\nHASH: 3e5ab339d1f90e72\n\nKEY: b3af10ef15d3e728b36171cd7e0bfc54\nIN: b0c30990fa7d8451403c84c7cbd650847dab3e087fdf2985eda79c48deda583bc9c4957e24b0502ab6004a85bbaaba74efe9bdf2377043d008ae14e169\nHASH: 0821d1f9e241ca1d\n\nKEY: 3f0dfe713054af061ab05dec911b8895\nIN: 0d3ee8fcd134e9814641fdff20b22ddf17ffcf3f23af7327e203cf1971329f92e99622d1b8329f9a8f9244c5efbd4ce3e07f1b9779f1d84927e8fb16c030\nHASH: 0a5fe88",
-    "9f9475d8e\n\nKEY: 62663e655ae3a122b869b11182f16a11\nIN: 82696187d910792ac92d50900677a1a0238d91cee3cd72ad949b50c53a0613add3bf0ab02c78e87f96847d5bda2bb31e4e19d92c933b1637aa00be18eec696\nHASH: a2c05353cb689240\n\nKEY: 1d3f1977fc1aaa27f459cb4de22a736e\nIN: 935e1cd9a08b1d0b57dbbc640915c6de3eec62f481cc64a27cda6a08db9e7dfa58d13dedad1ce2abfa967f059185b41f2b72114a4ba51a9a5d279f067ed9fba6\nHASH: f64a0fe86b7dffa1\n\nKEY: 96bf9034f02772a5150b0f2dfdd49c88\nIN: 2315e242205287d3e9dc5cbe317ddf3f286ad02fc4385c82bfdbd43ff6d5f425347e229faf0521acf9bbf3eb6f3abc2029c7af2506972444425e1b92aa1d6601ea\nHASH: 2ceb3eded2754829\n\nKEY: 5e2d0b77b3478b1d041b9b6784bd4e0c\nIN: f10b956532deea1838bebcb192cf256817525cb95242e5295830db8cee586e5cf3fdd0d9a5277d5a50a8dc6e4878d2cc6a549eb52bdc5beeb89ce870e65a87702eee\nHASH: 8fc78a2ca1ba1f7f\n\nKEY: b2c34273ff91123facb2e3f4ac03952d\nIN: a43e581d35caf54ece5b668df2f4a77e29bee3e1fe26add027b07e814991bc538da16f1649886e42be0a5be8b221ad155eb7489e81330ee91b194904086f91e9e71a78\nHASH: 36ea4accc3181075\n\nKEY: 828238257380186239aad56fda379060\nIN: 46f7fce30d03f04bee6559ace020e6ce72379001c20e5fb30bc7a500ce91262e0d7af70d8be30c61fee623e67a5e46db55d1dec64bd4be6af45bfff65050800194ba175c\nHASH: 7a1a36cfdd778b12\n\nKEY: aa751839cf5a43613a3b686bb22f9e02\nIN: e0848a835142871c489c772d01ca0115f226d39f94efde92178a38f87fbb371d4791f13954feb4f493bc0707c4dca732e24642cc6effa26da527ee7472c1c34c4b0b4834a2\nHASH: e144d10851a7e0da\n\nKEY: e3d027fcfc629cc735fdb70912799363\nIN: 08a51183fb0396a1633bf7a2c6ce4abd1e44d9153d7bc2a269f478269181df5ff29346366cea689a8301efca949693e1836d27d9cff181099e878b2bd53da75866f4abe0b64f\nHASH: 4a935a091f380fbe\n\nKEY: c9852a9cdd185cb16fd88ef793bdf598\nIN: 49cb5ab1bbb45afb32878b059685a40016f3add53623e23859c9384641c537e13aff631d814deed607bb6abc375c855f98744e455e937ee1c9e478c4878854166c30d0b686328b\nHASH: f2df3a49621a40ad\n\nKEY: a713bd5752e392d99947a0a0fef98da9\nIN: 15064ba012aa36887257f3f84261ac66134c36dc02d4d8688e2fb10ea36974c4fd3963144f8ff01e3132d2c69e5b57cdba82f98453238a51653facc718467ca781e73044aa368879\nHASH: f187bacabe914603\n\nKEY: 5292ed7c7317c2aa71831d03b905d0c2\nIN: e3eea270140e52ee204c78b9a4d86c0be9c74127acb4f3957b1fd380417dbd57f91fe69509126e531a62144cf7ec147b36aee7931b883a028f93993bb8068552e1ac9736775038c8cf\nHASH: a9a8c0bc50104e8d\n\nKEY: c3117a19ed788199add874b10f62190c\nIN: 112a91dad631502ec6d9a569d14cc009779bcf2ffa489ea4df85c275ec37148b25a133dcb6d4c3dbea8ed4375e7cf26885b991f96ad984880bff76a62568fc115d3762dccb4522f1a27c\nHASH: 4fc2a87b168477a8\n\nKEY: 45862eabc24e2b62acfd8833595b329c\nIN: 921a7d233720992b5d767b61f86b4d6857caa99d39e18656de8c5571f2a7295af7e0d703467e4c0b83f6f7079c63b55657776d3020424443756388ea217c2407284fc8657d3935a9b34573\nHASH: c1cc6da484446857\n\nKEY: d185262e194717d27be06c1297b8f27b\nIN: 7804f030a6d67847f53cc93052953516f66c915affba735df79df7da6d70bd511e4edb33fd712b58bfdff47d98b8acfaff064bd4e1f64828d61a82a5e72ad97573f4631fcec0ebfcbd16e67e\nHASH: f9d37ca5a7750584\n\nKEY: 53ea30bf7b1aeba84ae8e0b434a8657e\nIN: 65ffe0a087ce955a6170462711dd53fc057aeee9fb5e7a8cd866527fdce70aa4b8acc65ee4a366cdae649cb5342120cd7cbb9d536b1697cc45326a44494aedefb4f7d96fa5d0ddd104bdc6a84c\nHASH: 965ba9830abddee5\n\nKEY: 79bad8d7ff51922ef1d540b7d8d7663d\nIN: ed536d02d21049bfe6c1428ebb6a8faa481321a4977a685409b0fb2ca39d72c92d3db0ac406d56e2f15d6b6b62c73246807215bae613d283b8a35678df263fdbb6d3172c16909deb8e97d78694f3\nHASH: 4841b9dd5502f605\n\nKEY: 104104e76e645e83c7b40c6674906d55\nIN: a7546cb4e6b1b1c112aa28563028e910915c6b44b668bb57bd6623b941af4c3e22c7cf6eff2f6c474657fc5ee293db60a84944bafed2acabdbe6a6e7f0804ebed61786c2cf29cdfb0c62e8d41df81b\nHASH: d21db84542deb383\n\nKEY: 8d3c174a295a9d859e009f73e113403e\nIN: 16ed05c2b7b0c54df274bb67804c5d7671b915d899e15b2e166c3f1e4d9e990ab5be59c5e9fd70e1967a8021797ed8b2e40182f860dab2d0208dcc7c9fdb7bdcaabbc81f5b9b8751c558c5418dd654b2\nHASH: 0c4d09f8827c0c37\n\nKEY: 55bc19da3d5e60a3308379d5900165d9\nIN: d18ece72cd2f5fafe52fd55def2e6af0370e420d7aff7968f9cb5efc44ebb161a6bdd22132aad0aa9685e9168ebb9578209e51865625a4cc86c8f7898ad629b64e400a7d4687a5c3c000ad724a281440f2\nHASH: 7c47369a6d8387ff\n\nKEY: 58a3165308ef3c5e2a7c05070085455e\nIN: d9382554d5b633afa16065e6dbc0d472ee26629e6217a293b63af73cbd4a5dc3cf61ef7ebd5b6900a34bf4ade833c0dab9afe9d2d97369bf2814d03349d6e917adb5e0e1388772fad1a4baf64d7836fe3ffc\nHASH: 2ba3e3082bdd312b\n\nKEY: b636290e491b0ac22476c91c958ab313\nIN: 3d27f5c20db62e3abe1068c018fe8e09e4823b8c1209b74a50dbc19302e190350dba1c5ad616007c72be04bc21d7ef0a82804f266ba95fb3047a6a05de3f0d7ca3cc7c4633a02dda4f367051685535d8e1a155\nHASH: d14da7a2dc3b015c\n\nKEY: 667094c06354337178e646e23e453403\nIN: 215f856c43336295b5e4d625d8cf5b37c4a5b07a39eff2b42427d5df683982ae78ec85ba085740a28446c7928bce24be1b66a087898634a3f6260a3926c9a8f953e235e469c4de23fd32dde181168525b716a2cb\nHASH: 2f7cb69c5e4f942d\n\nKEY: 52eebf5170c603985982122bd8eeb1d6\nIN: da1ac8ccb4c66979633092524e42ca05df667ecc3921849a24c8fbf6aee70a01504ee2a80a000ffbc7b7629843f15270982a59ff9f3f081963a109ae8eee0a1d59baac5207f44071e51c64535b6920bc07bbc9048b\nHASH: d3a5fe4ac656bef1\n\nKEY: 1c1515cae3eba8cc9ed94c10f8a1c211\nIN: 4348d387039f7fe59a1d94a9e6d894241d62eb3ee91c19ebb09064792abb126710a619073fd293b59fecae7d90655d651e542be56a01ae5d419f14b1cee06cd90ee68e0106cd48130dd6e0d73db8fedbad3b00ada87e\nHASH: 57a4daa6abfb5a2d\n\nKEY: 8a8680122ba96ad89992741a8802f79e\nIN: 6ae10dfa31e5d06aeed3bf640591b9810245ccc175a8ff9f36893ad6e10c6dd9347d001f37c41123e4ea16b86b08aa3498c75bf5b8702228fb654595fb930cea2bb9ec97ffe1fba10fdbb7e8b16a2495df30abdfe1fc4f\nHASH: fc353ccf54b8c294\n\nKEY: 40d3e4941056b2585e1ed3bbd3196b24\nIN: e1764c110b024e2c406a18d6a6cb1b2d8dc05f8cbf635d9c6b59f8c54f7cfa1c9022f719d28979dfd75f6a221687690a046404fb1204cb27ab6502f6f24ac6d9c272852acfccb2d51948ddb427950c95ae4045699ec002c1\nHASH: 47108a5f3f664b98\n\nKEY: aa377b72cf2c282946fb87e6f3f16fbe\nIN: 4bf7833eb1e828df6fc190ecb568e3e175307408c4f851532afe731986d05c2e0a6d21c40b0228af69a0cf4f30293ba119462f3f95200386c70a4c49ad7251bc797be0b504efd50c98c3099b1119772deb764ba799bed28d35\nHASH: 6afdff80d074b585\n\nKEY: 304b7a8d2825ab0b4c78a82b202b1942\nIN: 43094418f2f65b85acacf5b3190711332fd3fa7c1e471a49a7d5134ab7f22def6fa973cb135a0add46fa482e7e29976abff74c3bc33af797b46540c85eecca45b848b55d3e412970c8937fb97d2b61af68ff3f2876bf8cb72dc3\nHASH: 8f89c9b9a3b9bf62\n\nKEY: 1b54ae53fbea3567a9678350ae934303\nIN: 8d02b02800d9605227fa73cc920962339645c72b560ba8c266b0b9e94eb8be0c9748718ba9cc48f1afd12e8b458d745596b763c7e65cb8a0fcc3d937c56e04a6873ceeefd3a77f3c545eb957a9a7bfbefabd47dca867ea92203c9a\nHASH: 86f09b1edb5f7934\n\nKEY: ada9526398c0ffe64b200ec1823a0d16\nIN: f6fcdf72c13acae3886dbf6a842806fc9ad021d0329e595748a8cf82f375fd357e1cc37a7d995d869373cad1dd8ecb8dbf0e5333767470378fd7e5b0d1fefedc18fcf045cfac7d883e67a8a32efbccc1a87a8e089f34186f7ea4ac41\nHASH: 64e098ae04f9e06b\n\nKEY: 30f08a4322a8c71e1e1a6353b371fd4d\nIN: 80df14c6bb51846621cd95b57c02e34afe6a96eeba8bc29002b2514f26c3ce53dc81330ebdfe8bce32d4e789f5bc354b03b4d10a64a10248dd1626726ff607529386f7becf9d716664bed65656629cef7fc7482e9046af09aa7ed60072\nHASH: 746b10b00aafaf2c\n\nKEY: 9bfa27a589f425dd70390c6ca1e1760b\nIN: 79fc7caea4cf78001a8d601de3438584517972e81d55c8e00b5c8ffd1e1aa5896058a56e636a4e66842d31f5287e01587601a9f79488db6f28f0a5644b34de163831cf462493ec579ee0c7631adda09f5e135cd70e6a4504e52823c1cbc5\nHASH: 1899998766305ccb\n\nKEY: fab33b56c2b97f9899438d8c4448a721\nIN: fb7e625072c6dedcf31d0fbdaaac81585465f6227d1a37d60befeb9662823d2bfb70f0dca67af4c1c60f72a524fef0c243a758f8b2883f17f2b113277fd71d28378c027cc9aa8c79d5dadcd65c2ff275f29a428437f424ab2171c33f819df4\nHASH: 208be5482e6ebba2\n\nKEY: 6ede0e899a0dacffa8c8ae3cf7552310\nIN: 9865e6577b8811c937447194caf30ca9db318f3949a0a095a148fa0fe0fe7a0ef4efd7c04c7f0ac13206841ab8b30b6b1a55b1555da37a40d5abf1543d59f1331309c1ce5f2adb39259c152628dfbe10c0c5e81ab172c025f9b84abc2d996834\nHASH: e46838d2cbfe6c33\n\nKEY: 2f0b8714a8f0454f62db8dc4fa506a6b\nIN: 6c45eb8e88bf9e63db9d1558e381f4a6f831727d866daaff9d402ba1c3ec6911aa4c62dff1bfac2fb00a50be2c2d945b4c1cd10d1ab0d96d201a5e38d80a5ac2cbee6b2945091e91aa40ccff6f37656392758bbb7da5ce2ef3c933b1bf83f82201\nHASH: 433657c53e5fa081\n\nKEY: 85cf9b7e4bd9af87f8fff9d854fb894a\nIN: 0e808570f9bfa7fde488e3fedfd61905b232a2e6c512ff4659b6b03722d4d1a8ab0b757de0eb114c52620054364d51d6087417f2ecc73bfc78caa8dc5c3063722b8c7387f5cf1eea7369baf108092b1736f34f3c85a1a64caaf188753cc348ac09",
-    "34\nHASH: 25272780593c358a\n\nKEY: 903764f0b9bcab23a0d1e7b0d8248711\nIN: e63b264edf7a3ab19e8f38ae22fb9e00ed7c80d25e3a9d76def3c3cc7975ed5a19aeb552a559da1cc6d6f4d7ad5ade44bd7bb57ad1910a469fc7082267ce9644e9d4e24f1ce5afe6cb3886172485df77b3e47dce36e549c62129788648c3738f836caf\nHASH: e995824b960f3012\n\nKEY: 902dea339b29a5a4c54c71ac3486b509\nIN: e33910d372dedb9a154cd8b1ffd4d98c58c4b8c93b5d7ff59a87a40730547ffb145a820aea56bca4f7c043c40aa2f5e0099b9a91683d2d2927febca53c727ecfd8dca77830012c0d33135a2d1a5665c013c4126acec9073cee84f429c2a1d57abff643aa\nHASH: 7a6d533f1d13f598\n\nKEY: d760372d5a2224bdd096ca9c317b315d\nIN: 868257422e5898c7de261682a088bf97a19bddba87650eaef967e4085d5145787dd8a2236859c67b1d96e64a81934210b63ee44adeb5cedae03cf3598496f7b77caa7f2a2f123778e3720229ee7eeef87837a0d5de7ced3baf40114d663bc0e576ce6cec70\nHASH: 05eeed619f335b0b\n\nKEY: d443db5067af5681f8b61a489400d3b3\nIN: 2f69ba36de9d7f2489ad092263f06e04b87179dbbdc3725a8478abf6930f19ebfd1a23823d41f851618f6d533ca56273e602918c27926cd77e7380de5af322bfa2704ec669ef402971bf606da799b85c8d51ea8e2f8b8df3e9e4ecd9cb03f9c1bc387fb69a02\nHASH: 3b54dfef0537f65a\n\nKEY: ff85c309dd953710c4c450015a92db7d\nIN: 3b4cc08fb998a83c0bcfda112957646e708a5e7f457c33a4e31fcfeba9fb5bc37be521bf351eb5ac1bf11144c3fd4837cf9d9728b02b75c51fef0342140e3a0d199fe0a67710a3a7131c6d3c33e0ca00259cab1b7cd1d6de7ef81e97dee7ecaba9e2073c08096f\nHASH: 0880d53fcd40525d\n\nKEY: 50703fdb1e055a0f72353a13de243741\nIN: e94047f4276abc898fa1e268b53ba5effecad744a315d93f1218a47725ac6512bbf0e418681cb15e6a98c3a82bb3fff9f64583ba39268a70a45d91f432baabf3f38335b1e9f52a4141bfaa1c55570ab0ecdfccd5d7cee5bbf692277849891625deb64a8850a477bc\nHASH: 758c1f2f92b68e49\n\nKEY: 2b022fdf4bb13146ba014e1f2abd73d3\nIN: af723b77807c45b4aaea43e9d79a9149fcd1fdc59849b1bffa88abf27c6a779fd8172f325909ae43e49c2a44d3991350a377d58643e5f6ca9d8743c7842d58cb8706814d783e2c7855b8d63e55164cbc1fd7a13bb963d6c5bf4be737a0159c1347a72b88c0c5115a4f\nHASH: 2275a762396e6942\n\nKEY: d6c230457b3494e373c113c4fbfc8fef\nIN: 7820e1b5f75780ae7e6360c6708ec8bb5f82f948e656deb214a29d7887162c67aa1dc547b9b1b878f870cb44b22c61f804c6a9bfefd38588253360532a558c4176c98b63872df3741a718d8487e9bf17d5da3ca9145cb76a9ace837fc9b1f3065b8a777e10fa95dcfbb3\nHASH: 53b8f6e69f5a89d7\n\nKEY: 17f7716d7d49fbabdf1583287dda7802\nIN: 96ab47e1979e30b418b98f8b0f86ee5f5a773b3ab1d062274a4335f2f8cec6a0586aeaae7dc4d0da82e52c3b4b670b0ccd724b0100af58ddc74899995bf000fc626490b19b8bbf4f6352879a0530e97f9bd2418104a1a27e7252df3a6b996b27f54503ef8a718a8123d580\nHASH: 8aedf4fc510a8fe7\n\nKEY: b12168e2e46319863bc595aa421cb4ba\nIN: 0ce0a170319192d56484fc847a8285abe28b3ba3f8aef58702df5bf50e4d0ad2320946d8256dbf2338c8c0a6a1da48496adf9941a4d38d74e0c8aa52dbb5c757e28fe3756421964a3e4eeb9fdecf2529d70216b00515d5869087b611ed0ca1607a650ed6a3707ec6bdfa4d5b\nHASH: 4d85e666f836edcd\n\nKEY: b05bd753656eae367d8f37b4907e4fa7\nIN: fa2a52f77554506d25e8847bfe613139565cedbce07110a7a5af53d024204af9e0bb08c8266616dfc1e21bd5c651de626e1303b08c0c90ab709613caf2713848ff1ba3310852a575d07e12c7691cb081157147a413e80d53a55248240eb5dc566b8dd67d616c5d4dd8199d5d69\nHASH: 885116def6316c20\n\nKEY: 0bb368a25169217504ce1bbce5820394\nIN: 34b4df9ec90072e91548fb40a35128349986b7e50e425d894664a270f919456abc031284b29b6bebd734e53d5241919a8dccb05c38c633fcbad53979d92eb7cfe111584155a4c352f06c29242178ed4d904ed739a04d4ebedd27b7043d79afa9b740df4ad58c5640da67eb121997\nHASH: fd965ec9c1ef4449\n\nKEY: fdaec5633f8d54859574792bcda87468\nIN: ed96b9cd567f55d1d9e087bd63abccd07baaacca8a6d375d2576f00b1e09b5d920200a74cb12e8721e550c80b8c61ac7a8e733e1a14ad0311c30afc83f5aa7a8cd9fca47aafa84babbef5f93a86eacb5d50f696b7a60f0ac48f9b57dcab2168ce26f6390ce3c091a947397db050ce5\nHASH: e92615340f232b12\n\nKEY: d529ce056cb054580b538c81752d63b5\nIN: 75677757aa8eec8e44411d238aac77fbf1158c1c9c3174b78eab4a70034c325e52cd1a275fc0a24c432f82a10b5920a922981dac43571500263c0bbfb95d08bf20acb526bc6a180e6519499cd571414f7bf69d704b476d62083d53049674c46fb616b028bd269e1b822daae40ae4ec31\nHASH: 9d6ee722d9af0ac1\n\nKEY: 28b413218335bcc2f9031dc3554b0585\nIN: e4ac05d0860d28f45b7dde35028dfa67c25c8364545bf27a016228c4f1b5cbdacc418806d229d1fd2d30570fdb1304e38c7443c02d2e55ddd20718dd09d0b3a667df71c2040f079c9798a7f5ca7b09186df6c44edf4740433ec17873180038f7c5e0d4220d3755e264b0543ad5a5c1d537\nHASH: 7d6d8be4026abd19\n\nKEY: ab31c8820d2d02f63dc3ac5acac3828b\nIN: dae9931233787d476b472cb8e7ca4f86c2f8b9cdc38f49a50857f99e4e64b89d451e1bc8e5afacae36579d51b8bf67a4be36a65f9b464a150c1fc012c115bec08e45bea214b80ad39e1a705cb9b0b759901133d6619812ded8abf7848a67758f483aacd11297315dc190746a44e9ed56708b\nHASH: c9cd54ada0139758\n\nKEY: 145d3281341d26c75cbffbaab06d783a\nIN: 9859eb836c49cb41beb29eb493988b459f5d0b22a4dac9e64c34f93a71a700612cd568f76b84cf71966edfebaf6b27ef52524208e4905b83f8d52e879618180101c1ea0e326a44bb4d59539f779a0157af835c5bd7009882f16bb2aa2c87d49b6db49e996390a3ace578794c4d0f1802dc0a82\nHASH: 219b0dfe6c21ff2a\n\nKEY: db21409aca53c06e34752eaf651ae7ec\nIN: 962ec5dbe61976d91eca580b50d3b21c478bb8139da94be0a90e68f89b26b8b28d3484cb938791cf729a269c54af470e528a72ac9122ea10c08e836f8f32f1c1bbcf10716ef243d2abbe31bbf52dfd6c6884b81d6c48f18f087842b055432e5f67de978a2e7bdcd645dec43feb33f2be7fc8bb5d\nHASH: b31faaa12c80d2b3\n\nKEY: 0a92a6dce6418f53cd3823b9a40c5183\nIN: d1f4d53bd0409a3127ef19482d47964197bc061bc779b32ca5ca6f546c18180dfabd32b5a8519f868ac3ab67cd72c3bfea3ad96f5e40fc09a64046ff818928ef87ed043d0a0994c1adb8b0bdf446188b98b20dc65ada689654c5fcf8fe26d66baba8c02d8b39ee2be9217c09a62a4fce8236eda6f7\nHASH: 3e9be4b24cd3f47f\n\nKEY: 868dfe7c81ff02bded7c42a242d4c1bd\nIN: dea44a7466a4910b89fe6abcd824e65603a17ac436890fecbf4f6bc6809be8b13c0a6d593840d48ac59de059787dab1c1ca09a6834114cbf7ff2686a71ec12921aff5e13e9cd80c77ba7adbd361e72429c2b46eccbe27b25068cf457f865bd0149da14383317bcf8fbf949e36eabc7f8dde08c5483a4\nHASH: a0b3afbcb9412ad0\n\nKEY: bc662a2870b8baf74a1153e5d24b4832\nIN: 503401e821133e2ec69942d28503993e0337ac43502466f788fde4821e5bb2be6b0aa80a6886eb10dceec3225762a1357992b740d5ada6f6acb26761c57532599c66c9b55812ced61bc0293781f600fa1b2d211a7556702f41203b7824654207894feb9e2f744e03f5d79682ba4570756050e42eecb3e0\nHASH: 285affa883d1597e\n\nKEY: a51217e323aaa13dc0debaa2d26a7141\nIN: 52c40d6b8dfd5fc99158481dd889643452c533643534298382d2f3d159a7c0f019cb614d8773299451ff87520d9680e5f283e9e9a2fe9a8a7b5e4bda6b94e578b97948eb9bd868ac3c33ba79df325c141eb83ad6be7c1b5c9001d59f88a4bb2208ac62dace5922b6df16f09092b48d432bcdd79b4eb484cc\nHASH: 5aae64a7fcaf3072\n\nKEY: 89c8b8541be48278ee4cafed6616a581\nIN: 86a7c752d913e379429724ff0358994fb8ccc6605573437ed5742fd1b2934c6943259c2eefc5000f5292901a154e856df3c8b7fdf370bc72ffae5957f104fb3b07ed448def575680bc637e3804ce9cca9ce1d85fb79b33e8e4c45f1f974d0613d40c63734b9c927fd0e6e16bb4d288204bb759b199269fa7cf\nHASH: 339b0843b05f2652\n\nKEY: e8b664ce32d35f060e5a015caa287b7f\nIN: c9d496f2e1c2141154bfeb0c4a4347fa7fa002ab2573c634b2c2a376fd270c7d45d2fd6078e4d997aed34bd4dbfb308e2c1a14d07f58e1363c3fc4bf32adf4af4a6d1bcb79e4c5c3db2ed2c68fd2229b6b5fc831d7a2cce989d2ef8dce13f9e076aeabb5a30c7ae72f4e98874f885cdb52518e71a020e0bfb7c9\nHASH: 254a78254aa531f7\n\nKEY: 1ce06b6d7f0c15734448e53a4fa52fb3\nIN: fda649ace37b9fe4f4d572d8b1b74e28ba13db46f6b0f42ba9ac940d379d6d50623fc1ef7545763651818347ce38a3d86828148b14ef090dea626c5c3d1379341704f719ffbb234e423b0024ee635ccd2ee50c501d8689f84c929d689745a05bba54f99a23fb248366ab05e31bfbc18be87110d419ac43834476f2\nHASH: e5d2f7f9315945d9\n\nKEY: 84c2f71ddfa145332dabe73460c7e03d\nIN: a8a162a8b39975a998568ede08dac2c98a7da7021711e159356c13cd39f5080fbfe7f9f2ffd75174ed6bcd82fe0cb158a83d10bd64639f0c6a10335635c4aab34bc0986b898b9b4dbc013fa456a34374aee1a0d437f1de697f5fd2b87c9ad39017434d66761c0f26e81e9c99a9dd57f390f2488ebbfe7d1666cfda65\nHASH: 7c416c3bb889ff8b\n\nKEY: 63ab163cdeda549ba268896b9a677d89\nIN: 64be9cb0aadb6544d4401ba45a3d2b7d766d7d67e09bb2f141e743fa72b8dd14d7427fa2ec37ca6dc5c32861962c7744b1afeea8f28f878420cf67268281ab9ad6dcf0aacdbb52a6983cb91ebfafd294aefce90c6f3628376d7afaf4fd5818602328e215cf1aa3c9510ce53f42dc04288accde985e90224260e318d589\nHASH: 21cb18940175042b\n\nKEY: 2f8057e7a18f356d187ac98e43127515\nIN: f5c76f7b6d6cf30342c1f4673ac063091c9c02862238549255bfc2530f743c69cf4943a9d4035fa1912826673b3c9892a489e0afc011abc45bb5a251f2c80ec97962f366376841939e9997637ee1a2dc0655e9e8a1d262b046cc4c0eccb981ffb46d494d5537cdb202b840601380212f67e728cf9c3867cbc53c0a825f61\nHASH: 843747a",
-    "123971b2c\n\nKEY: 2e764495a9e9d8ce7dce2a634a374423\nIN: 7c7b09631d3e04123eed9efc8ffa34f3182e40ef700f2f0989627d667719a7004a4f0be4fd987400ee12216dd7ce4b57b889b8d5747e5c0c00dfd4eb9011bcd848070ad0d6dee431c50caf613125f9165ad05c69b4859f7ef55869892385cf2fe40dd3c4051a056980805e816e86e28493f7bfd16218e523b2c72ae478d0b8\nHASH: 65fb43b58c02946d\n\nKEY: 1f2aabaf8e9f8a8a428a564020d44b46\nIN: a2af9818cad478d6384f541cd1ed9dfb764f6953c641a6ce40ba2adcdca047eba021f5593b48d18bcbd6581f776614dfd3c6765fd22fc6e76baf6464d377b1b6607dc3329475c999f8f6683b22ab7f0ba1c8d0867656a0cb3840cc80c543acc598a5df3f14dd3d7de2554c837fbcbdeae84529170e5927c5a737c11b92d36470\nHASH: 256afb4a3c5c11bc\n\nKEY: 6613048242a353b7a908c3c1d137a289\nIN: cb24d4c11dbc1adc4f4b65a04b1e9ad37b5257d314c091b2ef870556cfdebb4ac2e4c1348ab5ba2047ff9d62e9b78d6b8a29858dd105549d943d2fbe4c96c78c07b864756a9445a0235cdec30c191e86912d83ee0bd1fa094431fe7cca2ae73e2b611b11f67883812914524f5872011d52514b340c6ff107ae2bd65a1792cd9875\nHASH: 6bc58dc448c8bfec\n\nKEY: a8496ceffa962e684541790ea6a43b6b\nIN: 96c08d385c2eb59b806b9ce99b82f28abbe3ee3dcd481073ce17301029454c7ddc303f84a019c99ba45b339e4f7a25852508c364fd6d6fd507d9e1d77a7e9f71f4df72ecf9d197a31d40b379c576a0dce84c7121c368cf8da052782059ad80f47b0b8cdc6e6c986aba78b6fe8171d830dd4540aa95e8b122961d9191182ff57453a7\nHASH: 56771e9dec77ba8a\n\nKEY: c97c5bcf612aad1b71528b6af8f5a160\nIN: 8761e3d8f78ed3f66ddf9733dc8db84e7c1a0c268e91b6c071d4570272d9bf6d40c76752a745b304ae09506a8b751b76663dc85e48fc52df8df8aa978d082ef1a527d55d3cabd2007eda751dd2589bc4d86b69ce8ec9d0e790ea486168a0fb621861c9c9d4aa76fd67217a9c1fc9eb329160208616d5f491c46fb5159a68bf376df2e1\nHASH: 3e3d191e902ffbfe\n\nKEY: 0300b9d764049d7976f2c54ac2b0ddf8\nIN: a95265b3049332c4de454f08c0ad3c2eddc62b01b6aa111a2900ebb4ab126a6739157d84895e96214cb5353653f880bcd04a6410277991baf42fe34aaf131c3c84a83b6c29899180b1f67b76d7b327a1816c4236ee9d6306fb986bedd21570ebf9efa8e676cb723f91ee14857c186c80725f35d9ad0da73b1e07a1b935c29fe08e6af0cc\nHASH: bf8fdf47f81bbb66\n\nKEY: f93caa15e37c8785f1f4d06a7a318f6f\nIN: 06c1ffceef712559ccf22ff74eb33df2dc03230886b3b76f54c8dad4a6129e5472e4e9491d2ca5fdaa9be2c5fcafe80f957b99d3e98537e67bb6742901fd442e06fa4cfc906f46dca20182f07fa6f92ac75ef53562468288eba37d6e449026c26f08cf49333e7056f9eb29694bb68b4cd2375e409c8b470a77ea9e207c10578cbb1069da88\nHASH: d8ef7ea4f58a0dc7\n\nKEY: 127bc3d3828482fd62dc36ec9a558edd\nIN: 98578efde5a93aeb470503b3400c28c513530c7cef901d7c335b30edeaab40b6cfe429d6ddbf4b32701bb5924c82fd8c683d77bb41ff056e3f325c107493b00b4cf5288d2b364027713aa4f0bf67b77356ca36b5a77f1ddce1ef04b8b7569ea816647849e6eda1d51073a076a9c7eb5b21a3f392b35d1930d0a90de0a28e5e14d4b90f054e16\nHASH: 2fd51c80624ffa26\n\nKEY: 938dbdca5b04ce705fcfa14f2829430b\nIN: 77b7e8762402e4feb7bbb5c68b44003ebefad025c844f62feebdd82b0f221e1efb92bf831e6d0bac80c97234a4f59593bf209f2169a410935c52215928c56d6ebb6cd2ea78b3e497feca2f90f9053607626fd8572f08158a2596247330ee57f58f57eaced51682848f7a979cf95c65b84e9b8d0daf8aa0987c51eaf5b887339c70f00099e65eab\nHASH: faecf6c8febda350\n\nKEY: 8aa112a940a8855fbaa384623b949a22\nIN: 77be78dab861a36e7f7511d0b10866b9b04da12c4d4ffb6126081e8ec26ddbf41bb72f883a1136bc0adec7d6b848472a0037316515a70ce899e3636cfcbb548799371a52dc68551c4636f9aaf358f294aa1ead08ef78c21afa2f5b93fbee8d92ca2829ef1fa1396cd6cab03ed18d85a6250fabfc7cd538afaf2a014ffef82a63646a0e2025db9c89\nHASH: fadfb08f99d573ed\n\nKEY: 3219a0421a7369f055c9d5f7766eb1c2\nIN: db47f97f5d4d49aee4e5145172818736158676bc1bf7bc075bf76aa97af680ef81d2e2a1fab5fa83bf4cdf88bd7aa7610483150ef7046414772157921d0d01a495f35c1f262f4679990a1dfb4839c3085cf716fe040216febbb974ae49650fc7e9b7c30e354bde856888beb4bcaf8d4b14aa4bce08ebdd742f3074aaa6e742c4864d48c94e5e6574e0\nHASH: 0034c746323cf711\n\nKEY: 7197a414a48b2ce83a992351965bd6c5\nIN: 1be7cbb6274e2b1e6b588c6d70fd1ef929bd9ab0649003a69fd7cadd2b9b9917cbc89a069ec9944455e944b4c1bb520bdb97740d9174e6f9eed4fca24a7253ebbf8cfb15e56a352eff8fda4b0823a6b52ea28f214af0caf568c750cb43c2f39219a57b930cf8f5151543194b0f8e68c78ad7a50b08b642333b6f3b674c4ae4879c8d3ed5c9ba7dc16455\nHASH: 89daef38d2d0b92b\n\nKEY: 57e780c523aee814bbf98f6359a23caa\nIN: 44908bdfa0d5fd1f5ba1bf253b20c16c3e2c5834da8e8fc7eeadd21835efcf45ab6d42447bee2530db303bd6821f1b1f1010afb192fe818574e292ac430ed5b6d712b9bccbd235ccef4dc618dc7192f4b80de5ce5088ec3aed940b80c84efd4c6f31ab9053da0f84e39dc9718401c0231f9e13ecfe4f4b731c8b24c6a8f9a9bfda9ececc2eec200ff742d0\nHASH: 5ae9f9dc3920c206\n\nKEY: b0d51d3ade35641688f258adea74e9d1\nIN: a522a571bdb8904928f1c4e79aa00e791cab00e426d94d0bfac5a9af48f340531fc0c256aa799240befbce757f314ff9a38ad1e994431e11b771687c06e0a345085a5bc3f95a76af6600f217cb66ff85f60b39c120a86ba012e86d43811347ff37b61908e65542a102747daca5d3558118d3ce2ca2dad1c38131df27e42fccbcfee78eed2f87f2bb250159e5\nHASH: 4bc688bb42425151\n\nKEY: 49980eb295bb6997555a0504ba4754f5\nIN: 31e9b2ac04a1cbaf9f7c03cf2d70f90f683bbc0eb2ddcddedea917d14414f7e90fa09be64ac18492e2d90d6977675976cd5abf0e0556284a5edd773d6e4af29b326cd2be4e16c7293ab0af09fccb9d16701e6db5a81d42ea0575531c51cb5ea076b7c957a94401da78d43076515343db0816fa20c38ec5d35413924c70fa0157b280b02dbf982614984427d950\nHASH: 1d70036369da4147\n\nKEY: 67a590f4b8c902865a25e380a81cd630\nIN: 35423f98b55467adf90e372f516483fc3ef1d72a001e190c7a29545c9c993267be0757fca45ba1495f65218702a5f617ec8237710aaf030dc9264afa9c7da8ccc16f2c6775ba1c65a1a91f4eaa4ff035508fcd4cae9faf3223e97f3d84ff0897025a25c687d58b2876395647d7489d1fd714688f64ff47f97720f4ec5b0becedecb3da35949b40d9bfedc35dba7a\nHASH: 92b8f8135b61c24e\n\nKEY: 5542c4636e7c3067df8a15c873bbce77\nIN: be24fea7363b5f0a72a850c79d709e3a990b416082c4c33fbb0b09c97649fa1c56d15abaf14cc3c2c34d2a9cfa30e67988b697b7d3362cb07c460555ebf1f5e1c03eb905c8d0262880aebaca524bb7edaf79bd3aaf888be6d11e511d7bf6db5b89b0a2d2c1e42baece57345055b6de9eb67c2befe8ced5b4e2184d46342f3f2ff24bb38899ab974d71d2548f50d21d\nHASH: 5236a88232eb5ab1\n\nKEY: 2147fb23cfb2f82fb93cfe405cc89f22\nIN: a65cf5b4dc2eb1973009838bb3815749f4f3644a43057ddfd61edd942c4192ede85787193bf707d6bad890ace02c94b4ee2348a159e61172305eccf50e7cf8559cff42fbaf7a100c234df85422d6d9c0b8699f25b58e991a1be64d537566c602fbe54980398c238a2e87425eb7c74adc6d2f76162412b358978ced512bf26e7507d671c393729a9ac3a07c7436dc9cba\nHASH: 2da3b7beed2821f4\n\nKEY: d429971af1d1f3ddc043dd56bea43ecc\nIN: 3a28e01bb245cb6435025bef500ddf08593d7b3c7a8be01651be6363dce1e7a3a59f49c0f9403b072664700e74f4599b92f21d57886d97013a24d1c6a49db7de84176be8eda33a373f347ea8664aab786b337ac1d88148bdb4dc456a92b2a36621dabf7107e39e4b499e931bdcd21a1949f0e9eedb716fa94752d2a565592523960700187aed35e490f45da2d7ba382258\nHASH: 838d68d92d6af47e\n\nKEY: fed60ab1233c909413a7f8de9a641c8e\nIN: d46c4556b5031479e01d40cdeae3adcd14fc6ea6e1515ce7c976ad6e62a97df03b786ff0e7a66604de5d935256e550853609aa6498af380d2ac609723f949f01662240c3925eeffd16793c1b589e25cbe6ba00bf437e4ac6c56d96db33b17bf54530480588adcb14d8b8eebf1e6a5dc796907239bca7fa2f43e1c51ceffbde22a61eed45aca9ec48f7ae11ea798c16b903ce\nHASH: 4cbc3c663ef52c50\n\nKEY: 2d2231ab61372d4b93421dddb351467a\nIN: cf9d2b12f0d61a9ed081b308fbac0ed639285ce379d6c37aa4acb97a675a13bd2a0acab0ca4f06e557aa670f7cf2208cd5e37981f4c09dd37ed4677cf8d2206f0b09aa6185d152263b8636ab1f439c39d33ff2e6ff433e3d19231f07853dc2b762f527be9eb3640af960743f2500731b7f4593bc4c6a322434dccbe808aab7f0936a1fde0c10d8aa0c856d782ffeacc3e2e768\nHASH: 832d6dbe4d2ec17e\n\nKEY: bb1310e68d324c65d8d1269d60acd39d\nIN: 8a8091da5940bf6ba16eef2ea3cc5d4728128e0684fd453f6527d330abc2ca8374004f1f10a54bfa4be8b39d4f77b6c89d481e0fee2604d402c1593dfb930e7da4d314c70d4312dc2051cd05f16680b5a5748f81a1a448fe4e51b9184e6515f3dc61a2ed6d3866d8aef1df5610c41a3515420c6d5ffa9a89f9b64a8a73f0275ac63d5c09e60e3446ee888869e42a8ba3b849dfb6\nHASH: 342bc4c512c02b30\n\nKEY: 20d58e0da885103776f5147b19bb948c\nIN: 02b2b75f81589f8948471cf477f22765729a7b75368e3955662cc3938e05f0c5a33ef9e99877a5bdf2ad758165d5ba9b3e6646eb0e53a07aae5abaf73654747a9163038ab35c1303e28320d26ef8aa56df8f3d83c10863c5364acbb8d4a11b8a881524876e7eedfe087a76d19ccb4af14ead8390327b5b878f93758a665fd330d7923c9e2d56a20fc8896bfe5a3533df613ea95717\nHASH: 2fe22c1ba3676005\n\nKEY: 2ec216c155f5e259a96fdcdb37f40028\nIN: fe8d46bdcfdb671a2eaedffea8c9a454a5556c41b0cc25d688ef101117707c14f9d1c1410c15e895bbd90170d3a2b910af074b40d8eb426c588a2121dc2d952a200c364a31dd919d7792645ac3e1534ca5cbceac7a95eeca04b5cffbac9b9f3b58e6a60d9d1f1bc7a961975b8f52532fa7ec0a9c7250cc383f6b772be3",
-    "1bfe86accb6d2cc9a32ae42b80dfd723a401ea668774d41086\nHASH: c0c1c1dd9b39ca84\n\nKEY: c43d26f4654e21ef41fa72e94bd6d887\nIN: 8425382252dacdba8ec398cc247232f3fae06c2efe5b19401c4671f2664bb4a97e5987e31ae32ee0004ec4c8d0abf10c35bff9e6052d490f1578054ceee87f9eb7d14e0511cc65bff05bff59893781b8a81d58ad072d8e84fb8295210e0ab19cb4b2acaf63e6fbe79b74bcdf569e35aa14c66897d98a9b548e65ddbf5e50f3360666bf3099b8bff1d7ffb9a14bf6ecd12227c504fd0b68\nHASH: 2333bacf5cfe1865\n\nKEY: 9b564f82baa0817b7d29c809f724f776\nIN: 1d3b1a79ae01ca377affeb064b11bcc87499c9b1d1ed9b953c80fd54ee703117705e673ed099d4578cb46f717bca43847c6e98c3784dd69a5298b4e93739d5e8f2c216cf0added49d4a0d9ffa38bfa9558a71b5c43edf6868b295cc020ca0bcaccabe0ac3f4d9d1c6af44e26d8fda776665d2fe26ef1f3b45fe25b4fa2bb6b14632673694f76bc83faa20636f11be7f20fa349006f5d6e4c\nHASH: 911924aacd551b6b\n\nKEY: a52a368bf2f969a1a37d793ed929111c\nIN: af15d675299a6b3a5088ba60d36494a5445d8d3eecf2225290cfbef8e86b1fb333db105d24f10eeb9b132a2bb9f5aa754d593a1bf96995a3e5ad900d9b6b2e202ed87777238ec6a717ff2323c9df32845bbe0e89a1f71e22a1b603929782e3f70e09de5e18d47f07ff481f8ef04b0e6e2c4fe6f3d76f24123083b25e15fca632d83c66fb474d649815d75139dee141c96942b4b9940d10e3fb\nHASH: a3f506fe42dbdeea\n\nKEY: 6a7f1c676caba982cdd659f531b20c07\nIN: d3a37b3f01de3a0497cf16531f4887c2e62afe87b80859329c24f76ebd3cbb1f4ddd1d9960b19308dde72ea1c6bb5b5884a9acd93c5041986fd7ba8e8717c66f675141db28098523e1af51d6b31ea372c8a7eecd9a9bd7597ec7c270ff5dc04851dade76a6439aa7b5a1a4257413f6996ce2f4093cc70aa26b0418749808f11460f02ca76076e558664115fd627eeff45241e11842f406a56f8f\nHASH: 8ea572557b7fc5ee\n\nKEY: 045745caf81790221ff9f8acb4bba8f0\nIN: 260d7c94a27aa378db8d6a2a9da9d477d4880631d5b1741810f8b56db31aa1ad16d7c6f956f4460a2b1d99405c1fd51fb6749dd87cbd0df18ac4b6daeb46572e26a5bcd5e5db1b8e8b59ccc78883ca734320b0835275fd9a8bfa35f7ecca13025b603369e449e2c1f35a506f72b24b021aff6ffed29abd07478b5af22223a889017ec4db768f1ac65d6bd0618bb5b5af4721ce797626e12e0b600a\nHASH: 832ec0dcece0b555\n\nKEY: 72bf12388602a326c7cc1c9939495847\nIN: d3fb27b0d7a06d49c5fe54f085bedd948bca58314854dae941bdfeca2ff34d17d8df38faea4945795e7527bca957585e0f461e6f08ed8575693490f047edc22d04e4a3c77a9447179b2885dfc22f602da9fa0f17ed17f83ee422bb6dd72a7eba32a85017a275dec1174dee0fb88264a65761a812d74ad9375c415d843a9ac00b7c55d8afa324ac9f29cde5c3cfb73174d95671e7742917bcf1a40318\nHASH: b4f1eb30f213d07a\n\nKEY: b01c6a8a5c49380e00bc20c6c506ad00\nIN: 127d4caa813734f023cb302861fece4f776a46a1732fb0c9131c311ff977935451cb5efa232c4bdb7cf7723f4b9aed17231444131cf97c97dd0ca77f4f7ca88663d17ed60d0937fc0361383c3d7ee9fcac18811d36b7e49b2ea6e6c36bab906a11a25ef73b4a4417f716945dad3b6f18e25ae62511d5d2ec760d3deb77b7b6a9b1b5cbc855841c883c598dbb407a546b999fc31c26ce6e94f8a9a16c47\nHASH: 0931c8aab2db6545\n\nKEY: c495ae680fcbc9cd7759e3e14ff143a3\nIN: 0c1ce9df5a85811cbc326c0746fd6ff0d1f501746fe0c2c2f18312c8c8625df7b57e0333972fd0988bfb5dc827a72321391f6c4cae82007b0402dfe4d47e42f8677d2f134044a4e12375e185d02008e4fe81c6558afec5de8844e7c4eb64922b2ff968cc3f58d0a90666e4f840185ec72f0b52514cad7ac2f8087551f05a9753b9a52d8c8bac82d598e145313eafcd44570a170ccad306b0c146296b8ceb\nHASH: 2a93ef0059f5c80c\n\nKEY: 926bf63e73343bee34936da2401499fd\nIN: 8194c53c998266d9d0c158bba46f4849b399e72b786131cec217d2da503bd8d35a5625cfe92752069d5e4f738669bf1c26029398397609bd2d5a85ee6bbd3a244630bb5ee6986680296db1aa64d1d7b9d35629d239bf31bdc3a4a3984b4e0904b034c746c8e4d6d2a49cc6597aa0357df845a00a37c924deb62b77f3a15389c3188de0bda3623168607b3ea827d62b53453df4d54ea3f2a4b6f017a4959901\nHASH: 98be298ca4415fd8\n\nKEY: de5c7a655882d27c37ca279616de0b33\nIN: e93570ef6bf14f46669bbb6fbcacf70462b7a71aeb777966a5722b3dc1432362f84b952627a0f32d6fa6be2e1dab80eacdf5dfadf55db54c2e8c93a38991fd7d728f3427b6de778e12ac63e1a914f68e7841b01c322ce2f16edd00c74b828eeeda4a2cf7367e668501fac1f3308e3d2b51555c62622275c48f0aca93d8cc8756ed9bf936ca17b6821a98a8ef21934a7944bae99362d0fca7f0c2f83e0afcd554\nHASH: 562d46195b277315\n\nKEY: d666f70660c76d1aa3cbf1a0956fbf4a\nIN: db25c93ba0b4101123ba569bbd02b72271f9cd53e1ce0a278196e2577373ef4d8a6101620e80059178c246549a0ba044de308892f57f10364833fbe4217d3075b8c1cae540118fcf1ba8fefcb8ea62644461b9e59ed12aff0e097614e111226e42615ea3bcf5f80b1f1eeb5335d156beb0dab7877a646199c55a36dc53bc4b44276b5e698df21075d4b49ddd50d0deb12d953b5f90432d5afaad25833baf978947\nHASH: c34b39849d9c589d\n\nKEY: 7a5fa32e27e1f28d306844fb734fc755\nIN: 10ecc8fdbf72e80f52dc49e927a9303c890c0b31173a96ba10e3afcaebf25167a251fc824b8699d665dddc8230b960ed6431ef13778d4e5f940db1418d794e012c6b9b351d046948faed0198e2c1603d32f33cfb43f67599a850bc7579fea83cda310a73e448178c80892b66e13fa136d0c99bd2f190dee75a8e1cb4c82ee7515993519bdd4ff3050c5325fa0d4c80534f93a432e7dc3ce04c32eb60f9ec3eccc85d\nHASH: cc4f9f646046b152\n\nKEY: e0689b5340183fb889927912068fa4fc\nIN: 0824240ab7fbff4fcfffcf200d9bffd34d7c48261be53c7a31db69ba7234808fe3db7bb6eedb30519336cd08c8bb2971a1be8e60924146eb399c31166c0ffe3033df9c52ecdb4d03c73e3cffead68159f41078557716a5aec441193ffdb700512ca60e84b7e366438d55456dbbcbe7d3ee3c579a3e76e64890976f92883e050b54dbcf3d3baf064a4e8282c3ebad12fac36220c8a132994572121bc0581cba69a727ea\nHASH: 0811c1fd2047ada5\n\nKEY: 8da46e363894fd77718a5ffe68c6d857\nIN: 3b956f2042d2b790ca3119286099ef78778248eedb2d12f70a3e26381d738a8369a4828b8e361e5b4deef28e7acebcd4bfa231548b0d94cb910ebf819c605ef37d93de7465672daffb2cd923a2e812b20a34569aee20ed20cea5f5f5c32b9cc9f09fafd58c18a05e9822ebfe21d461bc29b2017a199ff0dddf06880e385fac6505f91117db236edcb086b381f61c33d5af6d2ffb9cc5382a7cc77a7579a6d8456fbcf7eb\nHASH: 23263a4fca4dc1cb\n\nKEY: 3a0ab8c2c4de1229d5bfd41d75978052\nIN: 7d3ce1f1eb5fe650d815124a0f3a2d07220ac9bd487367c6e836b669709c9908ac0de2caa7b2e793ae32eece0e413f2f7dfec4ca7edfe7af975bc76fa84a4c9ff21da673de4d1f3c0c0b594ec0b88ad80d7f85e6aaff2b716e236a551e26cb20f3272ef4a60d46827ced1e5c1a4fefcd315c34d7611d985f2f6127ab0c69499e17de7a99fd9788c025a9991c6a1d79377ecfca18f72853192dd407a2344a51893cfcbc42b7\nHASH: 8221bf0da6c9d0d3\n\nKEY: 38efa39401d4d49225b67bd14f103ebd\nIN: 4c16db14037807b7ab4d46c057234d05be8970ce094b5be27a2346394e77e777b66e623633dfce3dfd941f8effb955e41fcbe15c8c934a684f2fdedc270516950dcfb16a99208335fdc69d913e189b04e4c60f71cc714f79a9523840f9498bf419862108c2285688db934605921d2c3b04a8db17cee417b8ea8d4cfc2bd67380a415bfdc2cac0c071845d7e6e4b967275fb4e9ea3156ab23db809cc986a0cdce5b09c12d827b\nHASH: 4f1e74abfdb697da\n\nKEY: fcfea01b83e67edf2ac9deabf7b30cdd\nIN: 105e560add4f7bf41757314d320a0741cf5659e45426fd73af9327b7408ec22fefa5aea59f43fbe0ec4a2fd0029d9779a19beaa10198084aa6c1c392a3d25518e9f77f83c7c780a129d87f06358dc90601f96fd25aacefe3f08612a98455e5ef9def288aa840a53d062d9e32d6729404fbcc48acf54784a715c13181804ee8ee55b68e0d5a43daf90fbbc36b22e786d895d6ca5b0a1241bef424052fa29a060b861c344e68c234\nHASH: 457fb4e835a8fd94\n\nKEY: d8d385fb07052df7511d0ac37d760a64\nIN: 88458bbc3d96c209e981e3b3e7845b529f373b80fecf8d4f3a5e6db3ee2fba920067733939598454548183bb425523bbf4cf9abb3942ab09a754f760b381b7105d2a31aa76210715f3e6bc6c79f62e754dfefcb0db512ca02397c2f00a169706a5e602ed64a62e307ef506e249b26afa2bf49fb4af6cd8b821a03469b0ddc4e054c6d5368bd2d69545dcb7b1df7fabda3edaa8c8c2ba9cfa9d126bca2defffc67b23c910003e05bb\nHASH: 2b23830e90785de3\n\nKEY: 278c8962711f0aded8a253e4b8ee6c0a\nIN: d10cbfbbd89f11c12183799340af2ea59c6f83465e864736dbabfe83d53fad727d0b432172cf68fea351f69261d63cde5753f8ce15afcb728e60f2d6f85e02e8089a5f6e230595f0664dc1472bcce53abdd0565744b6c58f3c874365a76efeb043804df302dcba2d7550834a443279889673f1f1b305a27da243ddacbb3e6fb60451121a7ff17301d66ee4081b09bcd50d94eaa1a087905085fb84ee6df10224f953f2356e729e53bf\nHASH: 2e6f8d56bc4ffa70\n\nKEY: 12a1dc868d6221dc01ce0b91a9e3292b\nIN: 49ef1e9f72c7099589233022f6f88ddfd33eb9b078987d92564b014312613be083e108eddfac4a202904056e6eccce225cf259c35bd2e07b23e68240b37503c5c93e1bc497685cc82986fed06c8ed474cd4fcc59630ac1c5dab3bd5096264468910f741622ee6a42c75b5bf899e64a0bead1e68d44f55b633bff935bea0ed7f9c39d46c1296ea9c690f341b30a482bc04c87520a64b6cf2c55110e9d018288bb162612ef0a55f8bce78c\nHASH: c15f435c7372dfda\n\nKEY: 04cf89ae0df7e320e9adaa73df59a141\nIN: ae5d6ce0da399f5b9fd2ba3ef2ebfb8f039e41cf723eac3e52fc599b07e952fcc9dbbba12ffd22c6ac6c7135a80ac0812f6b09457806cc5c02fa6250cfd65dbf7987ef56c180ec5c2f6312f98e9a72369156329abd461845e9b02a05575f07a08fa3f462dd0cb618f752a4f0977eca76da4f46cb22987c2e6854c9828ad7cd03863b0e3020ec6737fbb48c354a0bb8214df8d1172f42744d5d3878a27ac",
-    "b63dc6a004a1eec25074149424e\nHASH: 511dc81ec62424dc\n\nKEY: 16ecb48798f97a2c4a8ebe5fe9b1b375\nIN: a4a59d310cdf2c1b4acacfb9e63d2e1f1244c4cb48c665d72c79cd70453680f98f2753b1c5a5a3323b1d33566ef0ebdb80d0df3e5120c6152bbf4abd3572a80d98e583a55cd78634b555886234776e32847f8d39e39819d2dbc9b7c4e301cebd02b12559192dad2e06a5cd0a79823e46ef80f8e645e1b4f9b3803cdb6ba8f8e09c4aa9672931bff14c558a78f1309a006d2f64cba68537e4aee3002d5a9ce6a8a23503174d98e508773826c4\nHASH: 080bbaaddc2f3aca\n\nKEY: a9b3eb1c9fed71274a5cc15e1175e68e\nIN: f1bec245f19516cfad98d7262d1a3b478fc82d78df05739cf65f5e6d9ba7c986f3efc3b04c947ed2f0fbac09d2518dbce61526e9e1701e04379245d178819b1da0376d2d08f38c666434a07acb7918696eb8bd81606c8114d348add06f385c1665a783aa0b33d443e1d7277fda197165da4a905ad9e1b5468ca03fd818f0de7414a5a36e96ab244f61eae53ae9c11755d9bf751cf2e78c902377270354b23dd6241fc56128d058374b2090707c\nHASH: 4ccdc25aec4ba25b\n\nKEY: cadece55ade80e5af3978ba47a67dcc5\nIN: 1fe9e5710d3c0c773d6b8859177e867bf08170e6682939f9817a55ad53519627a59d5a9acb9fe2111db912cb0697f6452b33d478702f6bf03bc92465d7f1ef1c3a7517f791c9b80afa76cdeb5b35dc7c5a281ee75a10e9b27a350bfa7a48fef3033fa1bbe3f2601a3b9da372df9233a0ea05415d2a5289345a1770aa71f6afeac2b848d164f63e4ab6437669615e46d27102d8528d70fc76d61c2e9cdd2468311e4cf32eff087aa79252c43deffd\nHASH: f1e25541eebd5ab8\n\nKEY: 84a27a58c3b295d938ab319eaea838e9\nIN: 2f160c9df2cfb78e48e40097671d58f5d7091b789754da01fdd86e3dfeae138151a618197e7c171f29173e529a0750dbbae1331ed480d116190453b1ea8fd1fe100a6333865adba4b2bc1a54f1fc74e1d0453e7de1254802db15bc0c33faf00aeefb328f3b28bbe80b21b71c9982a9074563e3a4c23082128f3852301833cb68946b51ab5d27b8a7c92e4e4d79938e1a92253efc411e0744a4fd1d4e8cb8d171a154753a1a10bedcd310f0115bfa42\nHASH: 9c32983911d68018\n\nKEY: 66babb962005f1759419a54c3858f983\nIN: e280ef4695c8ba99cb645c0625dbe09222f3c010aa29569b54deff561ef13e59c3e9a8f5f76e93146c1ba6b99ac541520dea5adb84a23395c281a6b31c18fa9019245f024054ab9f6c0496228186648cf72ba6b01249028092b2ae655c80abce501c96b2274d70648ce2eae53ee08d60f5cf719ff96ad3379654c8575978f14b381c2c8da88a2fad32372bbc469909cd390bb3dff628822aaee61d17ff04f16e819e10b2fcf5bee6029d6b1da03f6d66\nHASH: cc54beb20f2d80b2\n\nKEY: dc36bfedadf2e697f77984e0e9b17588\nIN: 97743e1750aed90f037cb783a884de3826b789ca544cfcd8c5b76e35f895d75f37f9c15c4b99ae656cc8abe6019379f76002359726e3b144e24bff09665e6c24cec3811247a2ba6dad10d0fa2f7ae0a63863ef20e773ede65f5483460945696d4594af5090499e44503e74cba836970f2bba2407b6da628da8153334a320f272eb995095a4bc71db29f5c597fcc7341c37784333370f88d16c37e8c6e4c06e641fe103b1d103c633600d784a9dde0a6283\nHASH: fd468e0f40f32894\n\nKEY: d24f95a5b91e2350f3cefd0554bddd74\nIN: cd119df440a59ef6b00fc48821a499c61b8075a3b22fcc688c7e1f692e7e3f4bf32d388d332260a1d8d19fd08b75ace47f8d723cfaa4ba09338be841a45d9a9e6710a72c3df42d651062062c99561f64edb9b7eeddd4f16fc27548333d08ef7e53e70278ce10f96c007786a3daec7a5102acdcbb9e5e60f48ce5a3707e4b302315a191852a70d60af7ecf808a48ebb736b0d50579f846fb2cc836ee0326d37c9e1a23ab4c084e682349c13fcd9c86a2632ba\nHASH: 8285187584947455\n\nKEY: 1704ef13ef28111c9fbf1d8a90ed3df0\nIN: 0a7847cffeb15d085af98301ecdff96a65ed9bd8b4f9bab78843352b449fbcd770a4058558d4035bdc0e2792a373c663824c435c8e8b18654560c3777a4b90b39309c7aea843ed450eca8c31a5dc0186745ab445a033254c3d7e5e6aa15a185626a5c3815e5571cb1af2d9aef4d3d52aa6aa845ce8d0880d1cd4bc90cb921bb52d1718c092daf861fa19cbf9c0fa830b0d7224764d01259fb23886926b50a7ae1c5800440b2dda17faa360011611716d91f926\nHASH: a9a18028cc49d5b3\n\nKEY: 79ca5921362a58d045b88e0a295ff5f3\nIN: 238512ada01cc415f77d12dd755b1977356ce47adda5fd1a21585ff3e58da64dfc0bbe908bf12cf65dde9997d75df49f73058c13d5aa8fb43608517e2ceb9ffc723260a7fae31e642c987cc131db9d423f762296608d1acdd10a47fe8042f26952c26b92e7008e3d356c8888ad8de121396145cea0b5bc4ad38eaf2a9d27202d639319ba092b236d4f837d8b2220f97f2d274578748583ff6d9441b52fed194c781f05dec21d226459ba2cca9e5822eacd9a0dbd\nHASH: ec16a5874532d913\n\nKEY: 4638aa9c30b7f2c3cb2ec0a91cf25051\nIN: 38d6e168f88add060593c951113f8de24a52f6308fd547653f50f51e366547aa97c1b3520bf3d109fd5ab90c27154fd94ad2516bba6b248b0ee289781bf76b88c00b28898affc3ac9fa59dd386b9dd97b9504ccf7a1b2f233c4cfe091eaad78930711bd3c7be41bcbae01eda41f1eeb34b1b60d00536890fa3b1b26defee5ce964d9b6a30fc7645e5f0bdd4fa6b37ad00ac09d5b1fb494f62245c1f3a7b829132dcbd4290d98d77cc3493dc15a15703994c86ec6da\nHASH: 99f7786350012739\n\nKEY: b534ec6c31e22214349aebd7bbe1752b\nIN: 0f4ce510497c8751967724da17867ec2fa94213d7a8856fd47f043dbc98d88b29e6250981e9aee4622b18a7ec345b30db72ebda47cb0d51b602ad130e880cb4fe9added6c65bb813342b434bd5a14ce77c942c311ddf2035fe57f02ec143ea99ad88c72120697add3c4ec612084f57c004fce2cd3c21e2be8e0445d5aa808a2448f580b8a72dd05d7ecea3d0fb7a632c7a74acb86d759f16523d4e539ff6122d10b830011b0b64c5a8cafb88f8bebe73f5c7218fb753\nHASH: 2b5795dc26423d82\n\nKEY: 9f113029b93fc164cdfdd12ea7e0ffda\nIN: 50e2a2d204f8647e339608ea3577a1217846c9a4d8275c73afbbb867c1e8dfbdeb6e2e429b6fe6b99fda5e790dbce8b943bad7f94cf3d725073f55c64093ac597ffe4b05cee782096794ca3679dd261e935d83b626f56104f5bd642da423ee3228e9a15fc59034faffc516161c9dcbb55c4e881d6ff51c6b9aec9f2c836c730c152c42346001648fbec676564b204ef7e6c61dd8e20e8d7da0ca21625964f98396839f1065b0a3c11f8234fdf133147a13b26fd3379eb9\nHASH: 9ec5a9511a23ab04\n\nKEY: 77d7b10b166f5a87af290aafa2f89685\nIN: b77006843d57fc1202e0e9e8e058fb4cb77ba199d2e08adc3165463d36a2976f2e0a8a20ae95d28d0b97febcadf861af46cc88efee3d8011b7d4c63e2679bf4a72539f9dbfe9ce2db404345d6d2bd767e1c5a59919efef9037a5b6285e766ad9ac92e15e3e68f831c98ed160646f39c040539141ea91e90e7e8853652088bbbf849a7edd9bddbf5889275d02fc7cf7cdd35b6607fd4597dbfe6b615a4c8097c345d086730ff6f27435527f7b9c5b78928e390d5828e956e2\nHASH: cb7dba8ab55e0d82\n\nKEY: 1171800ebea1b1ff4d261351b05b3264\nIN: c0d61e58cce4facfb83cc1cb920f20f2e294ff8acdc5138bb0f61e9143dd753f0b6d1f7e58f2f25585fd353220061ab0ec0a01b9d2f85ac62f7fa9bdf0ad132c96543b3dd99aa06bc379c5f2563d158dd4822b4d4ec6de886b45337d29d5db1f46838d7f69c43ed425afbcec67bb6d61f76248d83b8979556403bd213b7b5af1be5d98f7c221e91a96e07bffbdbebe905dd2b23c7728e6a8229ced70da22d7f2175458c57d00d9eee6d6faacc6a8d376bcad29839b1b598b51\nHASH: 6a8a679785440307\n\nKEY: 4b6cccc67b66f8f146e2f94820531037\nIN: 4e3676a68fb5a4b0ce3ed5c82710a6e8f536cd810c619567352a65aaa7feb7981adb9072e8851908cbbe4f9cec829bba2b1ff542b6172fda4c8204be0e9f7933708739879f48a15806d9c1e03cde5892d453631e9d36f9d1be055f205f242f261b7499cc4fdf2fc2cf77a477631112643640d4bc394cae8e530741a296f1dc814a5e3882731117d213499e27bf4bac4e358b9740f14f93b3aa7e18e8bcddc78c13f0a4ed6135cb2fd70fc8affa434df3d026417f7fd8d0e3a44b\nHASH: 27984128c2833ea8\n\nKEY: af3b7b93b04ccb242d6e5f712ea36eee\nIN: f432ba2d3f6223aaf5c91832408d2e4963ea34a7950dece6b06255ded67e3a9857c36cd8d1cb745ee6d24ea498e1a6ed93b54120719c1ce5b801b77da662774ecc450946f12d5e6408f6584a7c665f85caf59a081c7994c7c34f63b1050443a59232c9f4a498d0939b181cfe51251f80927060d1442db2b8c07dcdf4d688094d5b12eee1cb54216acc8b5f75a5901496d23bd9d1115025982ee04d8285a404637d3438001043bcf8f87fab445bda616dcdbaaa642a18c0bf7c6135\nHASH: 80b732324609fca0\n\nKEY: 50141e86f8f9671e95fac62f082e3924\nIN: e14ae4e8bc9e02f5ae1124ec5c7db0f5f626e7cc67e1f5b8eed1a51468d332dd0a5704b184166e7fbbf40608dd3733845f5d0445b413ae56aaf51b0049b363f54e2b44f075da74c86e90fdf8b8dd42914fd46e56113850a5b038165a2e0dfc531791ce21ef15d800503163c4d314dfa5ba7da19d80f7b63cf903f40d030ffd7833d98d39a206d44d2d3f901df4cb7872285644e83b84b300a18a8af2e7714b8562a984b8f091c161cf63ff2a27bcd1c0fa74ab2c9b4659c6d865e83d\nHASH: 11cefb921f4e2a54\n\nKEY: 3ab1d3d853fea4c8c40da2d64ab8c34e\nIN: 3e14ebadcad09ff9550fa9a14a0ff24bef1b9acfd979ae767ce7c7f316ed56a0d77ef6d205ba315b8a8a8e931f365753c673842f75d4449d8ddaf010fa6b1e2cd7b7b7c49cc85231a827c1549836dcae35e8ea7ed914760858d52e9ec31ef4435485ba98a98e065ae13648547813bcff9052fc5ec8048bc17b06dd05047235ec8ef9eaf2570efec25933877f44f06f3d2f4fd8adf9103babb7cf528abad21431ff18bdf0aff912e2b4e6850f819f349da617626a204b6ccb28cdbc254b\nHASH: 851108e3cffeaa47\n\nKEY: c39b333d7d4a61a37122e1a399020b0a\nIN: 428352711ca82f0e4f10a53adbb7cba3eea77065db8f7c4375c7533330682761b095faf2744b17f057a60855b6a432ff18f46be9d9a6ff928b4a1dac4103cf9ff6d8a24f84c3709be5a6014155fdb66148d4c1286adf18ab325f4486210b941e48eb29cceae0301b786b72cbe7abcb4da0caa151d010a64dbd6d1b36a1dab555552dffb0acae07e4b9ec5a3a3e0909db4049293feae4351ace9ae8f49370910e20c84f6ba6b6e440439cebc0736516cb8efa4ec594eb06fe335e72c08f8b\nHASH: 4ad30b7",
-    "af37ee5d1\n\nKEY: df1f17488985e7fe097d7ee58e087a73\nIN: 2ceb8b8694a92ab60a31c6b8f1ca7622ec9ec5b3c7548540feb0fa63846ef5dae7a1d0566cae8bb6936c658dd004a2ae17c50e392c37c8daef2d10494ddc7f576224e173a42b549eef4a53afe9c0de7c36d3b3f4bd34daf6d143a3abe08729aa6f9c7e373865ef8eff4a0d11c4d632e14801c6581c7bc87f0db3d87e82b9dd7bcc99b1ff883771770b12c755cdc5fd2b9697c1a49e17bd3beac0f1d094ec995fca8766fb41f0780cc0c6837b620bbf1c2be83a40c599072a0fcf660d39e603\nHASH: 7d1899d71fc9ed14\n\nKEY: ca74e3d171ff6157d16dd34deee34055\nIN: 2799d78643a39f5580dcd35258bcb28cb70e11ed8196a463bc6077ee88545b68ec43ccd0fc6b6e8e4d0788e8836554c6f071199ddaac02e81496017703800e7f30c79d420e2ecdc02ee1af6491be002d19793f50bc1070cb2c4a26c63b47c9fad2c3b5e9bf0918ac7f020dd3d88994b3750644eb15189d5c610c1068cb57174d645bdb1a8cb848940d0cfe9aa142c148890e4781753ab5ce30b5bf8037f9c78a4bd8023beefdbb00df2899a561fef1d80d33d8ebbbb87006becf7f0120f37495\nHASH: 1c2be2a14e15d1f6\n\nKEY: 31135badd1dc6ca387d00ce70579ec42\nIN: ba28ea9b2002a941a88611510582291a68b09b61301cb4abd0b70647c7118431aa435710679f462556daf91b587cff691344b8a8e5ff9314ec33b9bf240cc03995d968a52d35ce359a34d2f5a49c4ba61658aa65c3cde58ab36f46131f0513e21a9e199e00a8626741a641b53fc910e6667bb99ec2656866a90558ce2056bef7524b8c90c531f17003717257230ec9d3e56a60161db370b3958b2bd91723f1abde20cd69ff24819ddc50df63995cfbe1fb7560d24916c2e328568895b1ee7ba0b2\nHASH: 3c0f1863d7a2d4e9\n\nKEY: 039bf03ade84eca468720c36b402d4cc\nIN: 2bd881325c05856a1734e711ea05d6e541616bdf20bdd15efb684d8e59b57ab8c0821e877283210ee3eb0cf6730ca441850a6320a40eff262df7bcc00978ff53a6027ba13788c0ee38c31343d0f9aa2cda03766c6e77541fb1716345eb5c65d13f0140feea53a98e30a2c3c8c7d1c47d99423b4f4bd688f7d97cd9595dcb656abfb1ae6bd5069143d096274c4cb06be3994b7533f5dc3b942349034bab8364c252b16e2b31bb4815b6a0f0a9487865d093c22ff0b68e23d957edd4a5364f4c8ffc98\nHASH: 2fb62b186e731663\n\nKEY: f856d5b9728dcea44e15d80ddb3b6b33\nIN: 4874462c3e4302b6ad627c8ade84d1117f33599c56831b7a133811417e6993742637d8453551931456413c6382f7563b77c93bbd9b0d19704cbeb5ea5f1dd6ee7ce41b3f4511f8c9e4879072168ea0eb9a010032d1c219af6b9539124d2df8f3ab76d12a436326c210ef6929c138ec4e019e4362c0e3ad2008ad90a22f8f38afcbf2c056c22cebf975ebb1fc1de28769466cdb08ad033a98a9988dc8fe887b7ab879614fa3fa2c32967983b268299252aa380dc18c14e88991fdd69040e868bcc05cd4\nHASH: a8a18ad22ad98ef9\n\nKEY: 75c2435bcb43d763cdd27e211afc3f0b\nIN: 53383c8bad7c0d2b9f50b9c241c90b4d35db5a93e91f3b00374b83c34c88f3914cb2ae9af3d7f828022e6c096d22527614830010e495f609b860f68f7e42bb95fa76862a7309b4bff31037500c73220ff9649bb4e2b0a80cb57cd88d85f88fbe79f34350e8a28c4f9d99badf1ac1d869f8c1063497c7ea7e51a5fe96341bf7d448d865ef3a199fc68308c22d4c3b41ef57bfa185a50c35c1f3c79bfb77395eb9cdef055b26a0bad6bbd0c038300f127e74dbdd92c986818320f4812d9c85ac2b06ce9508\nHASH: c85bdf13c1da265f\n\nKEY: aaa6cf947414e4c120c6efdba9f474dc\nIN: 5f2eea1b42f0984a7088d6fa9b9c87702b5469a55372fed5689d3063ae338a8ec902301fde5e25f3ec0b533427b8443a66f0daa3688104cf1b5691e1336bc1fe487f62dc2e78ac879f5e488be2f6e1dfc2d9144f6bb688ee76f545dde08b91a6470ef4c22a391d7a665978d38cb46235bab1d8b8b0e7944280398cdc0cc643a58fc1c6c646ab1766c1cc616ff4ec2b6f2ed0662a9382434295f122c877736c3ba96632c4763c89ded4541a95a8066c5b6e30ed9c025b07887b5996439c3e13e357a49ca0a0\nHASH: 0fc0dd702f54bf34\n\nKEY: 299646082ee293d1126e514a30d75da8\nIN: 91422941ba7d149928ddb44df20cf55d71e2056ed59a569be53bdfe40349f066cffa24c1d55157af584af63558e86413e6dc3617d090a8328badef05590a6d2336ff73007342d339295981cb5c4b6cedb0808f5e48da37b6af2baf00f9e491fe2e1ec078a7046a15621b921d1a18e1671db82e56ad141725ea37bb7e736c8ce98ca1df77d1635deef933ac635e1bf178ef4102b6bc2b8d8f93d42f1df1bd7d434f7b451b33a694749bcb5e23d62a254cbed73a2273a3c161a7734cc8466a025a42ea712237b6\nHASH: ea1b7e5156f09163\n\nKEY: ee08dbf30fc222795a5ad75bb6c3714e\nIN: 082ba0d74dd5dfb47a49ca851322acab428a9fd84148e66fd5786639d791444356bc79ad9d8b9ee1a2a02d3fca92256ea04b7666708723e2075ffaf3dab7ff1ac397393153e420e8b623634e37e051fbaf5c0d48eba065345cb1d7d62304a88671043a1f16368c311ca501143f109e850a0f2943a17494be97d839bedd35285c4b7fc38b59280595db53acde23d78725a376b17cbcb06325e4b6ab5b0f8d0da4f190c5a288f4ccbb02b59b1d20b40fd8226051cd29ce948bbba97b526819dd93b85943ae6d42bb\nHASH: d45c3f2164c5034e\n\nKEY: e5fa0a4bb5313d1b481c5a018fe78952\nIN: 89effb15fa40020a554fea99be68572c03f02137fd9f2a41b8fadbdf6dea0e58b0378ce72c7e9ea4c2222b748aaeea397dffed1337a80e23beaeff1dbd9a16603ebfd53499116987660c8973752d1c9826370185be332bb1ac482baca01cc566db732da2a806cd6b7d2343879d137704414ff4dda4d82abd82cc9c5a6e5c4b6bfffa0995ffe8b0331294490fd05c675fce48bcf1480d4fd0f27bbe5be94b8b9dc1405a6ad757af9f4eb4b1d9a2e702bede28e7c7ed4781d244c2604c1e8ce8ad5316726a3c351bc6\nHASH: cab01455abaff8c4\n\nKEY: 1cc039133a9fccf3965fe20292a9a6b0\nIN: 058962e5b3328cc3905371467abe8123facddb62a59ab5f321f6b3cc8c43f58168ad8596a5b8ae47a18f327a89b0916e7b5df23dea5f7917773f4bc2560ae7b65ec57a4de0f03708e8ae7e209e5136f196e6a731f39650ca5fcd35355c5e77a8c3c5b31ad7ad1364e6ec11a86d26a9aabf0a4d1d1cf2f3c6ddb399fc4959f2662c0dc56657c55e451ee0e7baf581f2ea73ff843d42e75975e06937ab4239c0d6ee67b4ff101cf6350e0f8c73ab63a590769ed282d11b976a92eccc462a58050514ec2c42f11f546861\nHASH: 57b4c25b6cd917ed\n\nKEY: cb47076e391ccc17998bbe98bb92e790\nIN: 02a2f35de13c06d3f20322cc427e8dffef4e99656acd8c9a6ab28f3eb9f65d41eb54b2b5c7ff8f77ba42a88c1dbe02195684c3149c1875dfb3611910245c734479936a94aae8e337956687a062d82654ac1f688171da51331bef1a180975e4f7b4711d587033e6b7705fb44fcd4d746e071c34a2c88fae2af09f1f7335def555f809ba8c85abe1af21ac4e67bc30d9dd81cc8a453063286fc090c6a08c2269fcc48531853337dc9707811eca54ed466f8d7996c46b599b6a1e82b1a39d3185f98c7333c87fd4af5121b9\nHASH: 3b2294558b1e0353\n\nKEY: 3fa82dc1ed52e4711cbec3305346dfdd\nIN: d79baa661ae8ad2832adff360b38a1779b580f6357eda6b37911c4197854b5aa7e63149356e451c57480e1e149e2627a627e60c3e49b60eb1a1e5c690dae76c0d6a7112e3d19f0e8041254d07ffe4c21d8d931e889b0ff6710c5a7462027cc7e67266a332d596dfe6b854fc00888956e58f7babbbd3f8fa25c2024376f0132c78faf6c9559b18f32cc14e97b925080070e3ebfdab0f81a7b05d9d597329770f778657facbf1732f12fdb080e220960b7835717ef9fa58f1a7b535db36db9f2b944db2a6b63e4492c73b335\nHASH: e867bebdc0e185f7\n\nKEY: 4997e7ff91d638de29f22687c97f9835\nIN: 568283eab6f40f158e5c6742da6338d402f4d05cea50d6e18da7e3b0556edf1ca5121a58f44d9c86066b917b57cbe7f17f497772be54022bc493de67201e60268a23d3f0e8024db58eb3b6c4805c326374218374c5927d60069c61e37777bf76c59f166079cfecd65c4479e98859c514780c07d7259d2b25575f56ecc936976534537908de6e4d2965ef16ca8af35ee21b937ee17a8a125fab11a0f59c450f4b8c3b5d1c5035ea73c5d71ce2ffaa1689870170b4414bfb17faed8baab239a504027a7770782c8e6c25e02162\nHASH: 6f9ce421d15fac38\n\nKEY: 02c1994ab75a1dd3b6c46791272f8265\nIN: d5a7e586866fd0bd586e76e15fcee45323cb40ab0a7c92030c07d9ceaf315c8e8e10c20620ef20b365f693c5b71011e05afcca7e74f2dd92385a6fa9bafd6ae6e97a3a4195aa50e75a223573f5cfab0ece3183f5ddd9580607323bb16fc819b3cf76e0d4147830cfb7c9711577707bed8a224c806ce062748a20c8f386609da289827be50904e960809e0ce76ff4416a3d9cf82b4b5e3c96ffb11ffff6d846481f2035029d3c1add9be3232121d3794ecb1bea6058a299f099118c20be4ad5baa4e67784f92feaaadd54262383\nHASH: be78e88292bdb465\n\nKEY: ac06026fb727ae3a1211d369197706d7\nIN: ee203a0e9ebf6898bdd645057f8afb27ded7d7e9c1660f3fd27f4489cdf3286a79b9112f1ded1a878db6336144b37a591ea074d6ac358da8f08b980f4739facce60e0685ccc3d939255044996e060b082e9055c66a81724a3e2e00aa0d4779bdd5417f23a8cb1e8364c0404225700df4a06342db47cbe185629a8b4e14f14c24a8c6784f9168eaf4f0ef312ebb18d6472d63e748d0bc2b64f8d31035bab3aeb9736a22e2b3b42deb5d97a3c405bea74049086ab4621658adf42293820bc735bd4a748677f711588c5cb7986c6c20\nHASH: de3a48d266533d5e\n\nKEY: 93db71499f0fe1bb7035d7a4eac9cfe7\nIN: 182709207410de3757d35250ce4483017e6f1e8bed619dd367b9e2761efdc1b538006730fc67f57919bb47f9022ecbd88db269aea43693ac22206c4223179671155b7726e5c87d7ba5abdf38b1d1380bac5a9a52be718a37899d2d35ca1da2276a42d411a7c54a2ffb1ad98f7c247b3fc48b30c54a342b03ed474d7ccf18e3c72c8ed3b00cd5680ea8a0b8bef4df50f12bb6df3352b8c7b10d0e6a4a2a9317c8f25b9a1340356041208d7bd503bb6a66de10cdf8775b56b198260bf964720811933dce95d39205ff8675c89a321545\nHASH: dbbfc5d600229e64\n\nKEY: e8d3571f69d87217642056d3c53b5f1a\nIN: 3a00d589366a4d245980592068b36e1c4b9125cb93c8db5f4269167eb99dab924ba3b95cd0a7688bae6d3a52e12c463e904a4525467fc46c31e32a1681c0b0a08c1738caf7beb944c676406fe3eef522a873230117b940642c651a947e0edefda4a9230762a12cfbb4895293c4290b8be3d04ca143",
-    "07ae885f348a25b8f61addb5b8cbc942f92abb872769d4c9e8e8538224271bed35d767bb77e1723fb09208412e604e1fa23b6cc43c137551eb9a963e0b8c7b622f454a436023523ab27aecf545768ab50fb34c6ea4b88ad704db9b\nHASH: e5d08edf17eab577\n\nKEY: 749fceed424ea2c74ec4418aa5ad47c1\nIN: e8b594f46e60f77f4596e2c8a90ea2f042791fe19c3ddb9a69740f36cf25469605a0f16065f0cf223df2eaaccce329c25c91108df87ed1f5134c53037d980b3eaebf94801389802c32e0866e2f499c832358c3992786bde05779f8eb8c9ff1c81ff31e626f9c91e615410d5a8625f4f37536059df6363d7087d2f47ba9c599528a7115ce419fc291b006e3dcad7c61840f5900cb4687d8f9206700b251c5a6420fa693afe05070537fa87925d10d5fee47d246d5ede432f43299e823ff838b8a6485cddfb5bfff149823c32688a039ee87\nHASH: 6bb82b5bc56b8451\n\nKEY: 1a5ea3537ee7a7a2ae0a22001daca94e\nIN: 76b8bc81bc9783f6f8a7e85151baeb8a62f8ea9b6a7a6aaa51bad995af4e0369f8f61b6e6475da34fb00fc1940f32f2dc0b1ab0d0a2a6f04ae9480f368e455e6437d2fbca09a5458095bb89f6cf36a44b5ad3ae88b34191ac42469a3c28e9d8d29ea60397d01ddf11ba80dca571b7095bdd08737df05c982b3a115bd3a87a7edd65d988ddd09217f3f31386676d6ca6592ae707e51f16849444bbdf3c2686763e4a7ad2f44fa5959d4ef1579f5ad937dba6c39e4cac0f278466350bde9ce81a9296c2e422f79add65343d8a67d9732d72e10\nHASH: 51a33c222edcb979\n\nKEY: abefde6166ad815d7364b65e911585c8\nIN: 0a7c0e36d9fab03b4a53a627d25262379c17ce645d6dee8df4f333d512e37bfbcdd6ed77209fff0897242fe43f57677b246c4b19786f9ea9e00191ec25268b4a1ee715183358570d6b45a93dbe2defe8f20bf0142c2a1090652c14e2bef6bcd5067dab3dfa701199f6d5a14b363492b0a0ffb6516c7eb17953701cb69b78b290be408f23b9ae79ea9b72d6795d33b85119ca5c6fae9f1a28311e80a3cc652f941b0a94172bab5b2e5f95e23576234ba3dadb320f69752f8bd6187934c10238817c11724a7040f6dd02c2b69bd48eb1dcfffc6b\nHASH: 09e933b789e7ecc3\n\nKEY: 2563d2eb21e7a757ce3133b6e85086ea\nIN: 568c4781aba9925979d203afcb6c995087821486609d3fe07296f541c497ac43cb00e44610ad841f9e344d1ecfb86c2b27059120a68e1249e00f8cdb0d04612a8d4ee9a0c59a03fdb595e567108d6daa3afcae8c2190e6c2c29ea917361b9d68e496016aa2266523fc582f080f16fbc8c876ba574fe1c766291e378e3d0b79705d32a54ca421fb45b9e27fba4e2502f82c422dc0862c00cff5f309eb45c635f1ab89345ed4b817a0cbc32de3e19f3dd5d69c209873fd001f091c04080669a8baf5f6944e00c6a0455dd8eea0b73c388fff64b43c\nHASH: 19ac849b2fdf3f69\n\nKEY: 4129341a51fddf4cac0364142b916150\nIN: bf02d01892c4a2f1d3f7d09945bb8b8dd2b0a363feb64565ad4ac4000bc54d3d564e73e429e9c5ae94147b85fbf532d253af6fa867c155467591d39a35e0b68de5775f53f875ebb9e363edba916c1092909c15c745f34acd6d6ac09e0d8820703aa9ac7cdf141bf40a87c9d1563c5d8d17ac6cf7cc3de6fbb4cca5948989cf292a582a836b6d293677b51e015cade0491134924331bf94e3926c81e84817eff7877d5432be95fcdfb7eeb17f40ea151ea360cfcdbd20e69b43827936ebf5ce8f9065091584d79dcb5562a9da7bc3378731e3619be4\nHASH: 388b701724a52e01\n\nKEY: dbb81916db9909090e64fc0e23cae7e6\nIN: fcf78a3867f7a9c6d585359e18e67bb535c5925c8b2c6cdf9d08d1043d0785a55c36dbdd6c8b8d33362e84e8156a1ad4dfc63f18f003a0719a51e83928e79b703b0324c26897c6cb65b43c25d396288d23576032c7570f54121d55bc58bf051ae1c447d94860b796c259e24ccb3f2fddb8069537415a173486e09144837be1ac318f043de66ac72cb663cc5be42f6bf0e243170441acb7beff6c3070b54cac5712d4d95b330ce153eb4978112daa11629e214aaf9ce4d65cac7e5af9508aeead765e0b305eec25d7cacce52956cfb3258f246a1019c7\nHASH: 54e52ffe0cc75930\n\nKEY: 1c4d246d801bea4ede8caa08359a3052\nIN: 06c1b4fd79efc017ca2e7951d2c5b0351e66203b38b331a1470f820e899f5bb740425c8beb3aaef9e5a3aedaff0561b9cd18f723730efa44b55a4f23aa3c9deed14107517e2849b014978716d9ba9fe2b04782139ddaf7e711695443c2bbb18c4242af5f92cf8f2ddae4007f6c7f7c072c5ae1bfc010e3eb843392d139660cdf31b3367e24fdd5da452211fba2398a52c3dbb63c8cf7367eb7f5fa5401129f5ad707d7d0bdc8d6a551152050885ea17f58f199e7db9fcaa1784ba0e7124931cca9bd60fa45df20beaac79529a7bc16fbb0da3886ab67ee\nHASH: 13b535675c3671c7\n\nKEY: 89593db764c35959b384a1070ee77a82\nIN: 036dd2e35625b4537eb938d749a732471a6846496f98c8d92649894ea39df2d6d480ac36a3480b3b9725a5db9610a48696e843fd35f2816b7544d38eb7113f0d67405867b7e96a5159e7c2815c3e5f2ef9e964ec288a71d0a85676877db10e137e6eaa9261be28972f45c41bd9aba896fd8aed4fddc416bd90335bbe5254df22a6d84f1f7043a9a57f603c472007e58fa5287266ec2ea4173064bd0355f2cbf705a37000e71e790670b6a6f21e8676ffc6449980b94763fa6c7f267caa6c674f9ea7c2a7f72b9abc74ac83d199d77ef9d9d129348f0f6408\nHASH: 9edbfd9a1509e0af\n\nKEY: c26b64248cd814a5cbe5582ce0877f12\nIN: b2d4d37c49a0a9ba827d65f47463e436415e6e0303a703e9596c503ecc04e071fad32f8ab39b1a86354cc8b0327333150ca21a8b7981f58fa94336fb314cf76541f0a9a1fb88b5126c088c1c21193ed7b601900dca8138861968bffcd5925795ca31dce36b850e45a86085cf9218f2130355a86da21d662f37936f03805d8f7a68a6ba8e1c13160919dcf66d176725ea3a83a7284db9f579d792f855b21cb2569690d7c290802dedad31895a9fb196b17c681dda835149629c0b6f920d39369383756ce4cf3a1e0abef2c071a0894f95284aca453dbe7efd3f\nHASH: c8f99a471202a47e\n\nKEY: d843a02999da4224a30a0adb34a80268\nIN: a3a3d15d413fa2f3310998ea550afd2dbcabba608513091dc4e843421960a29698731aabfea889af810df61ce468e826197b5fa275ab23f6908057d8eb2acc0f8c81efc9685231a198a2090d30775fcbeed564cde84f84e4c7e524f16fdc6a987814369e6aafd206e7428186339d959f084410e41c3bced089e948dd2a0158b5931c77d95ddfc7197ada7d3b212a566b7dd8483214a7de9294fbaf78fd00466650d1a244dc0c507101f05ce6d0950af15c51d21c9ae04a93cbab01307e3324d4b834252c279c28f507006646abf701bc9cc403ee9380dc8e9e2c\nHASH: a0f82e3e201341f3\n\nKEY: 5359880d90b305690c64bb649086fc2a\nIN: 16eecf2748419995e64f241eed4d538db76e06f2e4f8310a982712020c02765274b86026c6478e887a7f557e56af5e56d43ba416603d776c9342244425a05230d5ebcc501f4ae8fe5bb86f8e992ab4aa082db872395e320826e67c606bd933d803afdb22ce3bc4da0d19c5a539278f0f51ddd3ccff495e957c3ad0e08ea8a70f3083f40b9dde9545cbc47e73d5cb89ae8f8351ea0ac46e9aa7fc4712adf5722a7b26886b6b5b594fb05725456c6d948e58302cea70ed3f2ae704215216966d087a366723b7c600977cbc974c027ad2d9409c94fd9988d819735675\nHASH: d6b14df3cf4c7f49\n\nKEY: 0f0ec13184dbca8f609961b6b9fce767\nIN: 204174a8e023de7e271ac5db5fc7ad543293b4f17e1e648aa605617cec55abb9e53796d747fb13dedde4416321442fbeb94e0afb5db024dc3555b7d7d62cef09b3fbb3f7f3ba3ea5369984818f62cd37924c2089b03df6b73373e6b45db6202f7ea04931187fc8b6bc395dddf1a9156e91073bb024ee7b8150646b69995ebb47c8f513e0840ff2a4da3cdfbe5ead7debf930be5fd08ad6a8c839677a92bb6d2c7ade3bb15a07ed1b935113dadde7471fb366aac6b3d57c425edf0117914f76c51b8b590e16640179f881f784b909afcf79744a869368b7318d47ae92\nHASH: 2eaf85ca296e71f6\n\nKEY: 26f952322129ad96deb1742c4cf02db6\nIN: 6f104f1a7dce93e9387b9e8c5fbc819d17b8912d86e74ae98b499ef9ea195e4a7bef3ea9920b7f250c69b77eac0f9c9b6496338b978f6d9edffe36194a450920435d608696e38dccfc6a95aeb48d184d7bc98c5e94a0b60edd1125dbcfc34846384598324eb20b037f3394215ec67b8f24bc7cec72207ed36ea3499611a67a1673e62ff6b269689626817f7a2283e5756134189d9aa74ebdd2527a28cc9d5fe41b7c43bf25dc691cff051588adcac559923847c45aeb4e2b3d193490ea4bb69baef9d4e9df8ed11ce2ad1e59bb0788d1c4ffc4f1578218373a6d28ef73\nHASH: f1cfda7a4f7e71ea\n\nKEY: 7b0ffcf9df3ac2b8921489d0663a6a41\nIN: a11ba4969f1e542b4fbf785b1d626a02a98244a6dc3cbb4b443dbdc700781abd74f27b61af16f2bbbf7439454ba11b317e91348195b75bc72bd84b6855552befb8bfe2c02917a3a8392d689e136835edb24a32b973abc1f2ce2a12e09d3cbb42bf06a73d91df928894768111261264470b58d7053ec41a0dce1b752a8bf4e3f586a41fef78e75dc34e0842db1466a7809b41492b6f65ae1e204f44861fb0e9ca8d315b0731a476eab1a6824280862314c45653da7a9f5d4b23496aa7d0d78162b66d8eb0350e1f163210c99f0e1b63401eddc576a8dcc6a99b204f21c161\nHASH: 0c6d32d8384d66ad\n\nKEY: 127e0b96527d4f78bbbb561ee2f94216\nIN: 883b47f04789efa9dcb466454c40233e4f4d1ddaef746069110a98f023314bd24f5a83c384ca001fe4e32430f7fd16d60aa674bced1f782c9d3f2b9be7ae27eba152316619fdfd9344127f3e95e65ce0494ca9a9aaf86a5c23be50f2cd33fd36431b44e1b86706adb892930be8a5999295cdcb4ac4a7a298f83eb60f239f7aebb2c2bba0cd0cba3a78431209d16517d9c856cdabdd08c0623548a54046e482332e7bc980de6cabff201b0a3795b29f178965009fdf297dbf6826e4cfb8e8db44fe7c825f2e22836bad8f5cc6feb414d983d37a4e8ea9afabaa636181b0f2a9\nHASH: 5df3435199d3acf9\n\nKEY: e245a39e5f7900351fb68b658dedd8ab\nIN: ae84ea795dd308604a72c3dad429ed381664c81f5ac779548e3a1e5b06e93a704a53feac37e62720800bd12fbebaec2e4bb9aed6f5455f7a9625428a98658a244d05e24365f38e984b08f1d8bf7956d92c8dd384eb359d8804a4117e3dd3eb9e77dea725578af70e99fc04005792b2e4446f5800330a82eb7ba6c2f73f8538a5deb50c07f63ace94f924de49aef68ae81dbd8031f6763d68648a4579048944a154b2c4800e02d3cb283678fb28d8b2a0cbbf7f67735263f82b139e0c91d333a9c2efe3535900b7ffa3916dc737a79f6a7cdbd93c928c0c1f3c6a71bb6b1c0faf\nHASH: 009",
-    "604731001be85\n\nKEY: ff848cf4962c85efa5873d63e0b0676a\nIN: c9783e9b655458a54665ce596f2f507ee53711e724b2fcdbb6a00555e782b2874f723eb9b42c9f05f81df2e400394c18f9520266deb0b39b3d7080d2609d498eb14c2d549fd5571abea40967901ce78a24510d9725812a099609bd23e8f6e1f9c8065a36af3a47aa6b0e31f4a51a13dff8a0b015c556c198915698ccca62093570e9a00fffbb9062411689aef2e23c7ca2a00637ea413dec66cfaa53f6ed0eaa1f7cfd047eb62291418f0992b4020b92574cc1bb16c8e1e0007e84f93f348d596123c0f762dc88eaee3e5acff070c3ad765194c65df5e1a09a29f17528886433bf\nHASH: eaa52c9d937058bc\n\nKEY: 0edd6290e53e244919303e4caf5b6a85\nIN: 005cd6087242d71b5c2824016534c2844f8aba3aaadc2754b5248d2ecb19b55894ebed831f2882485af9676128d7918b8360ac5011fde984a712d4a2966844fef7cd106c64f55ab7420f85b61b6be4a29abc8588f8a88980a61fbadb8501abd4b8713ad9064cad8089755eedf9ed3c60a920b0755a1da89104c95396372468ea9f58450e82f8af1129de70647b72fd3f5f8c0dd38546e140ff2c60b364bbc344bed76ffc7611b69ac958b75b626b3b1ba3334ade07a1b651b4c16877d9e3fd03872d9ee39d3553c929687b31636ddb09eca10dd4b780bb7454aad77b08cf261aee58\nHASH: aeb231e3d8dc7929\n\nKEY: eff94cde18e3fb3ae08782d7417bb658\nIN: 4cf8ef9b0f992acf9cc2616eb3a37a4947a8ba33332fe3e52c3d574c60f257f22173c03f09d7c5dee536c9125516b834877342d33ff351dd036726cbb62cb9aa711a46023c88f912f3b9edca4d0062337c54b811e235afc1f53c3b2ad75af8ff680e17fac8edd9af5ac89ed27d6a2a14d03e2cbb5e3b9c600d3825ba2b1a7363fb840aa29135a07f784dd28edcc7f2999d00c7b192f1dfce15b253e3cdccb36910f0074518b46d03b22c02645687eb19ed0f35c23f21b9c8ef504d1f14cb2ed6e8020f56bc18a0b301dffe80b8f10b8dfc5ce2ce6891bc730981f2decc8462b7238d4a\nHASH: a252d05a57be030a\n\nKEY: a98c1a0a3d066da10ea4dd2531b4ead2\nIN: 98ab505e3aa1551a94a0cf971d3263ab8b65136acdf76ff50363bec0c44ce7e0cc7cdfa157baf16798297cb5e6b8da1bdeeed67f17f8ac5f25399aead8323cb40f78f3e8aa57af8fe42a0a5c54bc40263750a20171b485f9528c6908c081bc06ffc370293c286c105fb01b4dc3a748e3ab0bfde3deeae6462577a56170d735aaf91bbc47df478f7422a1512663b5cfa60574c005d4f42a944c5a9034553ba253d4a9ec91a4c13afbb6fc2a33820466b3566e48242cda460651cf05d2bbdfa6f24700971dc8423e697aa50bd74f6b8517e36be876cdfff785f28fc4057f754426cb63f06c\nHASH: d2c20d0e5079c609\n\nKEY: fc4f980ee86aec735579dc60fe34ce08\nIN: b04be0eb00f65857e72182b6c72e441bb0fce911b147a18e920e32fe4f68b34c401ee1553cd03bcd9ec5e04030e61c9e652d1ca028bbe3e58b1b673748b8be01c135a210888f2b1729dcf430d3762634e88282ed383a2c72df11234f3d6f1c664bece2789016020695f64b325129fdb41aad72411546219708967523ce612c23fcdbb5bd96d75dfda8331033c4dbc6b4a6eeeefe3981913363420ba4e1cbecabeccb1caaf737ccaa3fc23b7bed2d19e9eff329b5e5d7c022951eced50fdb4581b69dedfbb73dfd7ef0f1a2e20fac4cd945a62459bc09499557651215584a2206541a874d08\nHASH: e9bb0be3d8c71cdc\n\nKEY: ffba67ce7af257ece6904cef96d30c3a\nIN: 59db9d944785bfbfab97d99707be5a2bd6b73fd5b566d030e6d50066d41eb3999cf4403f41a5ce5ff43e222c72b5f55d9d97e4e7841ed4630ad11eafac49237978bbeda43d16a713443f21747ad304af680d188fae4204073323c41b9a2ed6ea43649f9155f4da34ac26dbbac19823cfec2916f51093cb60e422949c105b051e1344ec1cadfbec60b16da6ec4e1704702f62bd312b61e572463c9971f8f4e57a835e2e13c938281d5ac256ecf525745ea6a9a31b4e3057bbcdfde132745976e6f37d84616917091bec6c5596705e87f931e1ffacc81fdb16ef5d0cf2395f01d8132a2a726853\nHASH: 9b41935860e05a2a\n\nKEY: e7b8fb02585eac064789f1bcf136ec3a\nIN: ab7721278f866963614de30544ccab492095c464773362883aafad7c6b314091edbbf3b031ed77c0bae0280bc0be2caa9930102dd42b89812617234fed1103978441b72c554c8152af11cf0cf610cd930baea47c50ad28dc46650fb55f5d82257d6fd070f7055f488915d5d39e2d0ee5fa9433ef942172d044f2caf9a2dfda8d4db42fd8099fd9427992db51570078943ba5033e2d36f8f5cf6f8d5044144c23bfed90f8f75bda025931e92f75ad0d2cf017835bf36fb77deb888f921867a1e3a3e39ad6d0166dae4985871b0001bec49fa62d744d20a87735c737b1860d5fbe068e7e1ff31787\nHASH: 65913fb8e4f1ef6b\n\nKEY: 7d039acba5bf658f2a8de71fe1f2808c\nIN: da6da5c841965e182434279138ad525350dfe97aabdd2a6bd0e9b3b558ee366f6b4ebf993e8b8883b2dec949ab2dcbb5afc987e86e6f57ed1c7f87ce4f672b7c599c7801dce3fb3b554f2baf70269916e82444c93ed3bdf32b4737574794b4def37a289707bbb4bd0b2d9d9c0350ce6ca9e8c1ecc60eff91e2dcdc6acd20595089e9971eaa4a486bf47c31944c98fecdc320ded6719276c29f1b785235eb90c1d8548dfcbfa1eff50f0eaf67b60f301793334feb02ea4b7ba276b870eb309f67a0c1df94a4695faaff50a34802c0e2697df2777e4b56355e02fb20b0055f477a4c8b67ea92cdc072\nHASH: b199822f1811ec96\n\nKEY: c54508b0162a1e8b0f79394dd51d3cbb\nIN: c72b4d57526c9a62c225aaf4b200cfd58ffb6bb43f081582bc2b7d18c722f83db54718509f22e3f561039d6ea67087be8da0ded3edfde792e4aa4e6b28e3f5b92634e3fa0655c9fcb8fdb6463a7b94952c8ec26d1b36363022ae29d3befbc74675c65ad84105ee22aecb291ce239bfd99e6472662b6bd211667079050e4795a52a66a690e0552c4649df2a872eca47a9d9df5eac593d3db636c0eb9a382d9e53a23a2233fad1bff227abb35ef0081e2d998b7369a3c82b1906cd6f089404624ff98bec2d3086dc784399bc31e91a8c6e1d1b9d5362d552204fd4220fe950efc4347e92f97a07bc5169\nHASH: e974a29e63624bfd\n\nKEY: c7e90e3bdde2cea53430ffa4d24b864a\nIN: 024c6b2a7e1c73e343484ee28f186e4df5209c1a1ddb6382b32f6af94a7b92f12d1d4afe1a046cc47fabff118b8cf4d3455b8a9bc35851a12e0d8f64b7b2aac84f9d31264955c0098afe2b41a461c5c05758cdf32b4a2bd7d9aed617c443afcc027e44639504706dc2dea1437772dde830885d6b9f8027ece4a9b9fc94e636b6ad2d54345bafa989a2210215dca60ce1ffeb7d999001bd1ac947b46e88bc024025241e1275a68f04046fb2c67850fe73b3d968c56e6f3e10846a33f088cf5576c8819d983c5c1d84e9e0eaeea4801d4800df0d575f4bce9a4b638cc46f546c7b18e5c6454f676fbd3425\nHASH: 173022c25c47bbcc\n\nKEY: 6e2d1460bcf8bc398481a0f14e807ce3\nIN: c3928a0547e7e1157e794f0c01be408412011794688fb8e0bc40508834e92f65930e91c3be3bf16c4f1980aa9261ba332e1c858397f3bdf0ae7b568730d6e294e351656f0a3e266ff119ef6dde49f6b4e79428bf00d7fd3a984f7b0e58272614e5d44d8f1babeff6e6152654ac264bd5de4d39f33656604f32576b7f98a412b822292a838e6a028cb6ebbe76c393f413c5ab635d9ffa568e371169d38e9fae4161055d87e2337fdbfea5f63553122d95d74acf9059a23bf4c5cb21189facf61e307adfcab2ffe9a00acbd7c8c447a301006863481caded3b0ec5b596ae1a394be98dc12454f6238fded0c9\nHASH: e91f147c8967bfff\n\nKEY: 92154b863e95c4b049170adf959758f4\nIN: a24952cdc02ef6ab70e588ac34dc10ce71b79441e11c601e8814631da2c8e0c53b757d9d8642139643bdc9a266d957d82174b160d56913abb72d14c9c3ab9af9232dbcee2b28949906df9c58d31aee3920faf7fb15f1b5047d88cd78d3d4f337a85dd7aafa745cfcd367ade881ee88b9af1835dbc8ba2d2c9ec0744937eb287f9d81959adcc513d180dc0b10503a8fceac08c51e0b479d42279d743887f51c7d66f4a57953f5123940818ceee6311b88428e626f1ffd411fb956683e02fde1e1bff712ef61cc0181fca7a29630de7954360037ba7d9d3ee2129ae6572321897734b1082ca8d4478052a5a1df\nHASH: 6e651cdf9607d1b2\n\nKEY: 5e85e11e3aa3b90a184e2024fb78a2c2\nIN: c3ec1bc51d40d05304ddf0bf8bc7b65537cc0038971fb18786188c7f621cabb636d27ceefe189483d6ab0e5ec88965ed58d32abf344478d67c2c194dc8748ed5cfecc3c47d7f197119c92724480e5fad420a5c80526e5178f25298ca1676f01e45cb72544d4f8715f3e495312fef1a6b7ac3dbc5703e580e159355c608ce6e6f5ea516d5c0b62325be4533fc595793c37ee212dd921b1a98247cc761fe3c0d9b8e9b031d295de0a910120f6e6c88ad01ae2c6c14d3a24b01da0c7ce0ad98e94420827b4f05a52227330d5612f8af1283b20cc89f3a1dd66079b4d5a42463c94b472a96b2f5380c8ad73aa2c897\nHASH: 79cafc4c1f36d921\n\nKEY: 3e9d8c681b3db54b76e7e788e3f9fc77\nIN: 8f76eb5689f2651a493e9b3844915e79356ace323dcda0971d1b73749d1fcc1de35fb610790a47d2c694c8772aa66aa1f960235a8fa1ffda2be3a218a0e95158f0833afc096301e2a471f949a35a011b7fad96e4df097507a8b4f26534971ab1c7003fcd49ae2b453f85b83b493877412f6e7296ca1b41684a05432f9bd127c158bba9e1961c027c0e718ccd130176da0d846fec138aab4be2f2a353304e20e1e733802b0a78bdc120d5e67dd75f1a592441907d5ad4301cea73da09c85e0098648fd020812dc0b7123b57bdd8f43eb330cb7974e3fa304261b6cad45fd8c18f771e46150a37a97fd459d9a36425\nHASH: f6a64307c9821557\n\nKEY: 6890a33ba93b36f9735b14da070629bb\nIN: 8b999ad629181b9d8fd808f7573a015b621243d48c894ac3083c3f01ebd793a9d52477c604046ef3465160a53e1842a4a0ad59608d72649a88be0fc798ed6498fac2927857dd35612ca3c3c457a6b051938d30a88cdc6f4df013e038681610b6c418cde5865c59c585f0f85234011fb1cd97b4d845b33f42cca4363aa49d4a72b481984018000d92d15c9f1d37d474dadcfa7de5c6cd21a68ea3a8c494d0a61c1415dc2e831f227f0778088e70b57cb8e2ee7d4111f9f2dd5130ef964894de7dcbc4bfe4cdbde5cb5ae97006bc7f12410d1610cd5576f4e4179f9bed7f7c8cdbb4690d2ae351b88ed047ae38822512\nHASH: 761ba884dec4ac03\n\nKEY: e78c745365b61651ebaffe8c42d46f6f\nIN: fac2039fb07eea055fe1788f9002ebd278decb65fcb642977109ab11d967544118c20c28c0f221cf97588e709b0c1972770a1d9dd90e2c8327b827369c7df92ae171ff5ae67c3a473f4149d886fa86d306039743b3",
-    "709ac4bc03bb3d4aa6ccda74b5eed3b1e6206e26f113458a442a2582d43776ce4792d71882fd03497eb1dc4368df563a0e81cd2ec4fa0b07c7db846af0dfbac90f36b366cc5c6afcd347df9267c50d3d7b69bc5b2ec686feee2adbc2aade8cf2b7dedf70dcff62535cd37c9ca232797f515cf8f2e18bc1d061ed3133bab326988fcd00903eb3382c5188257823ce6b19b5030532c744ec29fc4c6f\nHASH: 302751549cc2415e\n\nKEY: 0ce7aa35b6a163f25444f387a2358e93\nIN: 4f3c83824e76591565f4d76e2144fbf598ea40e7d0f35ab8dac089548179c564732a8e9b047bc710ceeb514c29c8f0bbdf29b03203058aadea827e805b5b06b15d4fa1be0d2911793cfefa5b77631704081c8e0473060819d6c0a8cff55899ba8715761ccc01b6771b69ccf41e565d14f1857a17b57da20e5437a7f854d7950d659476ee55368c375a36e178097d3c36d3453df382963301e0759c61b470d14aa5744e6cc92bc1968517ead59081885baa92117737a724a2a5c64b33cc42f46dd7df800148b104d82e347a9872a8b42f7f8a24c017960569d163a21d1d99306c19b08d1c7447b56f0b1326a5983e21b51a\nHASH: 2583827c53bdf070\n\nKEY: 0e1a6d15be1f656b7a21a344f2e0d314\nIN: 7514736145f300344d473bbe03f1190bd65bfb8756ca358e2b9004320b1b7888b37e699c0b31d30793e1041250165ce39d1fc4d88a4ffd31b8b067436f659b762b48008d1508e699dd652c73da4557dae02d2199ec8cf489e2622622cffc36462fc663995530d5184be2b2f2bd107da854ceec4bafa2c6855c4b642b36cda7dd71e155757730b3fafadf0c974cff7dd965127349d7fa287091480e774e442e885cbaf336fc5d6713371c8bce55757efde52321dad605b1dd0b8760123d756487b2c061ec33e339c55796ed9121e9d5090041065a3a4adaeeb8da3af3f11cebe81a216f2332b9f9e1c1d9cb8a288c54c6ae01\nHASH: 023f403d40ddc4d3\n\nKEY: a79f2d6168912675a055766b8570075e\nIN: 8b872f2d9cf5fe9f7b9844e817fd39766e2a86bf6a463e15198e2316bf54fe6d9dac25f642d0fd828aa0ff836c863082165cd44b95c40139e86165281ca264333b470fd3db7887db448056ecdee005423ac2f1444683456064b37007de2143dcc5b75637f4043f1841ad8324b0fbe1fb8af2d69776986b057f97d9acbc44e1b11ee764b03c3f5d6f1ccda44cef0cac2e90ca4c5c938120f0533ee069b9a6fd698acdf7abca384948538e9028b461ea9e8f63369b070602d31459b69dd7e70473b5306a99609c9575cc438e4b95bff7011cdd8a14bfccc2ac32167e2e2c87e2571e4680ea71889197c3e14b61bf46ddecedb6a2\nHASH: 2da234639b4f5b51\n\nKEY: c0ed7efd7c3a530b33c0a8c9f75ef3b3\nIN: f3348518f9cc5cb4789aa17cc376e9f0f0a813e0759ec41c73b92aac9bb61dc0dc257b4980895e52483453dcee6780db1c81c3ed797c9a034c6fc2ef9b9e87746d2526c0494d3f68a89b92745cbd7a1f6cd7cba08c7572d20cd325934997f568b7be8f487f2d9fb1f377ae12db20c4175ba7a7217d6763a40ee6fd1ee8593b49f22b16e737a20617fa3d369971f26c669e4a71940c8be44eda90c2326f834669485643ae820eedf05385451ab4d5a37f175996e5f19bebbc45d3052f5fbca7fdc413762c0cabeca5660131bde115c4b236c0e4ba137f9fc0c62dadc7cd40a4b1e81f41508ba1ff86dd0c5437207b41c1869a1ffb\nHASH: 525c8c3503737a42\n\nKEY: c9322e7a0fa3d3cb63448c0cf91a710e\nIN: 46c7eaab931b65b4f7734440a7da94bbb6b7bbed3c875edbf086d5338e9fb89c9586eaf834a9ec1522de16bfee02ecf525bf9ba94ba3723af970b958e32212ddbe9ef1a28005093cb725f95fffe8f3add2d468d0224345d75acc4e1e3db00c0f4a219904c39931a7d6fcef5aeed12d67c6a2c05a41934a04c68c9a5ec4bb2b7328a1650c1841fc14fbacee0b570e3c6d8f6383c6b37ae35b1d7118f45d43d55a3b453d3698acd84e9404b54e2fa8b063ee75d1fdc13f984a79a9b555d190f108a0118d89f95285f92d1dac17e04dbd51aebbc40683acaba35552a569cef829b5a3a6c41832c63aa136a9b707e3b037c80376175c77\nHASH: ee54e3909a0b371c\n\nKEY: 49a26a0a06a3d9aef4fc6ea1a9805c17\nIN: bfaa93598cd0e67d40090305ffe8f20d52b1ae7f87e2ba8ef15cffeb8098089805161159807562fd9d47c75a2d1e00994707f98170090391ed72163f8311e1e578ceee03601ed10ea6257668330810b79564d30d87ce3e5398af7930ae24d6d9988dc18b1494e83b60500c728e090a466116e6685af67267d83f202f67ac31e8669f6dc27afbcf4aef3c015f63bd0106cc2ff1cbb98e9799642ff744b49e6dc34aed31df345d06de561470afe82e233739be2abe648a3b02cc5f28372b5b8dcef13162699c08ff46b2bc236f63a32f7a5b3600fb09a7a77f9e3ffdf9b0e1a358199fe3ef5a790cbb6ea022aa7f174436a686d57183d3\nHASH: f803371f2f4d3277\n\nKEY: 303c484fb49204e725e2d2951bbd9896\nIN: a63ba5a033912d1dd5c673c2ccd53c5e6ab5f2bc39bc7ff4f5c35c0b5d2c4e0bddce4229fe836afcba360bec541aa5253f9d2c54e884ed07eab9fb454fe5243dd16239b8c50b5801600c6534d2dca1eb61da95426837abcce212454ebf79d1fbe456d6ee12eedc4f1a48a7e4af5d9308adc4f5cf4c54386b0faab7891bc00e177aba304455eec8b6ce64445e1bd7f71f586f6cfc200eb56a579e8649b8ead10786588becb7754d76de920e1fb57882649e1443e77cac77a227e183c7756557e3b36e1028f4971fe47e4dc18ffa1d3d24edfd6bc4bdd6e6e918029b4070980c6f3f7b2aa96a7fff3cade78e8030ef576491d7114c6c28ad\nHASH: 7e9bce366d20bea8\n\nKEY: c37aaabc6d0db4b4236d30ddf60ca347\nIN: 5a0567f73ac4f0a913051bf056ef2ea3722f1736a812e78524884da840dc3b5b253f88a63d1feda1b4b09ca8e6d63fcf7b547f6d181dc1b6db7efc46bb5e2972aa56ec3a08385e9b9863692db11c615b3f2f72d294cf57943197a5248d88efdb2a4c00cabc5eab1a615f61bed515ab0d6ed652fdb41eaee68566081e89052ba7f4cc1b168676609dd1c54821d82461ce36e660bff3e9f526259773ee811e1292b6fe1d7cb2a155c3a638bfa7b1b7040ae1ab8bf31ae2afcea6a3d502e89da2fdadf74bd6a9705ba6f2a6ca8784d8b6a25f3ed874371842244198e596d0dcda9823dd918eb3677b23ee6cae08a0f1c923ca9580833b70dd02\nHASH: 03b55be4e5f448ad\n\nKEY: e3c6637edb2431c3d7e19d789b9b795f\nIN: da494da4807bbf8a852809b22467a8d386c55e9233125cb73c1915fd8b0eb94f683085472825041ccba2ea14cf600f4f03555d73c8b239c9bfae0d2cc1e7641b43e93524a58fe6730cfaf7e62311250f4934077e3883205c7f53b5719be2c2382659accbc9e7a79839c1156c4314110889f7123f3876fe8aa2fa38fc5a0c39fe0b1e8e5652111f0b420c3bbaf082f50454abecc6f8ad2bc37f655965a972cfd8ec726d0169f916847a5065321d817d67c243677346b96c6bdbc9ba8e7eda16b2ba56cfc0dc8336b31eb2bf8b14033fab8dcacb612e556743b28a9c24ddbe58b27ca303bd504ba2be547c3b6893b9eac8e21c5c75e85fa0530e\nHASH: 135f12ed177a486f\n\nKEY: c2723318c7fcee8351ffbfc223d5654a\nIN: 4bc1f8e3e5a6369473829b634a171988c009dcc4b2206036ebf419f6a722710cddec29901c62e892f2ec519caa6be7771f09065ceb21332e30a8ed662ba62af0b2d6ddcd33095dd280f0ba22122e7f3bbfe8809a6eccd983176749a7d9f086df6fd895494d3bd225cd0552884c90cd6915f57185af57dde6b41b7449a89918592c6b9b9944ae2c78d3a65d74fa9174d395fe5e33452997286d8e52853197a01e159172c663e2fb88919a03c710c9967c2de00d55622b854d42d72eb99bdc4b3324b1e022b6c383b26621fe81071ffb5e94193ee9847b76b98325b42548cd1728b77dba4384284881b69934759421f7a259a8e54dc89f7938687a\nHASH: ee2d28c3ea0b7ce5\n\nKEY: 390fc266fd6339d769eeda067acc5cc5\nIN: 53fcef219449622f20e5978afd27c4568e130d0c1db23b4d94c110069353aa40932d5f0b1fb6edf5f54ffb217516a094f0f11fef692ac66420f7c192c1fee13892971cecdaf923824c55679a379185cb7b74af34a920e64a1fcffaabf699c1ee057fd7f64e73ae45597d4dced74f59926f9b7a989a963ecc12f0e31143fd89f57270b272cbb8a19f106e83a134f1e7f63a6714ba36b1fad3cb7094d42d36bf42f0e66696972ea0bc7167bf718e4ed57ce0735de11407e7f06a171f7c7ee5a2982cfe34db94aac9227ad759bf66c45e791b4cbc9dc0eb44596520008b435ab78778e057960aecc669645d51326a4533760eed682dcf21d38b0a7f85\nHASH: b5fcdecae4d9f22f\n\nKEY: 4b7f98e24a91752f71cb2a1cf4133b7a\nIN: cc21aebd00b960f302d250f64241d428c2774bd70275248b39619a3c428819c7061de63b44c2d9b865ce0f2348de73ce7d1875fdf34bb3b74690bf03dae40b4f8fdd348196fb5e265518c67d643984b3046f5dba1aa2a3308b03009e7fa67263bcdcb4c1ba6721bdd0475a9f3a202492f24e8c40216ab4a47efc4fb156cb0d3e8491128e50214da90ade66065f75bd3087957b547d5421a9f4502da385482b4b75003a05e6f35dc2ccff7835782c79a1456417c169e76f7de8894ffe07315b7d3787c9209e73a3747e64dc0e2672f3d4f1912aeb1e8fa861a4de41852a8456f619c335568aed6917c8c93c91e2933dd8d8c51229b6bea28f2445dd85\nHASH: b18e5bc73472b149\n\nKEY: 3a0caae8e1afa4bc915f83260c4b69a4\nIN: 541af16c8314adbdec55ed3eb06820b178883ce26aae5dd1ffac1544b615426e5af0d585d7e2f922a228d9812fccef3e0c9f0a78b98d5de8c683bfb011c547af744eebac3d2879cd1ba2d01f39ec8efd116309cba48a7c280a0656a53a68d9a90947124829852c076d4ab85ad2f1a73121f0db1f8de6520c53b3a010a1e9febb37dc27906e4358e00b61e3f7be83d070731c1c56c59f1aa93185ae1c6e944db721b3e389f0d77f2546d8aa32b54ea8f9f6d6d2f2c3bea3b7e4044623745c06f1c99d4ba71b7e052112f30823b210e09cedc62ed1a8a38716f263ed0f5cfca0bf760c5005b6bf5479c7585fafeb34fd9742a909414bee7fcd0b7256f961\nHASH: 33e708ecdb29ab35\n\nKEY: 70e8b305ad3d34346b7f21a84e99a9b0\nIN: d8f7d6548477826bbd0a2a5aa8993869057a032e7631aa4870e3a2dbc80e3c571e516519780f0ca5b63969171b5bf2f48ff15e922de8e438fe56152d214e828f869f309d711bf00f41b52a9181984afe09c526fb7bf9af7a02c52f77a419f07b13a2c06af5a1589d69b56440a7bad5290ecb3ebc16314e016603c5f96f2480054caea48adcd8eb7d3c79bcf7117073eaac802243c878a202ec5a1c20360c3fc97c688d35eba6c894a183377a9b836fd442da42fbb0fa8fe68e824a00c509eabcfc68e61faa731554f9b9d2cd1bf85c3c59e8eb64a6040f345685ea5c8202690ed62eb9392f932af9107e54ddbd59f150d252a5c3467ba44e1544d889e7b0\nHASH: 0af2dc6",
-    "739b90eb2\n\nKEY: a96ec37c773d908b5cc732eabb877b24\nIN: 6baf8f4a20f45bf086c0003c0c6e3837cbdbee6f861d27417547d06e21feb53703fa0f896dde73cb97671e4af7b27fb175d802bf3d941e13172ef158aa6f19e27a504e46c1f1b1dac741bc3ce66b73f46941821561be24448e37a64af54c9beb16da91ee8705d13b2882b9c80fdbe249e1d3b6e5c671ee524d76f543dac473bf83cddcd95c07e82d70ed4f0d86615e6d3776e6db7f740ff7db55a949193734b2b9caa48dfafd8bb40bd8cf2eac7bb6462e92f2a0fc101c7b1fef491f6a16c1c555df9a57a1f7a8e70eeceee14bc6e81882a8fecc48ff9b171b9e8915882f281925282a479b8239bfb48d8cdcc56c22294210a484702c5a8e4d4fdee2f6223e\nHASH: d10db578e9b44fc3\n\nKEY: d5f074017db58f6e68d210b58e091d7b\nIN: 319a1100ad4e268dcc7f3ce71fac847336fbedb9046c1b1b433c373385326fcde6824b3b1ff34f86a0a27b9216afe3145945eb5f7aa37875fac08cc62abf01e2591f8d8109f102214457193412c58a393c4819812ec9fc2079df042a3f57d172d76a8f2709b942e79b3ef839f2f51dab93d225e6eaef30b2a67324481d60a9c5a215ada44eca05470337379dd01eb0dea2cd14bcfd0991d0bb11a6b0fce97b4e51492fa665ee7e29cbba50a5ce0d50c663b16ec8260edce17d548c6d8566cc76ea7270e406f9c888849d15197b37d30c64eac4eb90f3101ef65b3c1493370f8758e7d954b41a543e520394f2da5229efd6f06ca947bfff71b11425a67229120f\nHASH: 1b460b968867e42d\n\nKEY: 338962444ff46d8d1c4ef2d14849202c\nIN: bdfc2290fb71a50aa63595c3f11ffc426539678601b31bae30b1771435e3199668980adb627c738ea28ba458c0179e48a802d81afe0b2d09b5c3efb06808a22d73173049781c0822d780e360e442619dd82cfca21291eb0b793eaef44202b7a5e6c30505ce4e026bbf724ce76a05e827c526ea99bef552460abff8058142e11e1c223aa0cc31bfa2e5f9184d9a0fb9533facadfa08b5da0a7b65ea1758675bbeb1ce2faa11ce20ade70ad5fcf88fd253c75e5a2d0ec79f3468e5056309b4d46e1e96ec811a14cf6e64fdb91a044979a86b571a9d701b6663d8f24ad77c4a514576fa942f45970993dc703dbc68a06eb688b9f7e87fbae04019d54320a26a5b7b84\nHASH: 2529cebc7a6002d2\n\nKEY: 94f80db0bb92d9f844c8fcc43ce0d94b\nIN: 3d09d5fadd1e79e648ed155dde5646d2b9b90c9103d4d7b4d53d5ff184033fb17db63516b70d4407aaf3be325d66d7196d08e310851c7a9f6ecb6d3a73b7ebc9bd604db7bf93879e17c2e1d7654247295ea02b97a60a3b85261119d021ed1f040f27e456f011cb46dad312b65c1927765cad2c56227d6aed2a5d7754a57de58c11f185aee88e38ae5c8fdbfe6242eb3dfc7981592556cdaf21351648abc64667998c4003cfb8376417ff98b506c0fa51dd2a152d00f34f6ab58c883362b08c986041724d360f68b94d8d071e327ff536023c98313f09df4ecdf11e16ecfaf3970ad682086ffc7e43d571a96b7103e9eb80acdb6fb8f78107a8042b2c8893b1d2f19f\nHASH: c4746b2d19941e56\n\nKEY: 995882b99f51c4a67f5b55f90e2a9aa2\nIN: f640e51da483aadfa88812d5851ea3a0d9e605b144013ffb7f74df26cae9317fd90233e2893575d5e470df2d80a2e9f4e8f6f5e5f885498bdad37d1489ab823dab96832d48c7617b255d40716d54dc45e9bb3d88f908d573172486d88c698496faf792696ac1f446419f6459866cd4ccfac5359ad9fc8a7bf85f755d08fa5e44f4b0def68513a39ddb97698180592baa03e37220eb955c636baef003040d753d5b2c307edd1b7a24ba1df13b9bcdd72cfbea7b17aeea59c604e509f511855e3784328479de46457d1ce706cd2f9e937d71192ff215733c62a205a6f08b901e2521e1935ee33d524c3d10c73c0a593acced88f73bf6624b15de138076569945cf2b6b11\nHASH: b24f340cc0fb1d2d\n\nKEY: 8da14614383bf855cdc281b5225515ce\nIN: e17c973f19eb796bfbc57ddb9601806998a5e97f18a3eca6a1d20c3cdcd109815cd8ee13981858324ab89e8b30214e3251e6f308648552034545f7d24ca74aa6de5bc1513c20d869a310ad1a44e462666d2817c0cc225a28efa78b1435c80adca1e07683e1792152267649aeb7ee19efade02dbc631b1fc58ac59671ea5982234da90dad42430fbd85fe6527991ccea11bb805815fdd0c8a920dc9e818a5fcf8fbf680a06999c42c33c7cc712dac8badf82059d142c6c3f80a8d09c881182cf336cce2e0e088d0af39fcdf6dc29c1ef496968455e2fa149a65cc57df06fe6830895e2daf352e922bff8cc3fc757161f3c61b2ec9e7d787e1ad976595d27f0f5fc5a04da5\nHASH: 36bd2cce6ed21122\n\nKEY: 70e11b8cda2ab4a0abcb736625145d90\nIN: 7f4fa8fc41f72c8fdcce996949b74560ea9fc7a3c57e502628487144472bee4300671cc1617fa7c76850df408b92020e7f5d377f4c8f410288ff60aca90516d0f1d13969c9e5af7e348ea7f8f9a36b8c69d0645432103f5b93ab560f3113e2d86b35fd6e704116ae5e7bfdf1c29b6d5a4570e2b1082a3e6023f14e666a76af86e4661e140eb836f262dbd5d388c166215ac4f39dd9fccbe3a3a8c58a2236304e8fc0fa1fc535e860e888a0d640277426e2e2a05d855c5ffd0876ee0306cc0c394d064fc45e974d1c19094a1e83d59057bf269f581637f343a9fac376ed41f4d193aa5e3c30141d31391c02390afd81bd32b6865ddd8974a44724217eaadd7ef316e0b4c2a5\nHASH: f6624d4d13833699\n\nKEY: e974c2247093c75ef6ed70632f16924e\nIN: 71f2e0508d7d36b373e8ee0fabf49dfd69638c5a6c79be9c89bbd0043b3bc66abb3618c67299c0afc4e24af8440185ce8d7d8b1d45732f123aa8243a9a0a0bb27b3d6bf59b39e389c15211b92c93bc5aa8582c98fb1523427c84969a65e99775e9d97f382b9ab47ccfdaddac3e7201f917bb64843f2b804801a018c71bb6f632f4521c1a4e9a375d7bbc8a42e561843dd65ae3e7ec0da1db8751960a656876983986bb2be2dadca5bb312cb004eb10f1c608af4afa599d946bdf8bd52102c257871810f5c8a899580287074686738a5823f33e96d3c2a7c77b68e4a21a5ac50e06664944d0cd6bd40ae95a2e21236e671bdaef79f08da52e2a6f65131a2e80c6263ddbeb9759\nHASH: 00ab496891593584\n\nKEY: c6f1ee0aada0c076cb20cad883bbcf52\nIN: 912f5b270fe4f445134d1caad3cd04cebc9c377fd03d3e26b82d4449d4ce1914ea718a6fa8c179dcdce1d117e99f4e8cad2cc0f0c059fd94cd8b3149a38a6b271c7fe1c90943c7a8d40774817c272a9139a05e1c0aa74cfb5a7c3c93aed9303b9579200022527a0911908875e23b1d8bacd42a123fac2342723a77942523b4aa858ff284821e1ecdb82ab2858580227bdb2e297ba3680a1f1cb0d31cb8e6f6c45235dc64f4c3f986c24f9ae3a6cb9d3710d58125f20d8e8c4cf4f89adc091649bd7a33ecb58cd163baed98e7e4f4dc16955f7f09bee1a51e0f76e9575cbc2733bf58bb4be4a4e2a2b1285c1b928aae6d8d9becdbc3723b408fc01acccb95861d23a3940df799bd\nHASH: 792ff12185fc3326\n\nKEY: 5cad21c8c3805f62248b1e1758c9c392\nIN: ec943f6a3d3681cd718f532bea0e5e2839c9425d0381dc5808cbfb273f6730efd52496b0331a711fce232991dd0847b5b6fd58330f54c19f571346d1e100e2304ebf5fff1b1047ddbbbc4dae02ffa3a21f8655b8972f683a33676352908e007ae3d12ce62e77acb2ca8278161d7c6964d6b97332c19c1d1d7288542eec4743731144a0e8a0abd58d0df0664eeacd5e97e272d672e110734c84c075b9ca5ecc279010f22236063a8ed1a7ef31bd84637832ce375944eb672b51edd7b4b248dca106295d83f14f160b63f84a49cb6a0ab143494ccdf5444c464ede3ee7936f821857cb2f3cd7d29da414c10ab7db05e4d0817c1556804b1d3d9c771adafae48541f930464549cd2635\nHASH: e428c0fa3cf4f1cf\n\nKEY: f6f49ac81cbafda6579b81c9d34de602\nIN: b5e3e21c2b2104c50bdd9a96667d460c3a4c0a5975df60369ebfc0f6ace585d727292f1d37107ef0bdd7ef16fe8740e0453501405c2a863289773a4d121b37f01e1672b0339f57fb445f132262f6337f64e9df4ed7fa79ed1c722171cf350f1c1d78e7427904ff3b90bffa1eea64181c4e69440af712e37b7dea95953ebd4ef5efa7bb3b14f3f452e204f9a26fcfa104b80deb56e16e16af88fc710f68df3da7f162e3de3aa9f31a2485169411d6009014578cace09aacebda2e965cd8c4841df7e31704584aafc459e02afc978b812f8ba22e2887728243658b4adcc46a471aa357567505b17fa51fdbc4c5ddc67827cc86f66ce3a55257d00683ed2b67ea19ce1ba0eaaed8c4c1a7\nHASH: 1b44de49c45e9bc3\n\nKEY: 05f5a594c805575eca581fd6e8b16051\nIN: aefef8817ca1ec2ce86d04184ee9f5da020497d3296395cecec10af22696deb65dcf3cfa4a3b808eb1826ff421de79aeebfca796306eb3b39165ad11d8733cee89f30229f75c06dea935045439d5a69ac118c5ca26bf59a9cade2e6b80b0fcff911eaf7f4097f87751570362dc5aa42a379c5ad313fb403b15c9c6c517be4ec28a22039bafd618284b16e12bc38c39e8525b930f5a630d4d595980becae425229bee4c63706fc172f5f9ba6cd5fd36ab474112169c2ef52b2bd72b2ef3bceb8a82ca53a42abcb044b712cc1a6b37a8ca8894b9904076452ddaae641f9137a72987fe928c20b67c2ccaf9fd601fa10c5e4c968727357c4547fc68b0e11b35f4fcbdcc3784c2722eeebefb\nHASH: cd45d7070e5ecb55\n\nKEY: 0546eaf96bc197e372139dac59c9ca1f\nIN: 1e0622e2d160fe532cc789b76e99a5fc7e90078dfa0d3d9342ca8c625192afeacf6935e930bca3e7bb2d7a4db23371b6ee3e645b9c6939bc3d414ddbff363d4ecb2967962bbb1d3b86a476bedd5820d17b86747c886efb34692b87db843588d0db53c3d91f2c305e5d58cb7ab98d6387ac45400d2ad1f2435bdb0c4a76c6fd491c3f2bc049fe70426767cadb0fa897e29cfda1bcf4f18d0b15795de39ca05fd2318dcc8b9afb7a278e986521ad971a236745bb62a680b47707a7dd1ffeb98e8e61edaa038e7c2a568c4a0060c38752eae915e4f99c91d6de11574b3dee5f85209acb8a38a02d0f59f5192a3151ba8073682d191ddd26b01913e98b403a4ce771e5e020ffed080d2dcb7082\nHASH: 079a62a92c61d7ad\n\nKEY: bb1780c25e2afb8c9bc58a3dbec8867a\nIN: ed5287df6db34449db95528d55e64ff486f178d68135dcc996593592a40655c88dfbef41fecbbc09066adca3b3ceca2c9f7be48ba61587ac3c69bb5589fb257bb96c000ab5e5843e9e7257095ae087d084aa7e62e9e3f74079d1c4c10443c9d9bcbcae47c74e72c024e5cd13280f058a772afc379d2dee0e39ec0cfc219cbb2af7698162a3b84be52c90617760e84d3743909bdd5cf21bd3ea3e3e37c3734dda57a06db25ab81ff02823f6d39cf9e068698e1f597458d08a29aefef218b40e191dc3d05f089f133f5f337d98d1c0161f490849782248e915ebcf700d80667b2d0ba3fda022faeeb23ca87add7664666f46",
-    "37571964d613bf76a22061c9f746f9fb00ff0f5c2d90f648717e1f\nHASH: fcda80db378102b4\n\nKEY: ea7247b6addced42c51c827dbb2cb66c\nIN: 0ec554948d3af7cbc2306d249861f6291d44ab2be6bb26ab629347ac0e892cc902b3c5bf9688e39d826e32609834b34644a8b39c9a91f47a0f24e73a13edeec9e224756f6cff77e1d07fac03c1d803649279e33b2f16dd2d100bd82e9806afadb022700d55f5fc9688193da02dcc9dce974b60ccc2caad064acaa0f1b9e4f24e9074ac7877b91b19c7abbe5bb7f889775cd72ab9334475dddba19d008fdb01ab9cbfb1038a486c76f3c542bac704cf795be628cb83a5d9d128c2b401cf23ce494584cfe5b4ed58d9c906ded22090ffed4894238c6d02835e6180ce662b24ea18fd84d5fcbed49790322260fcf3f193081ccdb60d8f768b6dbfa61867bf90fbb1f27e1a6cb83daad6243079904a\nHASH: f8181640a08f1343\n",
-};
-static const size_t kLen49 = 18852;
-
-static const char *kData49[] = {
     "-----BEGIN CERTIFICATE-----\nMII2MzCCNRugAwIBAgIBATANBgkqhkiG9w0BAQsFADANMQswCQYDVQQDEwJDQTAg\nFw0wMDAxMDEwMDAwMDBaGA8yMTAwMDEwMTAwMDAwMFowDTELMAkGA1UEAxMCQ0Ew\nggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC6C9qEGRIBQXV8Lj29vVu+\nU+tyXzSSinWIumK5ijPhCm3DLnv4RayxkFwemtnkGRZ/o94ZnsXkBfU/IlsYdkuq\n8wK9WI/ql3gwWjH+KARIhIQcSLGiJcLN6kGuG2nlRBKMcPgPiEq2B0yBXFf4tG3C\nBbeae7+8G7uvOmv8NLyKj32neWpnUCTL5o2VwyPoxjLxT5gUR69v9XSVFj2irCZb\nsEedeKSb++LqyMhLfnRTzNv+ZHNh4izZHrktR25MvnT5QyBq32hx7AjZ2/xo70Om\nH7w10a2DwsVjJNMdxTEmgyvU9M6CeYRPX1Ykfg+sXCTtkTVAlBDUviIqY95CKy25\nAgMBAAGjgjOaMIIzljAOBgNVHQ8BAf8EBAMCAgQwEwYDVR0lBAwwCgYIKwYBBQUH\nAwEwDwYDVR0TAQH/BAUwAwEB/zCCM1wGA1UdHgSCM1MwgjNPoIIZqDAJggd0MC50\nZXN0MAmCB3QxLnRlc3QwCYIHdDIudGVzdDAJggd0My50ZXN0MAmCB3Q0LnRlc3Qw\nCYIHdDUudGVzdDAJggd0Ni50ZXN0MAmCB3Q3LnRlc3QwCYIHdDgudGVzdDAJggd0\nOS50ZXN0MAqCCHQxMC50ZXN0MAqCCHQxMS50ZXN0MAqCCHQxMi50ZXN0MAqCCHQx\nMy50ZXN0MAqCCHQxNC50ZXN0MAqCCHQxNS50ZXN0MAqCCHQxNi50ZXN0MAqCCHQx\nNy50ZXN0MAqCCHQxOC50ZXN0MAqCCHQxOS50ZXN0MAqCCHQyMC50ZXN0MAqCCHQy\nMS50ZXN0MAqCCHQyMi50ZXN0MAqCCHQyMy50ZXN0MAqCCHQyNC50ZXN0MAqCCHQy\nNS50ZXN0MAqCCHQyNi50ZXN0MAqCCHQyNy50ZXN0MAqCCHQyOC50ZXN0MAqCCHQy\nOS50ZXN0MAqCCHQzMC50ZXN0MAqCCHQzMS50ZXN0MAqCCHQzMi50ZXN0MAqCCHQz\nMy50ZXN0MAqCCHQzNC50ZXN0MAqCCHQzNS50ZXN0MAqCCHQzNi50ZXN0MAqCCHQz\nNy50ZXN0MAqCCHQzOC50ZXN0MAqCCHQzOS50ZXN0MAqCCHQ0MC50ZXN0MAqCCHQ0\nMS50ZXN0MAqCCHQ0Mi50ZXN0MAqCCHQ0My50ZXN0MAqCCHQ0NC50ZXN0MAqCCHQ0\nNS50ZXN0MAqCCHQ0Ni50ZXN0MAqCCHQ0Ny50ZXN0MAqCCHQ0OC50ZXN0MAqCCHQ0\nOS50ZXN0MAqCCHQ1MC50ZXN0MAqCCHQ1MS50ZXN0MAqCCHQ1Mi50ZXN0MAqCCHQ1\nMy50ZXN0MAqCCHQ1NC50ZXN0MAqCCHQ1NS50ZXN0MAqCCHQ1Ni50ZXN0MAqCCHQ1\nNy50ZXN0MAqCCHQ1OC50ZXN0MAqCCHQ1OS50ZXN0MAqCCHQ2MC50ZXN0MAqCCHQ2\nMS50ZXN0MAqCCHQ2Mi50ZXN0MAqCCHQ2My50ZXN0MAqCCHQ2NC50ZXN0MAqCCHQ2\nNS50ZXN0MAqCCHQ2Ni50ZXN0MAqCCHQ2Ny50ZXN0MAqCCHQ2OC50ZXN0MAqCCHQ2\nOS50ZXN0MAqCCHQ3MC50ZXN0MAqCCHQ3MS50ZXN0MAqCCHQ3Mi50ZXN0MAqCCHQ3\nMy50ZXN0MAqCCHQ3NC50ZXN0MAqCCHQ3NS50ZXN0MAqCCHQ3Ni50ZXN0MAqCCHQ3\nNy50ZXN0MAqCCHQ3OC50ZXN0MAqCCHQ3OS50ZXN0MAqCCHQ4MC50ZXN0MAqCCHQ4\nMS50ZXN0MAqCCHQ4Mi50ZXN0MAqCCHQ4My50ZXN0MAqCCHQ4NC50ZXN0MAqCCHQ4\nNS50ZXN0MAqCCHQ4Ni50ZXN0MAqCCHQ4Ny50ZXN0MAqCCHQ4OC50ZXN0MAqCCHQ4\nOS50ZXN0MAqCCHQ5MC50ZXN0MAqCCHQ5MS50ZXN0MAqCCHQ5Mi50ZXN0MAqCCHQ5\nMy50ZXN0MAqCCHQ5NC50ZXN0MAqCCHQ5NS50ZXN0MAqCCHQ5Ni50ZXN0MAqCCHQ5\nNy50ZXN0MAqCCHQ5OC50ZXN0MAqCCHQ5OS50ZXN0MAuCCXQxMDAudGVzdDALggl0\nMTAxLnRlc3QwC4IJdDEwMi50ZXN0MAuCCXQxMDMudGVzdDALggl0MTA0LnRlc3Qw\nC4IJdDEwNS50ZXN0MAuCCXQxMDYudGVzdDALggl0MTA3LnRlc3QwC4IJdDEwOC50\nZXN0MAuCCXQxMDkudGVzdDALggl0MTEwLnRlc3QwC4IJdDExMS50ZXN0MAuCCXQx\nMTIudGVzdDALggl0MTEzLnRlc3QwC4IJdDExNC50ZXN0MAuCCXQxMTUudGVzdDAL\nggl0MTE2LnRlc3QwC4IJdDExNy50ZXN0MAuCCXQxMTgudGVzdDALggl0MTE5LnRl\nc3QwC4IJdDEyMC50ZXN0MAuCCXQxMjEudGVzdDALggl0MTIyLnRlc3QwC4IJdDEy\nMy50ZXN0MAuCCXQxMjQudGVzdDALggl0MTI1LnRlc3QwC4IJdDEyNi50ZXN0MAuC\nCXQxMjcudGVzdDALggl0MTI4LnRlc3QwC4IJdDEyOS50ZXN0MAuCCXQxMzAudGVz\ndDALggl0MTMxLnRlc3QwC4IJdDEzMi50ZXN0MAuCCXQxMzMudGVzdDALggl0MTM0\nLnRlc3QwC4IJdDEzNS50ZXN0MAuCCXQxMzYudGVzdDALggl0MTM3LnRlc3QwC4IJ\ndDEzOC50ZXN0MAuCCXQxMzkudGVzdDALggl0MTQwLnRlc3QwC4IJdDE0MS50ZXN0\nMAuCCXQxNDIudGVzdDALggl0MTQzLnRlc3QwC4IJdDE0NC50ZXN0MAuCCXQxNDUu\ndGVzdDALggl0MTQ2LnRlc3QwC4IJdDE0Ny50ZXN0MAuCCXQxNDgudGVzdDALggl0\nMTQ5LnRlc3QwC4IJdDE1MC50ZXN0MAuCCXQxNTEudGVzdDALggl0MTUyLnRlc3Qw\nC4IJdDE1My50ZXN0MAuCCXQxNTQudGVzdDALggl0MTU1LnRlc3QwC4IJdDE1Ni50\nZXN0MAuCCXQxNTcudGVzdDALggl0MTU4LnRlc3QwC4IJdDE1OS50ZXN0MAuCCXQx\nNjAudGVzdDALggl0MTYxLnRlc3QwC4IJdDE2Mi50ZXN0MAuCCXQxNjMudGVzdDAL\nggl0MTY0LnRlc3QwC4IJdDE2NS50ZXN0MAuCCXQxNjYudGVzdDALggl0MTY3LnRl\nc3QwC4IJdDE2OC50ZXN0MAuCCXQxNjkudGVzdDALggl0MTcwLnRlc3QwC4IJdDE3\nMS50ZXN0MAuCCXQxNzIudGVzdDALggl0MTczLnRlc3QwC4IJdDE3NC50ZXN0MAuC\nCXQxNzUudGVzdDALggl0MTc2LnRlc3QwC4IJdDE3Ny50ZXN0MAuCCXQxNzgudGVz\ndDALggl0MTc5LnRlc3QwC4IJdDE4MC50ZXN0MAuCCXQxODEudGVzdDALggl0MTgy\nLnRlc3QwC4IJdDE4My50ZXN0MAuCCXQxODQudGVzdDALggl0MTg1LnRlc3QwC4IJ\ndDE4Ni50ZXN0MAuCCXQxODcudGVzdDALggl0MTg4LnRlc3QwC4IJdDE4OS50ZXN0\nMAuCCXQxOTAudGVzdDALggl0MTkxLnRlc3QwC4IJdDE5Mi50ZXN0MAuCCXQxOTMu\ndGVzdDALggl0MTk0LnRlc3QwC4IJdDE5NS50ZXN0MAuCCXQxOTYudGVzdDALggl0\nMTk3LnRlc3QwC4IJdDE5OC50ZXN0MAuCCXQxOTkudGVzdDALggl0MjAwLnRlc3Qw\nC4IJdDIwMS50ZXN0MAuCCXQyMDIudGVzdDALggl0MjAzLnRlc3QwC4IJdDIwNC50\nZXN0MAuCCXQyMDUudGVzdDALggl0MjA2LnRlc3QwC4IJdDIwNy50ZXN0MAuCCXQy\nMDgudGVzdDALggl0MjA5LnRlc3QwC4IJdDIxMC50ZXN0MAuCCXQyMTEudGVzdDAL\nggl0MjEyLnRlc3QwC4IJdDIxMy50ZXN0MAuCCXQyMTQudGVzdDALggl0MjE1LnRl\nc3QwC4IJdDIxNi50ZXN0MAuCCXQyMTcudGVzdDALggl0MjE4LnRlc3QwC4IJdDIx\nOS50ZXN0MAuCCXQyMjAudGVzdDALggl0MjIxLnRlc3QwC4IJdDIyMi50ZXN0MAuC\nCXQyMjMudGVzdDALggl0MjI0LnRlc3QwC4IJdDIyNS50ZXN0MAuCCXQyMjYudGVz\ndDALggl0MjI3LnRlc3QwC4IJdDIyOC50ZXN0MAuCCXQyMjkudGVzdDALggl0MjMw\nLnRlc3QwC4IJdDIzMS50ZXN0MAuCCXQyMzIudGVzdDALggl0MjMzLnRlc3QwC4IJ\ndDIzNC50ZXN0MAuCCXQyMzUudGVzdDALggl0MjM2LnRlc3QwC4IJdDIzNy50ZXN0\nMAuCCXQyMzgudGVzdDALggl0MjM5LnRlc3QwC4IJdDI0MC50ZXN0MAuCCXQyNDEu\ndGVzdDALggl0MjQyLnRlc3QwC4IJdDI0My50ZXN0MAuCCXQyNDQudGVzdDALggl0\nMjQ1LnRlc3QwC4IJdDI0Ni50ZXN0MAuCCXQyNDcudGVzdDALggl0MjQ4LnRlc3Qw\nC4IJdDI0OS50ZXN0MAuCCXQyNTAudGVzdDALggl0MjUxLnRlc3QwC4IJdDI1Mi50\nZXN0MAuCCXQyNTMudGVzdDALggl0MjU0LnRlc3QwC4IJdDI1NS50ZXN0MAuCCXQy\nNTYudGVzdDALggl0MjU3LnRlc3QwC4IJdDI1OC50ZXN0MAuCCXQyNTkudGVzdDAL\nggl0MjYwLnRlc3QwC4IJdDI2MS50ZXN0MAuCCXQyNjIudGVzdDALggl0MjYzLnRl\nc3QwC4IJdDI2NC50ZXN0MAuCCXQyNjUudGVzdDALggl0MjY2LnRlc3QwC4IJdDI2\nNy50ZXN0MAuCCXQyNjgudGVzdDALggl0MjY5LnRlc3QwC4IJdDI3MC50ZXN0MAuC\nCXQyNzEudGVzdDALggl0MjcyLnRlc3QwC4IJdDI3My50ZXN0MAuCCXQyNzQudGVz\ndDALggl0Mjc1LnRlc3QwC4IJdDI3Ni50ZXN0MAuCCXQyNzcudGVzdDALggl0Mjc4\nLnRlc3QwC4IJdDI3OS50ZXN0MAuCCXQyODAudGVzdDALggl0MjgxLnRlc3QwC4IJ\ndDI4Mi50ZXN0MAuCCXQyODMudGVzdDALggl0Mjg0LnRlc3QwC4IJdDI4NS50ZXN0\nMAuCCXQyODYudGVzdDALggl0Mjg3LnRlc3QwC4IJdDI4OC50ZXN0MAuCCXQyODku\ndGVzdDALggl0MjkwLnRlc3QwC4IJdDI5MS50ZXN0MAuCCXQyOTIudGVzdDALggl0\nMjkzLnRlc3QwC4IJdDI5NC50ZXN0MAuCCXQyOTUudGVzdDALggl0Mjk2LnRlc3Qw\nC4IJdDI5Ny50ZXN0MAuCCXQyOTgudGVzdDALggl0Mjk5LnRlc3QwC4IJdDMwMC50\nZXN0MAuCCXQzMDEudGVzdDALggl0MzAyLnRlc3QwC4IJdDMwMy50ZXN0MAuCCXQz\nMDQudGVzdDALggl0MzA1LnRlc3QwC4IJdDMwNi50ZXN0MAuCCXQzMDcudGVzdDAL\nggl0MzA4LnRlc3QwC4IJdDMwOS50ZXN0MAuCCXQzMTAudGVzdDALggl0MzExLnRl\nc3QwC4IJdDMxMi50ZXN0MAuCCXQzMTMudGVzdDALggl0MzE0LnRlc3QwC4IJdDMx\nNS50ZXN0MAuCCXQzMTYudGVzdDALggl0MzE3LnRlc3QwC4IJdDMxOC50ZXN0MAuC\nCXQzMTkudGVzdDALggl0MzIwLnRlc3QwC4IJdDMyMS50ZXN0MAuCCXQzMjIudGVz\ndDALggl0MzIzLnRlc3QwC4IJdDMyNC50ZXN0MAuCCXQzMjUudGVzdDALggl0MzI2\nLnRlc3QwC4IJdDMyNy50ZXN0MAuCCXQzMjgudGVzdDALggl0MzI5LnRlc3QwC4IJ\ndDMzMC50ZXN0MAuCCXQzMzEudGVzdDALggl0MzMyLnRlc3QwC4IJdDMzMy50ZXN0\nMAuCCXQzMzQudGVzdDALggl0MzM1LnRlc3QwC4IJdDMzNi50ZXN0MAuCCXQzMzcu\ndGVzdDALggl0MzM4LnRlc3QwC4IJdDMzOS50ZXN0MAuCCXQzNDAudGVzdDALggl0\nMzQxLnRlc3QwC4IJdDM0Mi50ZXN0MAuCCXQzNDMudGVzdDALggl0MzQ0LnRlc3Qw\nC4IJdDM0NS50ZXN0MAuCCXQzNDYudGVzdDALggl0MzQ3LnRlc3QwC4IJdDM0OC50\nZXN0MAuCCXQzNDkudGVzdDALggl0MzUwLnRlc3QwC4IJdDM1MS50ZXN0MAuCCXQz\nNTIudGVzdDALggl0MzUzLnRlc3QwC4IJdDM1NC50ZXN0MAuCCXQzNTUudGVzdDAL\nggl0MzU2LnRlc3QwC4IJdDM1Ny50ZXN0MAuCCXQzNTgudGVzdDALggl0MzU5LnRl\nc3QwC4IJdDM2MC50ZXN0MAuCCXQzNjEudGVzdDALggl0MzYyLnRlc3QwC4IJdDM2\nMy50ZXN0MAuCCXQzNjQudGVzdDALggl0MzY1LnRlc3QwC4IJdDM2Ni50ZXN0MAuC\nCXQzNjcudGVzdDALggl0MzY4LnRlc3QwC4IJdDM2OS50ZXN0MAuCCXQzNzAudGVz\ndDALggl0MzcxLnRlc3QwC4IJdDM3Mi50ZXN0MAuCCXQzNzMudGVzdDALggl0Mzc0\nLnRlc3QwC4IJdDM3NS50ZXN0MAuCCXQzNzYudGVzdDALggl0Mzc3LnRlc3QwC4IJ\ndDM3OC50ZXN0MAuCCXQzNzkudGVzdDALggl0MzgwLnRlc3QwC4IJdDM4MS50ZXN0\nMAuCCXQzODIudGVzdDALggl0MzgzLnRlc3QwC4IJdDM4NC50ZXN0MAuCCXQzODUu\ndGVzdDALggl0Mzg2LnRlc3QwC4IJdDM4Ny50ZXN0MAuCCXQzODgudGVzdDALggl0\nMzg5LnRlc3QwC4IJdDM5MC50ZXN0MAuCCXQzOTEudGVzdDALggl0MzkyLnRlc3Qw\nC4IJdDM5My50ZXN0MAuCCXQzOTQudGVzdDALggl0Mzk1LnRlc3QwC4IJdDM5Ni50\nZXN0MAuCCXQzOTcudGVzdDALggl0Mzk4LnRlc3QwC4IJdDM5OS50ZXN0MAuCCXQ0\nMDAudGVzdDALggl0NDAxLnRlc3QwC4IJdDQwMi50ZXN0MAuCCXQ0MDMudGVzdDAL\nggl0NDA0LnRlc3QwC4IJdDQwNS50ZXN0MAuCCXQ0MDYudGVzdDALggl0NDA3LnRl\nc3QwC4IJdDQwOC50ZXN0MAuCCXQ0MDkudGVzdDALggl0NDEwLnRlc3QwC4IJdDQx\nMS50ZXN0MAuCCXQ0MTIudGVzdDALggl0NDEzLnRlc3QwC4IJdDQxNC50ZXN0MAuC\nCXQ0MTUudGVzdDALggl0NDE2LnRlc3QwC4IJdDQxNy50ZXN0MAuCCXQ0MTgudGVz\ndDALggl0NDE5LnRlc3QwC4IJdDQyMC50ZXN0MAuCCXQ0MjEudGVzdDALggl0NDIy\nLnRlc3QwC4IJdDQyMy50ZXN0MAuCCXQ0MjQudGVzdDALggl0NDI1LnRlc3QwC4IJ\ndDQyNi50ZXN0MAuCCXQ0MjcudGVzdDALggl0NDI4LnRlc3QwC4IJdDQyOS50ZXN0\nMAuCCXQ0MzAudGVzdDALggl0NDMxLnRlc3QwC4IJdDQzMi50ZXN0MAuCCXQ0MzMu\ndGVzdDALggl0NDM0LnRlc3QwC4IJdDQzNS50ZXN",
     "0MAuCCXQ0MzYudGVzdDALggl0\nNDM3LnRlc3QwC4IJdDQzOC50ZXN0MAuCCXQ0MzkudGVzdDALggl0NDQwLnRlc3Qw\nC4IJdDQ0MS50ZXN0MAuCCXQ0NDIudGVzdDALggl0NDQzLnRlc3QwC4IJdDQ0NC50\nZXN0MAuCCXQ0NDUudGVzdDALggl0NDQ2LnRlc3QwC4IJdDQ0Ny50ZXN0MAuCCXQ0\nNDgudGVzdDALggl0NDQ5LnRlc3QwC4IJdDQ1MC50ZXN0MAuCCXQ0NTEudGVzdDAL\nggl0NDUyLnRlc3QwC4IJdDQ1My50ZXN0MAuCCXQ0NTQudGVzdDALggl0NDU1LnRl\nc3QwC4IJdDQ1Ni50ZXN0MAuCCXQ0NTcudGVzdDALggl0NDU4LnRlc3QwC4IJdDQ1\nOS50ZXN0MAuCCXQ0NjAudGVzdDALggl0NDYxLnRlc3QwC4IJdDQ2Mi50ZXN0MAuC\nCXQ0NjMudGVzdDALggl0NDY0LnRlc3QwC4IJdDQ2NS50ZXN0MAuCCXQ0NjYudGVz\ndDALggl0NDY3LnRlc3QwC4IJdDQ2OC50ZXN0MAuCCXQ0NjkudGVzdDALggl0NDcw\nLnRlc3QwC4IJdDQ3MS50ZXN0MAuCCXQ0NzIudGVzdDALggl0NDczLnRlc3QwC4IJ\ndDQ3NC50ZXN0MAuCCXQ0NzUudGVzdDALggl0NDc2LnRlc3QwC4IJdDQ3Ny50ZXN0\nMAuCCXQ0NzgudGVzdDALggl0NDc5LnRlc3QwC4IJdDQ4MC50ZXN0MAuCCXQ0ODEu\ndGVzdDALggl0NDgyLnRlc3QwC4IJdDQ4My50ZXN0MAuCCXQ0ODQudGVzdDALggl0\nNDg1LnRlc3QwC4IJdDQ4Ni50ZXN0MAuCCXQ0ODcudGVzdDALggl0NDg4LnRlc3Qw\nC4IJdDQ4OS50ZXN0MAuCCXQ0OTAudGVzdDALggl0NDkxLnRlc3QwC4IJdDQ5Mi50\nZXN0MAuCCXQ0OTMudGVzdDALggl0NDk0LnRlc3QwC4IJdDQ5NS50ZXN0MAuCCXQ0\nOTYudGVzdDALggl0NDk3LnRlc3QwC4IJdDQ5OC50ZXN0MAuCCXQ0OTkudGVzdDAL\nggl0NTAwLnRlc3QwC4IJdDUwMS50ZXN0MAuCCXQ1MDIudGVzdDALggl0NTAzLnRl\nc3QwC4IJdDUwNC50ZXN0MAuCCXQ1MDUudGVzdDALggl0NTA2LnRlc3QwC4IJdDUw\nNy50ZXN0MAuCCXQ1MDgudGVzdDALggl0NTA5LnRlc3QwC4IJdDUxMC50ZXN0MAuC\nCXQ1MTEudGVzdDALggl0NTEyLnRlc3QwB4IFLnRlc3ShghmfMAmCB3gwLnRlc3Qw\nCYIHeDEudGVzdDAJggd4Mi50ZXN0MAmCB3gzLnRlc3QwCYIHeDQudGVzdDAJggd4\nNS50ZXN0MAmCB3g2LnRlc3QwCYIHeDcudGVzdDAJggd4OC50ZXN0MAmCB3g5LnRl\nc3QwCoIIeDEwLnRlc3QwCoIIeDExLnRlc3QwCoIIeDEyLnRlc3QwCoIIeDEzLnRl\nc3QwCoIIeDE0LnRlc3QwCoIIeDE1LnRlc3QwCoIIeDE2LnRlc3QwCoIIeDE3LnRl\nc3QwCoIIeDE4LnRlc3QwCoIIeDE5LnRlc3QwCoIIeDIwLnRlc3QwCoIIeDIxLnRl\nc3QwCoIIeDIyLnRlc3QwCoIIeDIzLnRlc3QwCoIIeDI0LnRlc3QwCoIIeDI1LnRl\nc3QwCoIIeDI2LnRlc3QwCoIIeDI3LnRlc3QwCoIIeDI4LnRlc3QwCoIIeDI5LnRl\nc3QwCoIIeDMwLnRlc3QwCoIIeDMxLnRlc3QwCoIIeDMyLnRlc3QwCoIIeDMzLnRl\nc3QwCoIIeDM0LnRlc3QwCoIIeDM1LnRlc3QwCoIIeDM2LnRlc3QwCoIIeDM3LnRl\nc3QwCoIIeDM4LnRlc3QwCoIIeDM5LnRlc3QwCoIIeDQwLnRlc3QwCoIIeDQxLnRl\nc3QwCoIIeDQyLnRlc3QwCoIIeDQzLnRlc3QwCoIIeDQ0LnRlc3QwCoIIeDQ1LnRl\nc3QwCoIIeDQ2LnRlc3QwCoIIeDQ3LnRlc3QwCoIIeDQ4LnRlc3QwCoIIeDQ5LnRl\nc3QwCoIIeDUwLnRlc3QwCoIIeDUxLnRlc3QwCoIIeDUyLnRlc3QwCoIIeDUzLnRl\nc3QwCoIIeDU0LnRlc3QwCoIIeDU1LnRlc3QwCoIIeDU2LnRlc3QwCoIIeDU3LnRl\nc3QwCoIIeDU4LnRlc3QwCoIIeDU5LnRlc3QwCoIIeDYwLnRlc3QwCoIIeDYxLnRl\nc3QwCoIIeDYyLnRlc3QwCoIIeDYzLnRlc3QwCoIIeDY0LnRlc3QwCoIIeDY1LnRl\nc3QwCoIIeDY2LnRlc3QwCoIIeDY3LnRlc3QwCoIIeDY4LnRlc3QwCoIIeDY5LnRl\nc3QwCoIIeDcwLnRlc3QwCoIIeDcxLnRlc3QwCoIIeDcyLnRlc3QwCoIIeDczLnRl\nc3QwCoIIeDc0LnRlc3QwCoIIeDc1LnRlc3QwCoIIeDc2LnRlc3QwCoIIeDc3LnRl\nc3QwCoIIeDc4LnRlc3QwCoIIeDc5LnRlc3QwCoIIeDgwLnRlc3QwCoIIeDgxLnRl\nc3QwCoIIeDgyLnRlc3QwCoIIeDgzLnRlc3QwCoIIeDg0LnRlc3QwCoIIeDg1LnRl\nc3QwCoIIeDg2LnRlc3QwCoIIeDg3LnRlc3QwCoIIeDg4LnRlc3QwCoIIeDg5LnRl\nc3QwCoIIeDkwLnRlc3QwCoIIeDkxLnRlc3QwCoIIeDkyLnRlc3QwCoIIeDkzLnRl\nc3QwCoIIeDk0LnRlc3QwCoIIeDk1LnRlc3QwCoIIeDk2LnRlc3QwCoIIeDk3LnRl\nc3QwCoIIeDk4LnRlc3QwCoIIeDk5LnRlc3QwC4IJeDEwMC50ZXN0MAuCCXgxMDEu\ndGVzdDALggl4MTAyLnRlc3QwC4IJeDEwMy50ZXN0MAuCCXgxMDQudGVzdDALggl4\nMTA1LnRlc3QwC4IJeDEwNi50ZXN0MAuCCXgxMDcudGVzdDALggl4MTA4LnRlc3Qw\nC4IJeDEwOS50ZXN0MAuCCXgxMTAudGVzdDALggl4MTExLnRlc3QwC4IJeDExMi50\nZXN0MAuCCXgxMTMudGVzdDALggl4MTE0LnRlc3QwC4IJeDExNS50ZXN0MAuCCXgx\nMTYudGVzdDALggl4MTE3LnRlc3QwC4IJeDExOC50ZXN0MAuCCXgxMTkudGVzdDAL\nggl4MTIwLnRlc3QwC4IJeDEyMS50ZXN0MAuCCXgxMjIudGVzdDALggl4MTIzLnRl\nc3QwC4IJeDEyNC50ZXN0MAuCCXgxMjUudGVzdDALggl4MTI2LnRlc3QwC4IJeDEy\nNy50ZXN0MAuCCXgxMjgudGVzdDALggl4MTI5LnRlc3QwC4IJeDEzMC50ZXN0MAuC\nCXgxMzEudGVzdDALggl4MTMyLnRlc3QwC4IJeDEzMy50ZXN0MAuCCXgxMzQudGVz\ndDALggl4MTM1LnRlc3QwC4IJeDEzNi50ZXN0MAuCCXgxMzcudGVzdDALggl4MTM4\nLnRlc3QwC4IJeDEzOS50ZXN0MAuCCXgxNDAudGVzdDALggl4MTQxLnRlc3QwC4IJ\neDE0Mi50ZXN0MAuCCXgxNDMudGVzdDALggl4MTQ0LnRlc3QwC4IJeDE0NS50ZXN0\nMAuCCXgxNDYudGVzdDALggl4MTQ3LnRlc3QwC4IJeDE0OC50ZXN0MAuCCXgxNDku\ndGVzdDALggl4MTUwLnRlc3QwC4IJeDE1MS50ZXN0MAuCCXgxNTIudGVzdDALggl4\nMTUzLnRlc3QwC4IJeDE1NC50ZXN0MAuCCXgxNTUudGVzdDALggl4MTU2LnRlc3Qw\nC4IJeDE1Ny50ZXN0MAuCCXgxNTgudGVzdDALggl4MTU5LnRlc3QwC4IJeDE2MC50\nZXN0MAuCCXgxNjEudGVzdDALggl4MTYyLnRlc3QwC4IJeDE2My50ZXN0MAuCCXgx\nNjQudGVzdDALggl4MTY1LnRlc3QwC4IJeDE2Ni50ZXN0MAuCCXgxNjcudGVzdDAL\nggl4MTY4LnRlc3QwC4IJeDE2OS50ZXN0MAuCCXgxNzAudGVzdDALggl4MTcxLnRl\nc3QwC4IJeDE3Mi50ZXN0MAuCCXgxNzMudGVzdDALggl4MTc0LnRlc3QwC4IJeDE3\nNS50ZXN0MAuCCXgxNzYudGVzdDALggl4MTc3LnRlc3QwC4IJeDE3OC50ZXN0MAuC\nCXgxNzkudGVzdDALggl4MTgwLnRlc3QwC4IJeDE4MS50ZXN0MAuCCXgxODIudGVz\ndDALggl4MTgzLnRlc3QwC4IJeDE4NC50ZXN0MAuCCXgxODUudGVzdDALggl4MTg2\nLnRlc3QwC4IJeDE4Ny50ZXN0MAuCCXgxODgudGVzdDALggl4MTg5LnRlc3QwC4IJ\neDE5MC50ZXN0MAuCCXgxOTEudGVzdDALggl4MTkyLnRlc3QwC4IJeDE5My50ZXN0\nMAuCCXgxOTQudGVzdDALggl4MTk1LnRlc3QwC4IJeDE5Ni50ZXN0MAuCCXgxOTcu\ndGVzdDALggl4MTk4LnRlc3QwC4IJeDE5OS50ZXN0MAuCCXgyMDAudGVzdDALggl4\nMjAxLnRlc3QwC4IJeDIwMi50ZXN0MAuCCXgyMDMudGVzdDALggl4MjA0LnRlc3Qw\nC4IJeDIwNS50ZXN0MAuCCXgyMDYudGVzdDALggl4MjA3LnRlc3QwC4IJeDIwOC50\nZXN0MAuCCXgyMDkudGVzdDALggl4MjEwLnRlc3QwC4IJeDIxMS50ZXN0MAuCCXgy\nMTIudGVzdDALggl4MjEzLnRlc3QwC4IJeDIxNC50ZXN0MAuCCXgyMTUudGVzdDAL\nggl4MjE2LnRlc3QwC4IJeDIxNy50ZXN0MAuCCXgyMTgudGVzdDALggl4MjE5LnRl\nc3QwC4IJeDIyMC50ZXN0MAuCCXgyMjEudGVzdDALggl4MjIyLnRlc3QwC4IJeDIy\nMy50ZXN0MAuCCXgyMjQudGVzdDALggl4MjI1LnRlc3QwC4IJeDIyNi50ZXN0MAuC\nCXgyMjcudGVzdDALggl4MjI4LnRlc3QwC4IJeDIyOS50ZXN0MAuCCXgyMzAudGVz\ndDALggl4MjMxLnRlc3QwC4IJeDIzMi50ZXN0MAuCCXgyMzMudGVzdDALggl4MjM0\nLnRlc3QwC4IJeDIzNS50ZXN0MAuCCXgyMzYudGVzdDALggl4MjM3LnRlc3QwC4IJ\neDIzOC50ZXN0MAuCCXgyMzkudGVzdDALggl4MjQwLnRlc3QwC4IJeDI0MS50ZXN0\nMAuCCXgyNDIudGVzdDALggl4MjQzLnRlc3QwC4IJeDI0NC50ZXN0MAuCCXgyNDUu\ndGVzdDALggl4MjQ2LnRlc3QwC4IJeDI0Ny50ZXN0MAuCCXgyNDgudGVzdDALggl4\nMjQ5LnRlc3QwC4IJeDI1MC50ZXN0MAuCCXgyNTEudGVzdDALggl4MjUyLnRlc3Qw\nC4IJeDI1My50ZXN0MAuCCXgyNTQudGVzdDALggl4MjU1LnRlc3QwC4IJeDI1Ni50\nZXN0MAuCCXgyNTcudGVzdDALggl4MjU4LnRlc3QwC4IJeDI1OS50ZXN0MAuCCXgy\nNjAudGVzdDALggl4MjYxLnRlc3QwC4IJeDI2Mi50ZXN0MAuCCXgyNjMudGVzdDAL\nggl4MjY0LnRlc3QwC4IJeDI2NS50ZXN0MAuCCXgyNjYudGVzdDALggl4MjY3LnRl\nc3QwC4IJeDI2OC50ZXN0MAuCCXgyNjkudGVzdDALggl4MjcwLnRlc3QwC4IJeDI3\nMS50ZXN0MAuCCXgyNzIudGVzdDALggl4MjczLnRlc3QwC4IJeDI3NC50ZXN0MAuC\nCXgyNzUudGVzdDALggl4Mjc2LnRlc3QwC4IJeDI3Ny50ZXN0MAuCCXgyNzgudGVz\ndDALggl4Mjc5LnRlc3QwC4IJeDI4MC50ZXN0MAuCCXgyODEudGVzdDALggl4Mjgy\nLnRlc3QwC4IJeDI4My50ZXN0MAuCCXgyODQudGVzdDALggl4Mjg1LnRlc3QwC4IJ\neDI4Ni50ZXN0MAuCCXgyODcudGVzdDALggl4Mjg4LnRlc3QwC4IJeDI4OS50ZXN0\nMAuCCXgyOTAudGVzdDALggl4MjkxLnRlc3QwC4IJeDI5Mi50ZXN0MAuCCXgyOTMu\ndGVzdDALggl4Mjk0LnRlc3QwC4IJeDI5NS50ZXN0MAuCCXgyOTYudGVzdDALggl4\nMjk3LnRlc3QwC4IJeDI5OC50ZXN0MAuCCXgyOTkudGVzdDALggl4MzAwLnRlc3Qw\nC4IJeDMwMS50ZXN0MAuCCXgzMDIudGVzdDALggl4MzAzLnRlc3QwC4IJeDMwNC50\nZXN0MAuCCXgzMDUudGVzdDALggl4MzA2LnRlc3QwC4IJeDMwNy50ZXN0MAuCCXgz\nMDgudGVzdDALggl4MzA5LnRlc3QwC4IJeDMxMC50ZXN0MAuCCXgzMTEudGVzdDAL\nggl4MzEyLnRlc3QwC4IJeDMxMy50ZXN0MAuCCXgzMTQudGVzdDALggl4MzE1LnRl\nc3QwC4IJeDMxNi50ZXN0MAuCCXgzMTcudGVzdDALggl4MzE4LnRlc3QwC4IJeDMx\nOS50ZXN0MAuCCXgzMjAudGVzdDALggl4MzIxLnRlc3QwC4IJeDMyMi50ZXN0MAuC\nCXgzMjMudGVzdDALggl4MzI0LnRlc3QwC4IJeDMyNS50ZXN0MAuCCXgzMjYudGVz\ndDALggl4MzI3LnRlc3QwC4IJeDMyOC50ZXN0MAuCCXgzMjkudGVzdDALggl4MzMw\nLnRlc3QwC4IJeDMzMS50ZXN0MAuCCXgzMzIudGVzdDALggl4MzMzLnRlc3QwC4IJ\neDMzNC50ZXN0MAuCCXgzMzUudGVzdDALggl4MzM2LnRlc3QwC4IJeDMzNy50ZXN0\nMAuCCXgzMzgudGVzdDALggl4MzM5LnRlc3QwC4IJeDM0MC50ZXN0MAuCCXgzNDEu\ndGVzdDALggl4MzQyLnRlc3QwC4IJeDM0My50ZXN0MAuCCXgzNDQudGVzdDALggl4\nMzQ1LnRlc3QwC4IJeDM0Ni50ZXN0MAuCCXgzNDcudGVzdDALggl4MzQ4LnRlc3Qw\nC4IJeDM0OS50ZXN0MAuCCXgzNTAudGVzdDALggl4MzUxLnRlc3QwC4IJeDM1Mi50\nZXN0MAuCCXgzNTMudGVzdDALggl4MzU0LnRlc3QwC4IJeDM1NS50ZXN0MAuCCXgz\nNTYudGVzdDALggl4MzU3LnRlc3QwC4IJeDM1OC50ZXN0MAuCCXgzNTkudGVzdDAL\nggl4MzYwLnRlc3QwC4IJeDM2MS50ZXN0MAuCCXgzNjIudGVzdDALggl4MzYzLnRl\nc3QwC4IJeDM2NC50ZXN0MAuCCXgzNjUudGVzdDALggl4MzY2LnRlc3QwC4IJeDM2\nNy50ZXN0MAuCCXgzNjgudGVzdDALggl4MzY5LnRlc3QwC4IJeDM3MC50ZXN0MAuC\nCXgzNzEudGVzdDALggl4MzcyLnRlc3QwC4IJeDM3My50ZXN0MAuCCXgzNzQudGVz\ndDALggl4Mzc1LnRlc3QwC4IJeDM3Ni50ZXN0MAuCCXgzNzcudGVzdDALggl4Mzc4\nLnRlc3QwC4IJeDM3OS50ZXN0MAuCCXgzODAudGVzdDALggl4MzgxLnRlc3QwC4IJ\neDM4Mi50ZXN0MAuCCXgzODMudGVzdDALggl4Mzg0LnRlc3QwC4IJeDM4NS50ZXN0\nMAuCCXgzODYudGVzdDALggl4Mzg3LnRlc3QwC4IJeDM4OC50ZXN0MAuCCXgzODku\ndGVzdDALggl4MzkwLnRlc3QwC4IJeDM5MS50ZXN0MAuCCXgzOTIudGVzdDALggl4\nMzkzLnRlc3QwC4IJeDM5NC50ZXN0MAuCCXgzOTUud",
     "GVzdDALggl4Mzk2LnRlc3Qw\nC4IJeDM5Ny50ZXN0MAuCCXgzOTgudGVzdDALggl4Mzk5LnRlc3QwC4IJeDQwMC50\nZXN0MAuCCXg0MDEudGVzdDALggl4NDAyLnRlc3QwC4IJeDQwMy50ZXN0MAuCCXg0\nMDQudGVzdDALggl4NDA1LnRlc3QwC4IJeDQwNi50ZXN0MAuCCXg0MDcudGVzdDAL\nggl4NDA4LnRlc3QwC4IJeDQwOS50ZXN0MAuCCXg0MTAudGVzdDALggl4NDExLnRl\nc3QwC4IJeDQxMi50ZXN0MAuCCXg0MTMudGVzdDALggl4NDE0LnRlc3QwC4IJeDQx\nNS50ZXN0MAuCCXg0MTYudGVzdDALggl4NDE3LnRlc3QwC4IJeDQxOC50ZXN0MAuC\nCXg0MTkudGVzdDALggl4NDIwLnRlc3QwC4IJeDQyMS50ZXN0MAuCCXg0MjIudGVz\ndDALggl4NDIzLnRlc3QwC4IJeDQyNC50ZXN0MAuCCXg0MjUudGVzdDALggl4NDI2\nLnRlc3QwC4IJeDQyNy50ZXN0MAuCCXg0MjgudGVzdDALggl4NDI5LnRlc3QwC4IJ\neDQzMC50ZXN0MAuCCXg0MzEudGVzdDALggl4NDMyLnRlc3QwC4IJeDQzMy50ZXN0\nMAuCCXg0MzQudGVzdDALggl4NDM1LnRlc3QwC4IJeDQzNi50ZXN0MAuCCXg0Mzcu\ndGVzdDALggl4NDM4LnRlc3QwC4IJeDQzOS50ZXN0MAuCCXg0NDAudGVzdDALggl4\nNDQxLnRlc3QwC4IJeDQ0Mi50ZXN0MAuCCXg0NDMudGVzdDALggl4NDQ0LnRlc3Qw\nC4IJeDQ0NS50ZXN0MAuCCXg0NDYudGVzdDALggl4NDQ3LnRlc3QwC4IJeDQ0OC50\nZXN0MAuCCXg0NDkudGVzdDALggl4NDUwLnRlc3QwC4IJeDQ1MS50ZXN0MAuCCXg0\nNTIudGVzdDALggl4NDUzLnRlc3QwC4IJeDQ1NC50ZXN0MAuCCXg0NTUudGVzdDAL\nggl4NDU2LnRlc3QwC4IJeDQ1Ny50ZXN0MAuCCXg0NTgudGVzdDALggl4NDU5LnRl\nc3QwC4IJeDQ2MC50ZXN0MAuCCXg0NjEudGVzdDALggl4NDYyLnRlc3QwC4IJeDQ2\nMy50ZXN0MAuCCXg0NjQudGVzdDALggl4NDY1LnRlc3QwC4IJeDQ2Ni50ZXN0MAuC\nCXg0NjcudGVzdDALggl4NDY4LnRlc3QwC4IJeDQ2OS50ZXN0MAuCCXg0NzAudGVz\ndDALggl4NDcxLnRlc3QwC4IJeDQ3Mi50ZXN0MAuCCXg0NzMudGVzdDALggl4NDc0\nLnRlc3QwC4IJeDQ3NS50ZXN0MAuCCXg0NzYudGVzdDALggl4NDc3LnRlc3QwC4IJ\neDQ3OC50ZXN0MAuCCXg0NzkudGVzdDALggl4NDgwLnRlc3QwC4IJeDQ4MS50ZXN0\nMAuCCXg0ODIudGVzdDALggl4NDgzLnRlc3QwC4IJeDQ4NC50ZXN0MAuCCXg0ODUu\ndGVzdDALggl4NDg2LnRlc3QwC4IJeDQ4Ny50ZXN0MAuCCXg0ODgudGVzdDALggl4\nNDg5LnRlc3QwC4IJeDQ5MC50ZXN0MAuCCXg0OTEudGVzdDALggl4NDkyLnRlc3Qw\nC4IJeDQ5My50ZXN0MAuCCXg0OTQudGVzdDALggl4NDk1LnRlc3QwC4IJeDQ5Ni50\nZXN0MAuCCXg0OTcudGVzdDALggl4NDk4LnRlc3QwC4IJeDQ5OS50ZXN0MAuCCXg1\nMDAudGVzdDALggl4NTAxLnRlc3QwC4IJeDUwMi50ZXN0MAuCCXg1MDMudGVzdDAL\nggl4NTA0LnRlc3QwC4IJeDUwNS50ZXN0MAuCCXg1MDYudGVzdDALggl4NTA3LnRl\nc3QwC4IJeDUwOC50ZXN0MAuCCXg1MDkudGVzdDALggl4NTEwLnRlc3QwC4IJeDUx\nMS50ZXN0MAuCCXg1MTIudGVzdDANBgkqhkiG9w0BAQsFAAOCAQEAL2zj4W3+BzBa\nUA0pBD3K5mXq5H94uVT3YFiS1Yrrv1aGJjnb9iabNjdPNRFq7eBm1OajFTv8UtE/\nWJR0JDvBTs7yvpOgTy+JY9RY8NP72gdOOvpZ3DbJ0bbSUFqBVQlM8771Mz9RVQX9\ni9oCqVkakKI/9guAU2XHx9ztTB6N3mULB3QkeFmlyrqeeVK/2lFErArRxyKQXjxb\ncfD76JGADWpp6p1/QUGYmPNYGxHMtWzAhzX1zs/OdGwVVX7g6xxfFdOw0z2PVSPL\notKS5E3GWvqe43Edz3D6AI7jp6ibtH32HX/D4lLLd9nSiQURvJJ0nrMYZI+7p1DE\n6BsnsA2jNg==\n-----END CERTIFICATE-----\n",
 };
-static const size_t kLen50 = 26473;
+static const size_t kLen49 = 26473;
 
-static const char *kData50[] = {
+static const char *kData49[] = {
     "-----BEGIN CERTIFICATE-----\nMIJMMTCCSxmgAwIBAgIBAjANBgkqhkiG9w0BAQsFADANMQswCQYDVQQDEwJDQTAg\nFw0wMDAxMDEwMDAwMDBaGA8yMTAwMDEwMTAwMDAwMFowgjO+MRAwDgYDVQQDEwd0\nMC50ZXN0MRYwFAYJKoZIhvcNAQkBFgd0MEB0ZXN0MRYwFAYJKoZIhvcNAQkBFgd0\nMUB0ZXN0MRYwFAYJKoZIhvcNAQkBFgd0MkB0ZXN0MRYwFAYJKoZIhvcNAQkBFgd0\nM0B0ZXN0MRYwFAYJKoZIhvcNAQkBFgd0NEB0ZXN0MRYwFAYJKoZIhvcNAQkBFgd0\nNUB0ZXN0MRYwFAYJKoZIhvcNAQkBFgd0NkB0ZXN0MRYwFAYJKoZIhvcNAQkBFgd0\nN0B0ZXN0MRYwFAYJKoZIhvcNAQkBFgd0OEB0ZXN0MRYwFAYJKoZIhvcNAQkBFgd0\nOUB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0MTBAdGVzdDEXMBUGCSqGSIb3DQEJARYI\ndDExQHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQxMkB0ZXN0MRcwFQYJKoZIhvcNAQkB\nFgh0MTNAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDE0QHRlc3QxFzAVBgkqhkiG9w0B\nCQEWCHQxNUB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0MTZAdGVzdDEXMBUGCSqGSIb3\nDQEJARYIdDE3QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQxOEB0ZXN0MRcwFQYJKoZI\nhvcNAQkBFgh0MTlAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDIwQHRlc3QxFzAVBgkq\nhkiG9w0BCQEWCHQyMUB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0MjJAdGVzdDEXMBUG\nCSqGSIb3DQEJARYIdDIzQHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQyNEB0ZXN0MRcw\nFQYJKoZIhvcNAQkBFgh0MjVAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDI2QHRlc3Qx\nFzAVBgkqhkiG9w0BCQEWCHQyN0B0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0MjhAdGVz\ndDEXMBUGCSqGSIb3DQEJARYIdDI5QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQzMEB0\nZXN0MRcwFQYJKoZIhvcNAQkBFgh0MzFAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDMy\nQHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQzM0B0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0\nMzRAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDM1QHRlc3QxFzAVBgkqhkiG9w0BCQEW\nCHQzNkB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0MzdAdGVzdDEXMBUGCSqGSIb3DQEJ\nARYIdDM4QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQzOUB0ZXN0MRcwFQYJKoZIhvcN\nAQkBFgh0NDBAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDQxQHRlc3QxFzAVBgkqhkiG\n9w0BCQEWCHQ0MkB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0NDNAdGVzdDEXMBUGCSqG\nSIb3DQEJARYIdDQ0QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ0NUB0ZXN0MRcwFQYJ\nKoZIhvcNAQkBFgh0NDZAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDQ3QHRlc3QxFzAV\nBgkqhkiG9w0BCQEWCHQ0OEB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0NDlAdGVzdDEX\nMBUGCSqGSIb3DQEJARYIdDUwQHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ1MUB0ZXN0\nMRcwFQYJKoZIhvcNAQkBFgh0NTJAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDUzQHRl\nc3QxFzAVBgkqhkiG9w0BCQEWCHQ1NEB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0NTVA\ndGVzdDEXMBUGCSqGSIb3DQEJARYIdDU2QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ1\nN0B0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0NThAdGVzdDEXMBUGCSqGSIb3DQEJARYI\ndDU5QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ2MEB0ZXN0MRcwFQYJKoZIhvcNAQkB\nFgh0NjFAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDYyQHRlc3QxFzAVBgkqhkiG9w0B\nCQEWCHQ2M0B0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0NjRAdGVzdDEXMBUGCSqGSIb3\nDQEJARYIdDY1QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ2NkB0ZXN0MRcwFQYJKoZI\nhvcNAQkBFgh0NjdAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDY4QHRlc3QxFzAVBgkq\nhkiG9w0BCQEWCHQ2OUB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0NzBAdGVzdDEXMBUG\nCSqGSIb3DQEJARYIdDcxQHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ3MkB0ZXN0MRcw\nFQYJKoZIhvcNAQkBFgh0NzNAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDc0QHRlc3Qx\nFzAVBgkqhkiG9w0BCQEWCHQ3NUB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0NzZAdGVz\ndDEXMBUGCSqGSIb3DQEJARYIdDc3QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ3OEB0\nZXN0MRcwFQYJKoZIhvcNAQkBFgh0NzlAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDgw\nQHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ4MUB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0\nODJAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDgzQHRlc3QxFzAVBgkqhkiG9w0BCQEW\nCHQ4NEB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0ODVAdGVzdDEXMBUGCSqGSIb3DQEJ\nARYIdDg2QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ4N0B0ZXN0MRcwFQYJKoZIhvcN\nAQkBFgh0ODhAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDg5QHRlc3QxFzAVBgkqhkiG\n9w0BCQEWCHQ5MEB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0OTFAdGVzdDEXMBUGCSqG\nSIb3DQEJARYIdDkyQHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ5M0B0ZXN0MRcwFQYJ\nKoZIhvcNAQkBFgh0OTRAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDk1QHRlc3QxFzAV\nBgkqhkiG9w0BCQEWCHQ5NkB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0OTdAdGVzdDEX\nMBUGCSqGSIb3DQEJARYIdDk4QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ5OUB0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0MTAwQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxMDFA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDEwMkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nMTAzQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxMDRAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDEwNUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTA2QHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQxMDdAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDEwOEB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0MTA5QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxMTBAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDExMUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTEyQHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQxMTNAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDEx\nNEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTE1QHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQxMTZAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDExN0B0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0MTE4QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxMTlAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDEyMEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTIxQHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQxMjJAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDEyM0B0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0MTI0QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxMjVA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDEyNkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nMTI3QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxMjhAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDEyOUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTMwQHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQxMzFAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDEzMkB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0MTMzQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxMzRAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDEzNUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTM2QHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQxMzdAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDEz\nOEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTM5QHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQxNDBAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE0MUB0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0MTQyQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxNDNAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDE0NEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTQ1QHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQxNDZAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE0N0B0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0MTQ4QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxNDlA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDE1MEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nMTUxQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxNTJAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDE1M0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTU0QHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQxNTVAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE1NkB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0MTU3QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxNThAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDE1OUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTYwQHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQxNjFAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE2\nMkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTYzQHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQxNjRAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE2NUB0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0MTY2QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxNjdAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDE2OEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTY5QHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQxNzBAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE3MUB0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0MTcyQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxNzNA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDE3NEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nMTc1QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxNzZAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDE3N0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTc4QHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQxNzlAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE4MEB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0MTgxQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxODJAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDE4M0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTg0QHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQxODVAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE4\nNkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTg3QHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQxODhAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE4OUB0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0MTkwQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxOTFAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDE5MkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTkzQHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQxOTRAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE5NUB0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0MTk2QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxOTdA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDE5OEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nMTk5QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyMDBAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDIwMUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjAyQHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQyMDNAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDIwNEB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0MjA1QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyMDZAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDIwN0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjA4QHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQyMDlAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDIx\nMEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjExQHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQyMTJAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDIxM0B0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0MjE0QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyMTVAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDIxNkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjE3QHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQyMThAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDIxOUB0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0MjIwQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyMjFA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDIyMkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nMjIzQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyMjRAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDIyNUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjI2QHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQyMjdAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDIyOEB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0MjI5QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyMzBAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDIzMUB0ZXN0MRgwFgY",
     "JKoZIhvcNAQkBFgl0MjMyQHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQyMzNAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDIz\nNEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjM1QHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQyMzZAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDIzN0B0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0MjM4QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyMzlAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDI0MEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjQxQHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQyNDJAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDI0M0B0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0MjQ0QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyNDVA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDI0NkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nMjQ3QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyNDhAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDI0OUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjUwQHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQyNTFAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDI1MkB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0MjUzQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyNTRAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDI1NUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjU2QHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQyNTdAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDI1\nOEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjU5QHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQyNjBAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDI2MUB0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0MjYyQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyNjNAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDI2NEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjY1QHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQyNjZAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDI2N0B0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0MjY4QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyNjlA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDI3MEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nMjcxQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyNzJAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDI3M0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0Mjc0QHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQyNzVAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDI3NkB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0Mjc3QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyNzhAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDI3OUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjgwQHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQyODFAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDI4\nMkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjgzQHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQyODRAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDI4NUB0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0Mjg2QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyODdAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDI4OEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0Mjg5QHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQyOTBAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDI5MUB0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0MjkyQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyOTNA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDI5NEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nMjk1QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyOTZAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDI5N0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0Mjk4QHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQyOTlAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDMwMEB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0MzAxQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzMDJAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDMwM0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MzA0QHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQzMDVAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDMw\nNkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MzA3QHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQzMDhAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDMwOUB0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0MzEwQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzMTFAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDMxMkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MzEzQHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQzMTRAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDMxNUB0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0MzE2QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzMTdA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDMxOEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nMzE5QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzMjBAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDMyMUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MzIyQHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQzMjNAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDMyNEB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0MzI1QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzMjZAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDMyN0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MzI4QHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQzMjlAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDMz\nMEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MzMxQHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQzMzJAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDMzM0B0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0MzM0QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzMzVAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDMzNkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MzM3QHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQzMzhAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDMzOUB0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0MzQwQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzNDFA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDM0MkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nMzQzQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzNDRAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDM0NUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MzQ2QHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQzNDdAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDM0OEB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0MzQ5QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzNTBAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDM1MUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MzUyQHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQzNTNAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDM1\nNEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MzU1QHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQzNTZAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDM1N0B0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0MzU4QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzNTlAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDM2MEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MzYxQHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQzNjJAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDM2M0B0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0MzY0QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzNjVA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDM2NkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nMzY3QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzNjhAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDM2OUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MzcwQHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQzNzFAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDM3MkB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0MzczQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzNzRAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDM3NUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0Mzc2QHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQzNzdAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDM3\nOEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0Mzc5QHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQzODBAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDM4MUB0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0MzgyQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzODNAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDM4NEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0Mzg1QHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQzODZAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDM4N0B0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0Mzg4QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzODlA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDM5MEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nMzkxQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzOTJAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDM5M0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0Mzk0QHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQzOTVAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDM5NkB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0Mzk3QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzOThAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDM5OUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDAwQHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQ0MDFAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQw\nMkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDAzQHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQ0MDRAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQwNUB0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0NDA2QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0MDdAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDQwOEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDA5QHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQ0MTBAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQxMUB0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0NDEyQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0MTNA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDQxNEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nNDE1QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0MTZAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDQxN0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDE4QHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQ0MTlAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQyMEB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0NDIxQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0MjJAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDQyM0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDI0QHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQ0MjVAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQy\nNkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDI3QHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQ0MjhAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQyOUB0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0NDMwQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0MzFAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDQzMkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDMzQHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQ0MzRAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQzNUB0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0NDM2QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0MzdA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDQzOEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nNDM5QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0NDBAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDQ0MUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDQyQHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQ0NDNAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQ0NEB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0NDQ1QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0NDZAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDQ0N0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDQ4QHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQ0NDlAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQ1\nMEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDUxQHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQ0NTJAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQ1M0B0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0NDU0QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0NTVAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDQ1NkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDU3QHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQ0NThAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQ1OUB0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0NDYwQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0NjFA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDQ2MkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nNDYzQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0NjRAd",
     "GVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDQ2NUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDY2QHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQ0NjdAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQ2OEB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0NDY5QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0NzBAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDQ3MUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDcyQHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQ0NzNAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQ3\nNEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDc1QHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQ0NzZAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQ3N0B0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0NDc4QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0NzlAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDQ4MEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDgxQHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQ0ODJAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQ4M0B0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0NDg0QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0ODVA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDQ4NkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nNDg3QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0ODhAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDQ4OUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDkwQHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQ0OTFAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQ5MkB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0NDkzQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0OTRAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDQ5NUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDk2QHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQ0OTdAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQ5\nOEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDk5QHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQ1MDBAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDUwMUB0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0NTAyQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ1MDNAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDUwNEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NTA1QHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQ1MDZAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDUwN0B0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0NTA4QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ1MDlA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDUxMEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nNTExQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ1MTJAdGVzdDCCASIwDQYJKoZIhvcN\nAQEBBQADggEPADCCAQoCggEBALoL2oQZEgFBdXwuPb29W75T63JfNJKKdYi6YrmK\nM+EKbcMue/hFrLGQXB6a2eQZFn+j3hmexeQF9T8iWxh2S6rzAr1Yj+qXeDBaMf4o\nBEiEhBxIsaIlws3qQa4baeVEEoxw+A+ISrYHTIFcV/i0bcIFt5p7v7wbu686a/w0\nvIqPfad5amdQJMvmjZXDI+jGMvFPmBRHr2/1dJUWPaKsJluwR514pJv74urIyEt+\ndFPM2/5kc2HiLNkeuS1Hbky+dPlDIGrfaHHsCNnb/GjvQ6YfvDXRrYPCxWMk0x3F\nMSaDK9T0zoJ5hE9fViR+D6xcJO2RNUCUENS+Iipj3kIrLbkCAwEAAaOCFeUwghXh\nMA4GA1UdDwEB/wQEAwIFoDATBgNVHSUEDDAKBggrBgEFBQcDATAMBgNVHRMBAf8E\nAjAAMIIVqgYDVR0RBIIVoTCCFZ2CB3QwLnRlc3SCB3QxLnRlc3SCB3QyLnRlc3SC\nB3QzLnRlc3SCB3Q0LnRlc3SCB3Q1LnRlc3SCB3Q2LnRlc3SCB3Q3LnRlc3SCB3Q4\nLnRlc3SCB3Q5LnRlc3SCCHQxMC50ZXN0ggh0MTEudGVzdIIIdDEyLnRlc3SCCHQx\nMy50ZXN0ggh0MTQudGVzdIIIdDE1LnRlc3SCCHQxNi50ZXN0ggh0MTcudGVzdIII\ndDE4LnRlc3SCCHQxOS50ZXN0ggh0MjAudGVzdIIIdDIxLnRlc3SCCHQyMi50ZXN0\nggh0MjMudGVzdIIIdDI0LnRlc3SCCHQyNS50ZXN0ggh0MjYudGVzdIIIdDI3LnRl\nc3SCCHQyOC50ZXN0ggh0MjkudGVzdIIIdDMwLnRlc3SCCHQzMS50ZXN0ggh0MzIu\ndGVzdIIIdDMzLnRlc3SCCHQzNC50ZXN0ggh0MzUudGVzdIIIdDM2LnRlc3SCCHQz\nNy50ZXN0ggh0MzgudGVzdIIIdDM5LnRlc3SCCHQ0MC50ZXN0ggh0NDEudGVzdIII\ndDQyLnRlc3SCCHQ0My50ZXN0ggh0NDQudGVzdIIIdDQ1LnRlc3SCCHQ0Ni50ZXN0\nggh0NDcudGVzdIIIdDQ4LnRlc3SCCHQ0OS50ZXN0ggh0NTAudGVzdIIIdDUxLnRl\nc3SCCHQ1Mi50ZXN0ggh0NTMudGVzdIIIdDU0LnRlc3SCCHQ1NS50ZXN0ggh0NTYu\ndGVzdIIIdDU3LnRlc3SCCHQ1OC50ZXN0ggh0NTkudGVzdIIIdDYwLnRlc3SCCHQ2\nMS50ZXN0ggh0NjIudGVzdIIIdDYzLnRlc3SCCHQ2NC50ZXN0ggh0NjUudGVzdIII\ndDY2LnRlc3SCCHQ2Ny50ZXN0ggh0NjgudGVzdIIIdDY5LnRlc3SCCHQ3MC50ZXN0\nggh0NzEudGVzdIIIdDcyLnRlc3SCCHQ3My50ZXN0ggh0NzQudGVzdIIIdDc1LnRl\nc3SCCHQ3Ni50ZXN0ggh0NzcudGVzdIIIdDc4LnRlc3SCCHQ3OS50ZXN0ggh0ODAu\ndGVzdIIIdDgxLnRlc3SCCHQ4Mi50ZXN0ggh0ODMudGVzdIIIdDg0LnRlc3SCCHQ4\nNS50ZXN0ggh0ODYudGVzdIIIdDg3LnRlc3SCCHQ4OC50ZXN0ggh0ODkudGVzdIII\ndDkwLnRlc3SCCHQ5MS50ZXN0ggh0OTIudGVzdIIIdDkzLnRlc3SCCHQ5NC50ZXN0\nggh0OTUudGVzdIIIdDk2LnRlc3SCCHQ5Ny50ZXN0ggh0OTgudGVzdIIIdDk5LnRl\nc3SCCXQxMDAudGVzdIIJdDEwMS50ZXN0ggl0MTAyLnRlc3SCCXQxMDMudGVzdIIJ\ndDEwNC50ZXN0ggl0MTA1LnRlc3SCCXQxMDYudGVzdIIJdDEwNy50ZXN0ggl0MTA4\nLnRlc3SCCXQxMDkudGVzdIIJdDExMC50ZXN0ggl0MTExLnRlc3SCCXQxMTIudGVz\ndIIJdDExMy50ZXN0ggl0MTE0LnRlc3SCCXQxMTUudGVzdIIJdDExNi50ZXN0ggl0\nMTE3LnRlc3SCCXQxMTgudGVzdIIJdDExOS50ZXN0ggl0MTIwLnRlc3SCCXQxMjEu\ndGVzdIIJdDEyMi50ZXN0ggl0MTIzLnRlc3SCCXQxMjQudGVzdIIJdDEyNS50ZXN0\nggl0MTI2LnRlc3SCCXQxMjcudGVzdIIJdDEyOC50ZXN0ggl0MTI5LnRlc3SCCXQx\nMzAudGVzdIIJdDEzMS50ZXN0ggl0MTMyLnRlc3SCCXQxMzMudGVzdIIJdDEzNC50\nZXN0ggl0MTM1LnRlc3SCCXQxMzYudGVzdIIJdDEzNy50ZXN0ggl0MTM4LnRlc3SC\nCXQxMzkudGVzdIIJdDE0MC50ZXN0ggl0MTQxLnRlc3SCCXQxNDIudGVzdIIJdDE0\nMy50ZXN0ggl0MTQ0LnRlc3SCCXQxNDUudGVzdIIJdDE0Ni50ZXN0ggl0MTQ3LnRl\nc3SCCXQxNDgudGVzdIIJdDE0OS50ZXN0ggl0MTUwLnRlc3SCCXQxNTEudGVzdIIJ\ndDE1Mi50ZXN0ggl0MTUzLnRlc3SCCXQxNTQudGVzdIIJdDE1NS50ZXN0ggl0MTU2\nLnRlc3SCCXQxNTcudGVzdIIJdDE1OC50ZXN0ggl0MTU5LnRlc3SCCXQxNjAudGVz\ndIIJdDE2MS50ZXN0ggl0MTYyLnRlc3SCCXQxNjMudGVzdIIJdDE2NC50ZXN0ggl0\nMTY1LnRlc3SCCXQxNjYudGVzdIIJdDE2Ny50ZXN0ggl0MTY4LnRlc3SCCXQxNjku\ndGVzdIIJdDE3MC50ZXN0ggl0MTcxLnRlc3SCCXQxNzIudGVzdIIJdDE3My50ZXN0\nggl0MTc0LnRlc3SCCXQxNzUudGVzdIIJdDE3Ni50ZXN0ggl0MTc3LnRlc3SCCXQx\nNzgudGVzdIIJdDE3OS50ZXN0ggl0MTgwLnRlc3SCCXQxODEudGVzdIIJdDE4Mi50\nZXN0ggl0MTgzLnRlc3SCCXQxODQudGVzdIIJdDE4NS50ZXN0ggl0MTg2LnRlc3SC\nCXQxODcudGVzdIIJdDE4OC50ZXN0ggl0MTg5LnRlc3SCCXQxOTAudGVzdIIJdDE5\nMS50ZXN0ggl0MTkyLnRlc3SCCXQxOTMudGVzdIIJdDE5NC50ZXN0ggl0MTk1LnRl\nc3SCCXQxOTYudGVzdIIJdDE5Ny50ZXN0ggl0MTk4LnRlc3SCCXQxOTkudGVzdIIJ\ndDIwMC50ZXN0ggl0MjAxLnRlc3SCCXQyMDIudGVzdIIJdDIwMy50ZXN0ggl0MjA0\nLnRlc3SCCXQyMDUudGVzdIIJdDIwNi50ZXN0ggl0MjA3LnRlc3SCCXQyMDgudGVz\ndIIJdDIwOS50ZXN0ggl0MjEwLnRlc3SCCXQyMTEudGVzdIIJdDIxMi50ZXN0ggl0\nMjEzLnRlc3SCCXQyMTQudGVzdIIJdDIxNS50ZXN0ggl0MjE2LnRlc3SCCXQyMTcu\ndGVzdIIJdDIxOC50ZXN0ggl0MjE5LnRlc3SCCXQyMjAudGVzdIIJdDIyMS50ZXN0\nggl0MjIyLnRlc3SCCXQyMjMudGVzdIIJdDIyNC50ZXN0ggl0MjI1LnRlc3SCCXQy\nMjYudGVzdIIJdDIyNy50ZXN0ggl0MjI4LnRlc3SCCXQyMjkudGVzdIIJdDIzMC50\nZXN0ggl0MjMxLnRlc3SCCXQyMzIudGVzdIIJdDIzMy50ZXN0ggl0MjM0LnRlc3SC\nCXQyMzUudGVzdIIJdDIzNi50ZXN0ggl0MjM3LnRlc3SCCXQyMzgudGVzdIIJdDIz\nOS50ZXN0ggl0MjQwLnRlc3SCCXQyNDEudGVzdIIJdDI0Mi50ZXN0ggl0MjQzLnRl\nc3SCCXQyNDQudGVzdIIJdDI0NS50ZXN0ggl0MjQ2LnRlc3SCCXQyNDcudGVzdIIJ\ndDI0OC50ZXN0ggl0MjQ5LnRlc3SCCXQyNTAudGVzdIIJdDI1MS50ZXN0ggl0MjUy\nLnRlc3SCCXQyNTMudGVzdIIJdDI1NC50ZXN0ggl0MjU1LnRlc3SCCXQyNTYudGVz\ndIIJdDI1Ny50ZXN0ggl0MjU4LnRlc3SCCXQyNTkudGVzdIIJdDI2MC50ZXN0ggl0\nMjYxLnRlc3SCCXQyNjIudGVzdIIJdDI2My50ZXN0ggl0MjY0LnRlc3SCCXQyNjUu\ndGVzdIIJdDI2Ni50ZXN0ggl0MjY3LnRlc3SCCXQyNjgudGVzdIIJdDI2OS50ZXN0\nggl0MjcwLnRlc3SCCXQyNzEudGVzdIIJdDI3Mi50ZXN0ggl0MjczLnRlc3SCCXQy\nNzQudGVzdIIJdDI3NS50ZXN0ggl0Mjc2LnRlc3SCCXQyNzcudGVzdIIJdDI3OC50\nZXN0ggl0Mjc5LnRlc3SCCXQyODAudGVzdIIJdDI4MS50ZXN0ggl0MjgyLnRlc3SC\nCXQyODMudGVzdIIJdDI4NC50ZXN0ggl0Mjg1LnRlc3SCCXQyODYudGVzdIIJdDI4\nNy50ZXN0ggl0Mjg4LnRlc3SCCXQyODkudGVzdIIJdDI5MC50ZXN0ggl0MjkxLnRl\nc3SCCXQyOTIudGVzdIIJdDI5My50ZXN0ggl0Mjk0LnRlc3SCCXQyOTUudGVzdIIJ\ndDI5Ni50ZXN0ggl0Mjk3LnRlc3SCCXQyOTgudGVzdIIJdDI5OS50ZXN0ggl0MzAw\nLnRlc3SCCXQzMDEudGVzdIIJdDMwMi50ZXN0ggl0MzAzLnRlc3SCCXQzMDQudGVz\ndIIJdDMwNS50ZXN0ggl0MzA2LnRlc3SCCXQzMDcudGVzdIIJdDMwOC50ZXN0ggl0\nMzA5LnRlc3SCCXQzMTAudGVzdIIJdDMxMS50ZXN0ggl0MzEyLnRlc3SCCXQzMTMu\ndGVzdIIJdDMxNC50ZXN0ggl0MzE1LnRlc3SCCXQzMTYudGVzdIIJdDMxNy50ZXN0\nggl0MzE4LnRlc3SCCXQzMTkudGVzdIIJdDMyMC50ZXN0ggl0MzIxLnRlc3SCCXQz\nMjIudGVzdIIJdDMyMy50ZXN0ggl0MzI0LnRlc3SCCXQzMjUudGVzdIIJdDMyNi50\nZXN0ggl0MzI3LnRlc3SCCXQzMjgudGVzdIIJdDMyOS50ZXN0ggl0MzMwLnRlc3SC\nCXQzMzEudGVzdIIJdDMzMi50ZXN0ggl0MzMzLnRlc3SCCXQzMzQudGVzdIIJdDMz\nNS50ZXN0ggl0MzM2LnRlc3SCCXQzMzcudGVzdIIJdDMzOC50ZXN0ggl0MzM5LnRl\nc3SCCXQzNDAudGVzdIIJdDM0MS50ZXN0ggl0MzQyLnRlc3SCCXQzNDMudGVzdIIJ\ndDM0NC50ZXN0ggl0MzQ1LnRlc3SCCXQzNDYudGVzdIIJdDM0Ny50ZXN0ggl0MzQ4\nLnRlc3SCCXQzNDkudGVzdIIJdDM1MC50ZXN0ggl0MzUxLnRlc3SCCXQzNTIudGVz\ndIIJdDM1My50ZXN0ggl0MzU0LnRlc3SCCXQzNTUudGVzdIIJdDM1Ni50ZXN0ggl0\nMzU3LnRlc3SCCXQzNTgudGVzdIIJdDM1OS50ZXN0ggl0MzYwLnRlc3SCCXQzNjEu\ndGVzdIIJdDM2Mi50ZXN0ggl0MzYzLnRlc3SCCXQzNjQudGVzdIIJdDM2NS50ZXN0\nggl0MzY2LnRlc3SCCXQzNjcudGVzdIIJdDM2OC50ZXN0ggl0MzY5LnRlc3SCCXQz\nNzAudGVzdIIJdDM3MS50ZXN0ggl0MzcyLnRlc3SCCXQzNzMudGVzdIIJdDM3NC50\nZXN0ggl0Mzc1LnRlc3SCCXQzNzYudGVzdIIJdDM3Ny50ZXN0ggl0Mzc4LnRlc3SC\nCXQzNzkudGVzdIIJdDM4MC50ZXN0ggl0MzgxLnRlc3SCCXQzODIudGVzdIIJdDM4\nMy50ZXN0ggl0Mzg0LnRlc3SCCXQzODUudGVzdIIJdDM4Ni50ZXN0ggl0Mzg3LnRl\nc3SCCXQzODgudGVzdIIJdDM4OS50ZXN0ggl0MzkwLnRlc3SCCXQzOTEudGVzdIIJ\ndDM5Mi50ZXN0ggl0MzkzLnRlc3SCCXQzOTQudGVzdIIJdDM5NS50ZXN0ggl0Mzk2\nLnRlc3SCCXQzOTcudGVzdIIJdDM5OC50ZXN0ggl0Mzk5LnRlc3SCCXQ0MDAudGVz\ndIIJdDQwMS50ZXN0ggl0NDAyLnRlc3SCCXQ0MDMudGVzdIIJdDQwNC50ZXN0ggl0\nNDA1LnRlc3SCCXQ0MDYudGVzdIIJdDQwNy50ZXN0ggl0NDA4LnRlc3SCCXQ0MDku\ndGVzdIIJdDQxMC50ZXN0ggl0NDExLnRlc3SCCXQ0MTI",
     "udGVzdIIJdDQxMy50ZXN0\nggl0NDE0LnRlc3SCCXQ0MTUudGVzdIIJdDQxNi50ZXN0ggl0NDE3LnRlc3SCCXQ0\nMTgudGVzdIIJdDQxOS50ZXN0ggl0NDIwLnRlc3SCCXQ0MjEudGVzdIIJdDQyMi50\nZXN0ggl0NDIzLnRlc3SCCXQ0MjQudGVzdIIJdDQyNS50ZXN0ggl0NDI2LnRlc3SC\nCXQ0MjcudGVzdIIJdDQyOC50ZXN0ggl0NDI5LnRlc3SCCXQ0MzAudGVzdIIJdDQz\nMS50ZXN0ggl0NDMyLnRlc3SCCXQ0MzMudGVzdIIJdDQzNC50ZXN0ggl0NDM1LnRl\nc3SCCXQ0MzYudGVzdIIJdDQzNy50ZXN0ggl0NDM4LnRlc3SCCXQ0MzkudGVzdIIJ\ndDQ0MC50ZXN0ggl0NDQxLnRlc3SCCXQ0NDIudGVzdIIJdDQ0My50ZXN0ggl0NDQ0\nLnRlc3SCCXQ0NDUudGVzdIIJdDQ0Ni50ZXN0ggl0NDQ3LnRlc3SCCXQ0NDgudGVz\ndIIJdDQ0OS50ZXN0ggl0NDUwLnRlc3SCCXQ0NTEudGVzdIIJdDQ1Mi50ZXN0ggl0\nNDUzLnRlc3SCCXQ0NTQudGVzdIIJdDQ1NS50ZXN0ggl0NDU2LnRlc3SCCXQ0NTcu\ndGVzdIIJdDQ1OC50ZXN0ggl0NDU5LnRlc3SCCXQ0NjAudGVzdIIJdDQ2MS50ZXN0\nggl0NDYyLnRlc3SCCXQ0NjMudGVzdIIJdDQ2NC50ZXN0ggl0NDY1LnRlc3SCCXQ0\nNjYudGVzdIIJdDQ2Ny50ZXN0ggl0NDY4LnRlc3SCCXQ0NjkudGVzdIIJdDQ3MC50\nZXN0ggl0NDcxLnRlc3SCCXQ0NzIudGVzdIIJdDQ3My50ZXN0ggl0NDc0LnRlc3SC\nCXQ0NzUudGVzdIIJdDQ3Ni50ZXN0ggl0NDc3LnRlc3SCCXQ0NzgudGVzdIIJdDQ3\nOS50ZXN0ggl0NDgwLnRlc3SCCXQ0ODEudGVzdIIJdDQ4Mi50ZXN0ggl0NDgzLnRl\nc3SCCXQ0ODQudGVzdIIJdDQ4NS50ZXN0ggl0NDg2LnRlc3SCCXQ0ODcudGVzdIIJ\ndDQ4OC50ZXN0ggl0NDg5LnRlc3SCCXQ0OTAudGVzdIIJdDQ5MS50ZXN0ggl0NDky\nLnRlc3SCCXQ0OTMudGVzdIIJdDQ5NC50ZXN0ggl0NDk1LnRlc3SCCXQ0OTYudGVz\ndIIJdDQ5Ny50ZXN0ggl0NDk4LnRlc3SCCXQ0OTkudGVzdIIJdDUwMC50ZXN0ggl0\nNTAxLnRlc3SCCXQ1MDIudGVzdIIJdDUwMy50ZXN0ggl0NTA0LnRlc3SCCXQ1MDUu\ndGVzdIIJdDUwNi50ZXN0ggl0NTA3LnRlc3SCCXQ1MDgudGVzdIIJdDUwOS50ZXN0\nggl0NTEwLnRlc3SCCXQ1MTEudGVzdIIJdDUxMi50ZXN0MA0GCSqGSIb3DQEBCwUA\nA4IBAQCp6JcB0NWRQJSgjsI0ycv1gpuoo2k/NjPlkYCcsLwmTPRVdpBHi9MJNS2i\nMKPk7Wek2y9wJw6QPq9fMi/XSmEqRcFC8uBZ9evyTwmVbzzRsEN3qGHCrVdOnVLa\nD7x7NjoTLApVNelYTxMPEennTd9+we8cl0T2TqosTnbxyvP+pnwtpazjDAFKlt8e\nJpLRlRtWR/aScZ+P8CGj4b3prp12NJIAPG9W2ZqiHNLNMhTQG4Bz+O5+zMnIbC+e\nAhc4co+A/7qzselNZL1pcFFyRtTeLAcREuZVTTRa/EXmlLqzMe+UEEinEtdktnPL\nKO0ED3qPXggpBbFaa4/PVubBS4QU\n-----END CERTIFICATE-----\n",
 };
-static const size_t kLen51 = 16219;
+static const size_t kLen50 = 16219;
 
-static const char *kData51[] = {
+static const char *kData50[] = {
     "-----BEGIN CERTIFICATE-----\nMIIunDCCLYSgAwIBAgIBAzANBgkqhkiG9w0BAQsFADANMQswCQYDVQQDEwJDQTAg\nFw0wMDAxMDEwMDAwMDBaGA8yMTAwMDEwMTAwMDAwMFowEjEQMA4GA1UEAxMHdDAu\ndGVzdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALoL2oQZEgFBdXwu\nPb29W75T63JfNJKKdYi6YrmKM+EKbcMue/hFrLGQXB6a2eQZFn+j3hmexeQF9T8i\nWxh2S6rzAr1Yj+qXeDBaMf4oBEiEhBxIsaIlws3qQa4baeVEEoxw+A+ISrYHTIFc\nV/i0bcIFt5p7v7wbu686a/w0vIqPfad5amdQJMvmjZXDI+jGMvFPmBRHr2/1dJUW\nPaKsJluwR514pJv74urIyEt+dFPM2/5kc2HiLNkeuS1Hbky+dPlDIGrfaHHsCNnb\n/GjvQ6YfvDXRrYPCxWMk0x3FMSaDK9T0zoJ5hE9fViR+D6xcJO2RNUCUENS+Iipj\n3kIrLbkCAwEAAaOCK/4wgiv6MA4GA1UdDwEB/wQEAwIFoDATBgNVHSUEDDAKBggr\nBgEFBQcDATAMBgNVHRMBAf8EAjAAMIIrwwYDVR0RBIIrujCCK7aCB3QwLnRlc3SC\nB3QxLnRlc3SCB3QyLnRlc3SCB3QzLnRlc3SCB3Q0LnRlc3SCB3Q1LnRlc3SCB3Q2\nLnRlc3SCB3Q3LnRlc3SCB3Q4LnRlc3SCB3Q5LnRlc3SCCHQxMC50ZXN0ggh0MTEu\ndGVzdIIIdDEyLnRlc3SCCHQxMy50ZXN0ggh0MTQudGVzdIIIdDE1LnRlc3SCCHQx\nNi50ZXN0ggh0MTcudGVzdIIIdDE4LnRlc3SCCHQxOS50ZXN0ggh0MjAudGVzdIII\ndDIxLnRlc3SCCHQyMi50ZXN0ggh0MjMudGVzdIIIdDI0LnRlc3SCCHQyNS50ZXN0\nggh0MjYudGVzdIIIdDI3LnRlc3SCCHQyOC50ZXN0ggh0MjkudGVzdIIIdDMwLnRl\nc3SCCHQzMS50ZXN0ggh0MzIudGVzdIIIdDMzLnRlc3SCCHQzNC50ZXN0ggh0MzUu\ndGVzdIIIdDM2LnRlc3SCCHQzNy50ZXN0ggh0MzgudGVzdIIIdDM5LnRlc3SCCHQ0\nMC50ZXN0ggh0NDEudGVzdIIIdDQyLnRlc3SCCHQ0My50ZXN0ggh0NDQudGVzdIII\ndDQ1LnRlc3SCCHQ0Ni50ZXN0ggh0NDcudGVzdIIIdDQ4LnRlc3SCCHQ0OS50ZXN0\nggh0NTAudGVzdIIIdDUxLnRlc3SCCHQ1Mi50ZXN0ggh0NTMudGVzdIIIdDU0LnRl\nc3SCCHQ1NS50ZXN0ggh0NTYudGVzdIIIdDU3LnRlc3SCCHQ1OC50ZXN0ggh0NTku\ndGVzdIIIdDYwLnRlc3SCCHQ2MS50ZXN0ggh0NjIudGVzdIIIdDYzLnRlc3SCCHQ2\nNC50ZXN0ggh0NjUudGVzdIIIdDY2LnRlc3SCCHQ2Ny50ZXN0ggh0NjgudGVzdIII\ndDY5LnRlc3SCCHQ3MC50ZXN0ggh0NzEudGVzdIIIdDcyLnRlc3SCCHQ3My50ZXN0\nggh0NzQudGVzdIIIdDc1LnRlc3SCCHQ3Ni50ZXN0ggh0NzcudGVzdIIIdDc4LnRl\nc3SCCHQ3OS50ZXN0ggh0ODAudGVzdIIIdDgxLnRlc3SCCHQ4Mi50ZXN0ggh0ODMu\ndGVzdIIIdDg0LnRlc3SCCHQ4NS50ZXN0ggh0ODYudGVzdIIIdDg3LnRlc3SCCHQ4\nOC50ZXN0ggh0ODkudGVzdIIIdDkwLnRlc3SCCHQ5MS50ZXN0ggh0OTIudGVzdIII\ndDkzLnRlc3SCCHQ5NC50ZXN0ggh0OTUudGVzdIIIdDk2LnRlc3SCCHQ5Ny50ZXN0\nggh0OTgudGVzdIIIdDk5LnRlc3SCCXQxMDAudGVzdIIJdDEwMS50ZXN0ggl0MTAy\nLnRlc3SCCXQxMDMudGVzdIIJdDEwNC50ZXN0ggl0MTA1LnRlc3SCCXQxMDYudGVz\ndIIJdDEwNy50ZXN0ggl0MTA4LnRlc3SCCXQxMDkudGVzdIIJdDExMC50ZXN0ggl0\nMTExLnRlc3SCCXQxMTIudGVzdIIJdDExMy50ZXN0ggl0MTE0LnRlc3SCCXQxMTUu\ndGVzdIIJdDExNi50ZXN0ggl0MTE3LnRlc3SCCXQxMTgudGVzdIIJdDExOS50ZXN0\nggl0MTIwLnRlc3SCCXQxMjEudGVzdIIJdDEyMi50ZXN0ggl0MTIzLnRlc3SCCXQx\nMjQudGVzdIIJdDEyNS50ZXN0ggl0MTI2LnRlc3SCCXQxMjcudGVzdIIJdDEyOC50\nZXN0ggl0MTI5LnRlc3SCCXQxMzAudGVzdIIJdDEzMS50ZXN0ggl0MTMyLnRlc3SC\nCXQxMzMudGVzdIIJdDEzNC50ZXN0ggl0MTM1LnRlc3SCCXQxMzYudGVzdIIJdDEz\nNy50ZXN0ggl0MTM4LnRlc3SCCXQxMzkudGVzdIIJdDE0MC50ZXN0ggl0MTQxLnRl\nc3SCCXQxNDIudGVzdIIJdDE0My50ZXN0ggl0MTQ0LnRlc3SCCXQxNDUudGVzdIIJ\ndDE0Ni50ZXN0ggl0MTQ3LnRlc3SCCXQxNDgudGVzdIIJdDE0OS50ZXN0ggl0MTUw\nLnRlc3SCCXQxNTEudGVzdIIJdDE1Mi50ZXN0ggl0MTUzLnRlc3SCCXQxNTQudGVz\ndIIJdDE1NS50ZXN0ggl0MTU2LnRlc3SCCXQxNTcudGVzdIIJdDE1OC50ZXN0ggl0\nMTU5LnRlc3SCCXQxNjAudGVzdIIJdDE2MS50ZXN0ggl0MTYyLnRlc3SCCXQxNjMu\ndGVzdIIJdDE2NC50ZXN0ggl0MTY1LnRlc3SCCXQxNjYudGVzdIIJdDE2Ny50ZXN0\nggl0MTY4LnRlc3SCCXQxNjkudGVzdIIJdDE3MC50ZXN0ggl0MTcxLnRlc3SCCXQx\nNzIudGVzdIIJdDE3My50ZXN0ggl0MTc0LnRlc3SCCXQxNzUudGVzdIIJdDE3Ni50\nZXN0ggl0MTc3LnRlc3SCCXQxNzgudGVzdIIJdDE3OS50ZXN0ggl0MTgwLnRlc3SC\nCXQxODEudGVzdIIJdDE4Mi50ZXN0ggl0MTgzLnRlc3SCCXQxODQudGVzdIIJdDE4\nNS50ZXN0ggl0MTg2LnRlc3SCCXQxODcudGVzdIIJdDE4OC50ZXN0ggl0MTg5LnRl\nc3SCCXQxOTAudGVzdIIJdDE5MS50ZXN0ggl0MTkyLnRlc3SCCXQxOTMudGVzdIIJ\ndDE5NC50ZXN0ggl0MTk1LnRlc3SCCXQxOTYudGVzdIIJdDE5Ny50ZXN0ggl0MTk4\nLnRlc3SCCXQxOTkudGVzdIIJdDIwMC50ZXN0ggl0MjAxLnRlc3SCCXQyMDIudGVz\ndIIJdDIwMy50ZXN0ggl0MjA0LnRlc3SCCXQyMDUudGVzdIIJdDIwNi50ZXN0ggl0\nMjA3LnRlc3SCCXQyMDgudGVzdIIJdDIwOS50ZXN0ggl0MjEwLnRlc3SCCXQyMTEu\ndGVzdIIJdDIxMi50ZXN0ggl0MjEzLnRlc3SCCXQyMTQudGVzdIIJdDIxNS50ZXN0\nggl0MjE2LnRlc3SCCXQyMTcudGVzdIIJdDIxOC50ZXN0ggl0MjE5LnRlc3SCCXQy\nMjAudGVzdIIJdDIyMS50ZXN0ggl0MjIyLnRlc3SCCXQyMjMudGVzdIIJdDIyNC50\nZXN0ggl0MjI1LnRlc3SCCXQyMjYudGVzdIIJdDIyNy50ZXN0ggl0MjI4LnRlc3SC\nCXQyMjkudGVzdIIJdDIzMC50ZXN0ggl0MjMxLnRlc3SCCXQyMzIudGVzdIIJdDIz\nMy50ZXN0ggl0MjM0LnRlc3SCCXQyMzUudGVzdIIJdDIzNi50ZXN0ggl0MjM3LnRl\nc3SCCXQyMzgudGVzdIIJdDIzOS50ZXN0ggl0MjQwLnRlc3SCCXQyNDEudGVzdIIJ\ndDI0Mi50ZXN0ggl0MjQzLnRlc3SCCXQyNDQudGVzdIIJdDI0NS50ZXN0ggl0MjQ2\nLnRlc3SCCXQyNDcudGVzdIIJdDI0OC50ZXN0ggl0MjQ5LnRlc3SCCXQyNTAudGVz\ndIIJdDI1MS50ZXN0ggl0MjUyLnRlc3SCCXQyNTMudGVzdIIJdDI1NC50ZXN0ggl0\nMjU1LnRlc3SCCXQyNTYudGVzdIIJdDI1Ny50ZXN0ggl0MjU4LnRlc3SCCXQyNTku\ndGVzdIIJdDI2MC50ZXN0ggl0MjYxLnRlc3SCCXQyNjIudGVzdIIJdDI2My50ZXN0\nggl0MjY0LnRlc3SCCXQyNjUudGVzdIIJdDI2Ni50ZXN0ggl0MjY3LnRlc3SCCXQy\nNjgudGVzdIIJdDI2OS50ZXN0ggl0MjcwLnRlc3SCCXQyNzEudGVzdIIJdDI3Mi50\nZXN0ggl0MjczLnRlc3SCCXQyNzQudGVzdIIJdDI3NS50ZXN0ggl0Mjc2LnRlc3SC\nCXQyNzcudGVzdIIJdDI3OC50ZXN0ggl0Mjc5LnRlc3SCCXQyODAudGVzdIIJdDI4\nMS50ZXN0ggl0MjgyLnRlc3SCCXQyODMudGVzdIIJdDI4NC50ZXN0ggl0Mjg1LnRl\nc3SCCXQyODYudGVzdIIJdDI4Ny50ZXN0ggl0Mjg4LnRlc3SCCXQyODkudGVzdIIJ\ndDI5MC50ZXN0ggl0MjkxLnRlc3SCCXQyOTIudGVzdIIJdDI5My50ZXN0ggl0Mjk0\nLnRlc3SCCXQyOTUudGVzdIIJdDI5Ni50ZXN0ggl0Mjk3LnRlc3SCCXQyOTgudGVz\ndIIJdDI5OS50ZXN0ggl0MzAwLnRlc3SCCXQzMDEudGVzdIIJdDMwMi50ZXN0ggl0\nMzAzLnRlc3SCCXQzMDQudGVzdIIJdDMwNS50ZXN0ggl0MzA2LnRlc3SCCXQzMDcu\ndGVzdIIJdDMwOC50ZXN0ggl0MzA5LnRlc3SCCXQzMTAudGVzdIIJdDMxMS50ZXN0\nggl0MzEyLnRlc3SCCXQzMTMudGVzdIIJdDMxNC50ZXN0ggl0MzE1LnRlc3SCCXQz\nMTYudGVzdIIJdDMxNy50ZXN0ggl0MzE4LnRlc3SCCXQzMTkudGVzdIIJdDMyMC50\nZXN0ggl0MzIxLnRlc3SCCXQzMjIudGVzdIIJdDMyMy50ZXN0ggl0MzI0LnRlc3SC\nCXQzMjUudGVzdIIJdDMyNi50ZXN0ggl0MzI3LnRlc3SCCXQzMjgudGVzdIIJdDMy\nOS50ZXN0ggl0MzMwLnRlc3SCCXQzMzEudGVzdIIJdDMzMi50ZXN0ggl0MzMzLnRl\nc3SCCXQzMzQudGVzdIIJdDMzNS50ZXN0ggl0MzM2LnRlc3SCCXQzMzcudGVzdIIJ\ndDMzOC50ZXN0ggl0MzM5LnRlc3SCCXQzNDAudGVzdIIJdDM0MS50ZXN0ggl0MzQy\nLnRlc3SCCXQzNDMudGVzdIIJdDM0NC50ZXN0ggl0MzQ1LnRlc3SCCXQzNDYudGVz\ndIIJdDM0Ny50ZXN0ggl0MzQ4LnRlc3SCCXQzNDkudGVzdIIJdDM1MC50ZXN0ggl0\nMzUxLnRlc3SCCXQzNTIudGVzdIIJdDM1My50ZXN0ggl0MzU0LnRlc3SCCXQzNTUu\ndGVzdIIJdDM1Ni50ZXN0ggl0MzU3LnRlc3SCCXQzNTgudGVzdIIJdDM1OS50ZXN0\nggl0MzYwLnRlc3SCCXQzNjEudGVzdIIJdDM2Mi50ZXN0ggl0MzYzLnRlc3SCCXQz\nNjQudGVzdIIJdDM2NS50ZXN0ggl0MzY2LnRlc3SCCXQzNjcudGVzdIIJdDM2OC50\nZXN0ggl0MzY5LnRlc3SCCXQzNzAudGVzdIIJdDM3MS50ZXN0ggl0MzcyLnRlc3SC\nCXQzNzMudGVzdIIJdDM3NC50ZXN0ggl0Mzc1LnRlc3SCCXQzNzYudGVzdIIJdDM3\nNy50ZXN0ggl0Mzc4LnRlc3SCCXQzNzkudGVzdIIJdDM4MC50ZXN0ggl0MzgxLnRl\nc3SCCXQzODIudGVzdIIJdDM4My50ZXN0ggl0Mzg0LnRlc3SCCXQzODUudGVzdIIJ\ndDM4Ni50ZXN0ggl0Mzg3LnRlc3SCCXQzODgudGVzdIIJdDM4OS50ZXN0ggl0Mzkw\nLnRlc3SCCXQzOTEudGVzdIIJdDM5Mi50ZXN0ggl0MzkzLnRlc3SCCXQzOTQudGVz\ndIIJdDM5NS50ZXN0ggl0Mzk2LnRlc3SCCXQzOTcudGVzdIIJdDM5OC50ZXN0ggl0\nMzk5LnRlc3SCCXQ0MDAudGVzdIIJdDQwMS50ZXN0ggl0NDAyLnRlc3SCCXQ0MDMu\ndGVzdIIJdDQwNC50ZXN0ggl0NDA1LnRlc3SCCXQ0MDYudGVzdIIJdDQwNy50ZXN0\nggl0NDA4LnRlc3SCCXQ0MDkudGVzdIIJdDQxMC50ZXN0ggl0NDExLnRlc3SCCXQ0\nMTIudGVzdIIJdDQxMy50ZXN0ggl0NDE0LnRlc3SCCXQ0MTUudGVzdIIJdDQxNi50\nZXN0ggl0NDE3LnRlc3SCCXQ0MTgudGVzdIIJdDQxOS50ZXN0ggl0NDIwLnRlc3SC\nCXQ0MjEudGVzdIIJdDQyMi50ZXN0ggl0NDIzLnRlc3SCCXQ0MjQudGVzdIIJdDQy\nNS50ZXN0ggl0NDI2LnRlc3SCCXQ0MjcudGVzdIIJdDQyOC50ZXN0ggl0NDI5LnRl\nc3SCCXQ0MzAudGVzdIIJdDQzMS50ZXN0ggl0NDMyLnRlc3SCCXQ0MzMudGVzdIIJ\ndDQzNC50ZXN0ggl0NDM1LnRlc3SCCXQ0MzYudGVzdIIJdDQzNy50ZXN0ggl0NDM4\nLnRlc3SCCXQ0MzkudGVzdIIJdDQ0MC50ZXN0ggl0NDQxLnRlc3SCCXQ0NDIudGVz\ndIIJdDQ0My50ZXN0ggl0NDQ0LnRlc3SCCXQ0NDUudGVzdIIJdDQ0Ni50ZXN0ggl0\nNDQ3LnRlc3SCCXQ0NDgudGVzdIIJdDQ0OS50ZXN0ggl0NDUwLnRlc3SCCXQ0NTEu\ndGVzdIIJdDQ1Mi50ZXN0ggl0NDUzLnRlc3SCCXQ0NTQudGVzdIIJdDQ1NS50ZXN0\nggl0NDU2LnRlc3SCCXQ0NTcudGVzdIIJdDQ1OC50ZXN0ggl0NDU5LnRlc3SCCXQ0\nNjAudGVzdIIJdDQ2MS50ZXN0ggl0NDYyLnRlc3SCCXQ0NjMudGVzdIIJdDQ2NC50\nZXN0ggl0NDY1LnRlc3SCCXQ0NjYudGVzdIIJdDQ2Ny50ZXN0ggl0NDY4LnRlc3SC\nCXQ0NjkudGVzdIIJdDQ3MC50ZXN0ggl0NDcxLnRlc3SCCXQ0NzIudGVzdIIJdDQ3\nMy50ZXN0ggl0NDc0LnRlc3SCCXQ0NzUudGVzdIIJdDQ3Ni50ZXN0ggl0NDc3LnRl\nc3SCCXQ0NzgudGVzdIIJdDQ3OS50ZXN0ggl0NDgwLnRlc3SCCXQ0ODEudGVzdIIJ\ndDQ4Mi50ZXN0ggl0NDgzLnRlc3SCCXQ0ODQudGVzdIIJdDQ4NS50ZXN0ggl0NDg2\nLnRlc3SCCXQ0ODcudGVzdIIJdDQ4OC50ZXN0ggl0NDg5LnRlc3SCCXQ0OTAudGVz\ndIIJdDQ5MS50ZXN0ggl0NDkyLnRlc3SCCXQ0OTMudGVzdIIJdDQ5NC50ZXN0ggl0\nNDk1LnRlc3SCCXQ0OTYudGVzdIIJdDQ5Ny50ZXN0ggl0NDk4LnRlc3SCCXQ0OTku\ndGVzdIIJdDUwMC50ZXN0ggl0NTAxLnRlc3SCCXQ1MDIudGVzdIIJdDUwMy50ZXN0\nggl0NTA0LnRlc3SCCXQ1MDUudGVzdIIJdDUwNi50ZXN0ggl0NTA3LnRlc3SCCXQ1\nMDgudGVzdIIJdDUwOS50ZXN0ggl0NTEwLnRlc3SCCXQ1MTEudGVzdIIJdDUxMi50\nZXN0ggl0NTEzLnRlc3SCCXQ1MTQudGVzdIIJdDU",
     "xNS50ZXN0ggl0NTE2LnRlc3SC\nCXQ1MTcudGVzdIIJdDUxOC50ZXN0ggl0NTE5LnRlc3SCCXQ1MjAudGVzdIIJdDUy\nMS50ZXN0ggl0NTIyLnRlc3SCCXQ1MjMudGVzdIIJdDUyNC50ZXN0ggl0NTI1LnRl\nc3SCCXQ1MjYudGVzdIIJdDUyNy50ZXN0ggl0NTI4LnRlc3SCCXQ1MjkudGVzdIIJ\ndDUzMC50ZXN0ggl0NTMxLnRlc3SCCXQ1MzIudGVzdIIJdDUzMy50ZXN0ggl0NTM0\nLnRlc3SCCXQ1MzUudGVzdIIJdDUzNi50ZXN0ggl0NTM3LnRlc3SCCXQ1MzgudGVz\ndIIJdDUzOS50ZXN0ggl0NTQwLnRlc3SCCXQ1NDEudGVzdIIJdDU0Mi50ZXN0ggl0\nNTQzLnRlc3SCCXQ1NDQudGVzdIIJdDU0NS50ZXN0ggl0NTQ2LnRlc3SCCXQ1NDcu\ndGVzdIIJdDU0OC50ZXN0ggl0NTQ5LnRlc3SCCXQ1NTAudGVzdIIJdDU1MS50ZXN0\nggl0NTUyLnRlc3SCCXQ1NTMudGVzdIIJdDU1NC50ZXN0ggl0NTU1LnRlc3SCCXQ1\nNTYudGVzdIIJdDU1Ny50ZXN0ggl0NTU4LnRlc3SCCXQ1NTkudGVzdIIJdDU2MC50\nZXN0ggl0NTYxLnRlc3SCCXQ1NjIudGVzdIIJdDU2My50ZXN0ggl0NTY0LnRlc3SC\nCXQ1NjUudGVzdIIJdDU2Ni50ZXN0ggl0NTY3LnRlc3SCCXQ1NjgudGVzdIIJdDU2\nOS50ZXN0ggl0NTcwLnRlc3SCCXQ1NzEudGVzdIIJdDU3Mi50ZXN0ggl0NTczLnRl\nc3SCCXQ1NzQudGVzdIIJdDU3NS50ZXN0ggl0NTc2LnRlc3SCCXQ1NzcudGVzdIIJ\ndDU3OC50ZXN0ggl0NTc5LnRlc3SCCXQ1ODAudGVzdIIJdDU4MS50ZXN0ggl0NTgy\nLnRlc3SCCXQ1ODMudGVzdIIJdDU4NC50ZXN0ggl0NTg1LnRlc3SCCXQ1ODYudGVz\ndIIJdDU4Ny50ZXN0ggl0NTg4LnRlc3SCCXQ1ODkudGVzdIIJdDU5MC50ZXN0ggl0\nNTkxLnRlc3SCCXQ1OTIudGVzdIIJdDU5My50ZXN0ggl0NTk0LnRlc3SCCXQ1OTUu\ndGVzdIIJdDU5Ni50ZXN0ggl0NTk3LnRlc3SCCXQ1OTgudGVzdIIJdDU5OS50ZXN0\nggl0NjAwLnRlc3SCCXQ2MDEudGVzdIIJdDYwMi50ZXN0ggl0NjAzLnRlc3SCCXQ2\nMDQudGVzdIIJdDYwNS50ZXN0ggl0NjA2LnRlc3SCCXQ2MDcudGVzdIIJdDYwOC50\nZXN0ggl0NjA5LnRlc3SCCXQ2MTAudGVzdIIJdDYxMS50ZXN0ggl0NjEyLnRlc3SC\nCXQ2MTMudGVzdIIJdDYxNC50ZXN0ggl0NjE1LnRlc3SCCXQ2MTYudGVzdIIJdDYx\nNy50ZXN0ggl0NjE4LnRlc3SCCXQ2MTkudGVzdIIJdDYyMC50ZXN0ggl0NjIxLnRl\nc3SCCXQ2MjIudGVzdIIJdDYyMy50ZXN0ggl0NjI0LnRlc3SCCXQ2MjUudGVzdIIJ\ndDYyNi50ZXN0ggl0NjI3LnRlc3SCCXQ2MjgudGVzdIIJdDYyOS50ZXN0ggl0NjMw\nLnRlc3SCCXQ2MzEudGVzdIIJdDYzMi50ZXN0ggl0NjMzLnRlc3SCCXQ2MzQudGVz\ndIIJdDYzNS50ZXN0ggl0NjM2LnRlc3SCCXQ2MzcudGVzdIIJdDYzOC50ZXN0ggl0\nNjM5LnRlc3SCCXQ2NDAudGVzdIIJdDY0MS50ZXN0ggl0NjQyLnRlc3SCCXQ2NDMu\ndGVzdIIJdDY0NC50ZXN0ggl0NjQ1LnRlc3SCCXQ2NDYudGVzdIIJdDY0Ny50ZXN0\nggl0NjQ4LnRlc3SCCXQ2NDkudGVzdIIJdDY1MC50ZXN0ggl0NjUxLnRlc3SCCXQ2\nNTIudGVzdIIJdDY1My50ZXN0ggl0NjU0LnRlc3SCCXQ2NTUudGVzdIIJdDY1Ni50\nZXN0ggl0NjU3LnRlc3SCCXQ2NTgudGVzdIIJdDY1OS50ZXN0ggl0NjYwLnRlc3SC\nCXQ2NjEudGVzdIIJdDY2Mi50ZXN0ggl0NjYzLnRlc3SCCXQ2NjQudGVzdIIJdDY2\nNS50ZXN0ggl0NjY2LnRlc3SCCXQ2NjcudGVzdIIJdDY2OC50ZXN0ggl0NjY5LnRl\nc3SCCXQ2NzAudGVzdIIJdDY3MS50ZXN0ggl0NjcyLnRlc3SCCXQ2NzMudGVzdIIJ\ndDY3NC50ZXN0ggl0Njc1LnRlc3SCCXQ2NzYudGVzdIIJdDY3Ny50ZXN0ggl0Njc4\nLnRlc3SCCXQ2NzkudGVzdIIJdDY4MC50ZXN0ggl0NjgxLnRlc3SCCXQ2ODIudGVz\ndIIJdDY4My50ZXN0ggl0Njg0LnRlc3SCCXQ2ODUudGVzdIIJdDY4Ni50ZXN0ggl0\nNjg3LnRlc3SCCXQ2ODgudGVzdIIJdDY4OS50ZXN0ggl0NjkwLnRlc3SCCXQ2OTEu\ndGVzdIIJdDY5Mi50ZXN0ggl0NjkzLnRlc3SCCXQ2OTQudGVzdIIJdDY5NS50ZXN0\nggl0Njk2LnRlc3SCCXQ2OTcudGVzdIIJdDY5OC50ZXN0ggl0Njk5LnRlc3SCCXQ3\nMDAudGVzdIIJdDcwMS50ZXN0ggl0NzAyLnRlc3SCCXQ3MDMudGVzdIIJdDcwNC50\nZXN0ggl0NzA1LnRlc3SCCXQ3MDYudGVzdIIJdDcwNy50ZXN0ggl0NzA4LnRlc3SC\nCXQ3MDkudGVzdIIJdDcxMC50ZXN0ggl0NzExLnRlc3SCCXQ3MTIudGVzdIIJdDcx\nMy50ZXN0ggl0NzE0LnRlc3SCCXQ3MTUudGVzdIIJdDcxNi50ZXN0ggl0NzE3LnRl\nc3SCCXQ3MTgudGVzdIIJdDcxOS50ZXN0ggl0NzIwLnRlc3SCCXQ3MjEudGVzdIIJ\ndDcyMi50ZXN0ggl0NzIzLnRlc3SCCXQ3MjQudGVzdIIJdDcyNS50ZXN0ggl0NzI2\nLnRlc3SCCXQ3MjcudGVzdIIJdDcyOC50ZXN0ggl0NzI5LnRlc3SCCXQ3MzAudGVz\ndIIJdDczMS50ZXN0ggl0NzMyLnRlc3SCCXQ3MzMudGVzdIIJdDczNC50ZXN0ggl0\nNzM1LnRlc3SCCXQ3MzYudGVzdIIJdDczNy50ZXN0ggl0NzM4LnRlc3SCCXQ3Mzku\ndGVzdIIJdDc0MC50ZXN0ggl0NzQxLnRlc3SCCXQ3NDIudGVzdIIJdDc0My50ZXN0\nggl0NzQ0LnRlc3SCCXQ3NDUudGVzdIIJdDc0Ni50ZXN0ggl0NzQ3LnRlc3SCCXQ3\nNDgudGVzdIIJdDc0OS50ZXN0ggl0NzUwLnRlc3SCCXQ3NTEudGVzdIIJdDc1Mi50\nZXN0ggl0NzUzLnRlc3SCCXQ3NTQudGVzdIIJdDc1NS50ZXN0ggl0NzU2LnRlc3SC\nCXQ3NTcudGVzdIIJdDc1OC50ZXN0ggl0NzU5LnRlc3SCCXQ3NjAudGVzdIIJdDc2\nMS50ZXN0ggl0NzYyLnRlc3SCCXQ3NjMudGVzdIIJdDc2NC50ZXN0ggl0NzY1LnRl\nc3SCCXQ3NjYudGVzdIIJdDc2Ny50ZXN0ggl0NzY4LnRlc3SCCXQ3NjkudGVzdIIJ\ndDc3MC50ZXN0ggl0NzcxLnRlc3SCCXQ3NzIudGVzdIIJdDc3My50ZXN0ggl0Nzc0\nLnRlc3SCCXQ3NzUudGVzdIIJdDc3Ni50ZXN0ggl0Nzc3LnRlc3SCCXQ3NzgudGVz\ndIIJdDc3OS50ZXN0ggl0NzgwLnRlc3SCCXQ3ODEudGVzdIIJdDc4Mi50ZXN0ggl0\nNzgzLnRlc3SCCXQ3ODQudGVzdIIJdDc4NS50ZXN0ggl0Nzg2LnRlc3SCCXQ3ODcu\ndGVzdIIJdDc4OC50ZXN0ggl0Nzg5LnRlc3SCCXQ3OTAudGVzdIIJdDc5MS50ZXN0\nggl0NzkyLnRlc3SCCXQ3OTMudGVzdIIJdDc5NC50ZXN0ggl0Nzk1LnRlc3SCCXQ3\nOTYudGVzdIIJdDc5Ny50ZXN0ggl0Nzk4LnRlc3SCCXQ3OTkudGVzdIIJdDgwMC50\nZXN0ggl0ODAxLnRlc3SCCXQ4MDIudGVzdIIJdDgwMy50ZXN0ggl0ODA0LnRlc3SC\nCXQ4MDUudGVzdIIJdDgwNi50ZXN0ggl0ODA3LnRlc3SCCXQ4MDgudGVzdIIJdDgw\nOS50ZXN0ggl0ODEwLnRlc3SCCXQ4MTEudGVzdIIJdDgxMi50ZXN0ggl0ODEzLnRl\nc3SCCXQ4MTQudGVzdIIJdDgxNS50ZXN0ggl0ODE2LnRlc3SCCXQ4MTcudGVzdIIJ\ndDgxOC50ZXN0ggl0ODE5LnRlc3SCCXQ4MjAudGVzdIIJdDgyMS50ZXN0ggl0ODIy\nLnRlc3SCCXQ4MjMudGVzdIIJdDgyNC50ZXN0ggl0ODI1LnRlc3SCCXQ4MjYudGVz\ndIIJdDgyNy50ZXN0ggl0ODI4LnRlc3SCCXQ4MjkudGVzdIIJdDgzMC50ZXN0ggl0\nODMxLnRlc3SCCXQ4MzIudGVzdIIJdDgzMy50ZXN0ggl0ODM0LnRlc3SCCXQ4MzUu\ndGVzdIIJdDgzNi50ZXN0ggl0ODM3LnRlc3SCCXQ4MzgudGVzdIIJdDgzOS50ZXN0\nggl0ODQwLnRlc3SCCXQ4NDEudGVzdIIJdDg0Mi50ZXN0ggl0ODQzLnRlc3SCCXQ4\nNDQudGVzdIIJdDg0NS50ZXN0ggl0ODQ2LnRlc3SCCXQ4NDcudGVzdIIJdDg0OC50\nZXN0ggl0ODQ5LnRlc3SCCXQ4NTAudGVzdIIJdDg1MS50ZXN0ggl0ODUyLnRlc3SC\nCXQ4NTMudGVzdIIJdDg1NC50ZXN0ggl0ODU1LnRlc3SCCXQ4NTYudGVzdIIJdDg1\nNy50ZXN0ggl0ODU4LnRlc3SCCXQ4NTkudGVzdIIJdDg2MC50ZXN0ggl0ODYxLnRl\nc3SCCXQ4NjIudGVzdIIJdDg2My50ZXN0ggl0ODY0LnRlc3SCCXQ4NjUudGVzdIIJ\ndDg2Ni50ZXN0ggl0ODY3LnRlc3SCCXQ4NjgudGVzdIIJdDg2OS50ZXN0ggl0ODcw\nLnRlc3SCCXQ4NzEudGVzdIIJdDg3Mi50ZXN0ggl0ODczLnRlc3SCCXQ4NzQudGVz\ndIIJdDg3NS50ZXN0ggl0ODc2LnRlc3SCCXQ4NzcudGVzdIIJdDg3OC50ZXN0ggl0\nODc5LnRlc3SCCXQ4ODAudGVzdIIJdDg4MS50ZXN0ggl0ODgyLnRlc3SCCXQ4ODMu\ndGVzdIIJdDg4NC50ZXN0ggl0ODg1LnRlc3SCCXQ4ODYudGVzdIIJdDg4Ny50ZXN0\nggl0ODg4LnRlc3SCCXQ4ODkudGVzdIIJdDg5MC50ZXN0ggl0ODkxLnRlc3SCCXQ4\nOTIudGVzdIIJdDg5My50ZXN0ggl0ODk0LnRlc3SCCXQ4OTUudGVzdIIJdDg5Ni50\nZXN0ggl0ODk3LnRlc3SCCXQ4OTgudGVzdIIJdDg5OS50ZXN0ggl0OTAwLnRlc3SC\nCXQ5MDEudGVzdIIJdDkwMi50ZXN0ggl0OTAzLnRlc3SCCXQ5MDQudGVzdIIJdDkw\nNS50ZXN0ggl0OTA2LnRlc3SCCXQ5MDcudGVzdIIJdDkwOC50ZXN0ggl0OTA5LnRl\nc3SCCXQ5MTAudGVzdIIJdDkxMS50ZXN0ggl0OTEyLnRlc3SCCXQ5MTMudGVzdIIJ\ndDkxNC50ZXN0ggl0OTE1LnRlc3SCCXQ5MTYudGVzdIIJdDkxNy50ZXN0ggl0OTE4\nLnRlc3SCCXQ5MTkudGVzdIIJdDkyMC50ZXN0ggl0OTIxLnRlc3SCCXQ5MjIudGVz\ndIIJdDkyMy50ZXN0ggl0OTI0LnRlc3SCCXQ5MjUudGVzdIIJdDkyNi50ZXN0ggl0\nOTI3LnRlc3SCCXQ5MjgudGVzdIIJdDkyOS50ZXN0ggl0OTMwLnRlc3SCCXQ5MzEu\ndGVzdIIJdDkzMi50ZXN0ggl0OTMzLnRlc3SCCXQ5MzQudGVzdIIJdDkzNS50ZXN0\nggl0OTM2LnRlc3SCCXQ5MzcudGVzdIIJdDkzOC50ZXN0ggl0OTM5LnRlc3SCCXQ5\nNDAudGVzdIIJdDk0MS50ZXN0ggl0OTQyLnRlc3SCCXQ5NDMudGVzdIIJdDk0NC50\nZXN0ggl0OTQ1LnRlc3SCCXQ5NDYudGVzdIIJdDk0Ny50ZXN0ggl0OTQ4LnRlc3SC\nCXQ5NDkudGVzdIIJdDk1MC50ZXN0ggl0OTUxLnRlc3SCCXQ5NTIudGVzdIIJdDk1\nMy50ZXN0ggl0OTU0LnRlc3SCCXQ5NTUudGVzdIIJdDk1Ni50ZXN0ggl0OTU3LnRl\nc3SCCXQ5NTgudGVzdIIJdDk1OS50ZXN0ggl0OTYwLnRlc3SCCXQ5NjEudGVzdIIJ\ndDk2Mi50ZXN0ggl0OTYzLnRlc3SCCXQ5NjQudGVzdIIJdDk2NS50ZXN0ggl0OTY2\nLnRlc3SCCXQ5NjcudGVzdIIJdDk2OC50ZXN0ggl0OTY5LnRlc3SCCXQ5NzAudGVz\ndIIJdDk3MS50ZXN0ggl0OTcyLnRlc3SCCXQ5NzMudGVzdIIJdDk3NC50ZXN0ggl0\nOTc1LnRlc3SCCXQ5NzYudGVzdIIJdDk3Ny50ZXN0ggl0OTc4LnRlc3SCCXQ5Nzku\ndGVzdIIJdDk4MC50ZXN0ggl0OTgxLnRlc3SCCXQ5ODIudGVzdIIJdDk4My50ZXN0\nggl0OTg0LnRlc3SCCXQ5ODUudGVzdIIJdDk4Ni50ZXN0ggl0OTg3LnRlc3SCCXQ5\nODgudGVzdIIJdDk4OS50ZXN0ggl0OTkwLnRlc3SCCXQ5OTEudGVzdIIJdDk5Mi50\nZXN0ggl0OTkzLnRlc3SCCXQ5OTQudGVzdIIJdDk5NS50ZXN0ggl0OTk2LnRlc3SC\nCXQ5OTcudGVzdIIJdDk5OC50ZXN0ggl0OTk5LnRlc3SCCnQxMDAwLnRlc3SCCnQx\nMDAxLnRlc3SCCnQxMDAyLnRlc3SCCnQxMDAzLnRlc3SCCnQxMDA0LnRlc3SCCnQx\nMDA1LnRlc3SCCnQxMDA2LnRlc3SCCnQxMDA3LnRlc3SCCnQxMDA4LnRlc3SCCnQx\nMDA5LnRlc3SCCnQxMDEwLnRlc3SCCnQxMDExLnRlc3SCCnQxMDEyLnRlc3SCCnQx\nMDEzLnRlc3SCCnQxMDE0LnRlc3SCCnQxMDE1LnRlc3SCCnQxMDE2LnRlc3SCCnQx\nMDE3LnRlc3SCCnQxMDE4LnRlc3SCCnQxMDE5LnRlc3SCCnQxMDIwLnRlc3SCCnQx\nMDIxLnRlc3SCCnQxMDIyLnRlc3SCCnQxMDIzLnRlc3SCCnQxMDI0LnRlc3QwDQYJ\nKoZIhvcNAQELBQADggEBAGfZxjrjcjFw5FnJMzq7SIad+JpmvMar7VnzXj84hjoV\nFuUqiclqjg1KRD7aIh5M1VEQv+AAk8UP6jMrvLJpoi5OD8ljivNA8zycj1N/LhNq\n8MjZauCTS+tuXIoh5hOE/TQqY6cUxY4LRBLIFIcbH0FGF22amCtowMVbRoaUpPvr\nGR5OXPAS3yRiEWrp703c21o3hw9QckB82z7Lxnt3oOFPg62EFPXiqE07Wkw/1xH4\nJ9yy45XW5A77kfel22hVs873QVHI+GkKoTPe/q6eQVgesR2vpDRytKDP9K4tK4KS\n6hqVxj6a8Eqund0izSV+UXkskc9iN6EPXvVTELo3hD8=\n-----END CERTIFICATE-----\n",
 };
-static const size_t kLen52 = 37039;
+static const size_t kLen51 = 37015;
 
-static const char *kData52[] = {
-    "-----BEGIN CERTIFICATE-----\nMIJqrDCCaZSgAwIBAgIBBDANBgkqhkiG9w0BAQsFADANMQswCQYDVQQDEwJDQTAg\nFw0wMDAxMDEwMDAwMDBaGA8yMTAwMDEwMTAwMDAwMFowgmfXMRAwDgYDVQQDEwd0\nMC50ZXN0MRYwFAYJKoZIhvcNAQkBFgd0MEB0ZXN0MRYwFAYJKoZIhvcNAQkBFgd0\nMUB0ZXN0MRYwFAYJKoZIhvcNAQkBFgd0MkB0ZXN0MRYwFAYJKoZIhvcNAQkBFgd0\nM0B0ZXN0MRYwFAYJKoZIhvcNAQkBFgd0NEB0ZXN0MRYwFAYJKoZIhvcNAQkBFgd0\nNUB0ZXN0MRYwFAYJKoZIhvcNAQkBFgd0NkB0ZXN0MRYwFAYJKoZIhvcNAQkBFgd0\nN0B0ZXN0MRYwFAYJKoZIhvcNAQkBFgd0OEB0ZXN0MRYwFAYJKoZIhvcNAQkBFgd0\nOUB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0MTBAdGVzdDEXMBUGCSqGSIb3DQEJARYI\ndDExQHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQxMkB0ZXN0MRcwFQYJKoZIhvcNAQkB\nFgh0MTNAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDE0QHRlc3QxFzAVBgkqhkiG9w0B\nCQEWCHQxNUB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0MTZAdGVzdDEXMBUGCSqGSIb3\nDQEJARYIdDE3QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQxOEB0ZXN0MRcwFQYJKoZI\nhvcNAQkBFgh0MTlAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDIwQHRlc3QxFzAVBgkq\nhkiG9w0BCQEWCHQyMUB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0MjJAdGVzdDEXMBUG\nCSqGSIb3DQEJARYIdDIzQHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQyNEB0ZXN0MRcw\nFQYJKoZIhvcNAQkBFgh0MjVAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDI2QHRlc3Qx\nFzAVBgkqhkiG9w0BCQEWCHQyN0B0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0MjhAdGVz\ndDEXMBUGCSqGSIb3DQEJARYIdDI5QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQzMEB0\nZXN0MRcwFQYJKoZIhvcNAQkBFgh0MzFAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDMy\nQHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQzM0B0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0\nMzRAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDM1QHRlc3QxFzAVBgkqhkiG9w0BCQEW\nCHQzNkB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0MzdAdGVzdDEXMBUGCSqGSIb3DQEJ\nARYIdDM4QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQzOUB0ZXN0MRcwFQYJKoZIhvcN\nAQkBFgh0NDBAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDQxQHRlc3QxFzAVBgkqhkiG\n9w0BCQEWCHQ0MkB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0NDNAdGVzdDEXMBUGCSqG\nSIb3DQEJARYIdDQ0QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ0NUB0ZXN0MRcwFQYJ\nKoZIhvcNAQkBFgh0NDZAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDQ3QHRlc3QxFzAV\nBgkqhkiG9w0BCQEWCHQ0OEB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0NDlAdGVzdDEX\nMBUGCSqGSIb3DQEJARYIdDUwQHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ1MUB0ZXN0\nMRcwFQYJKoZIhvcNAQkBFgh0NTJAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDUzQHRl\nc3QxFzAVBgkqhkiG9w0BCQEWCHQ1NEB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0NTVA\ndGVzdDEXMBUGCSqGSIb3DQEJARYIdDU2QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ1\nN0B0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0NThAdGVzdDEXMBUGCSqGSIb3DQEJARYI\ndDU5QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ2MEB0ZXN0MRcwFQYJKoZIhvcNAQkB\nFgh0NjFAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDYyQHRlc3QxFzAVBgkqhkiG9w0B\nCQEWCHQ2M0B0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0NjRAdGVzdDEXMBUGCSqGSIb3\nDQEJARYIdDY1QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ2NkB0ZXN0MRcwFQYJKoZI\nhvcNAQkBFgh0NjdAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDY4QHRlc3QxFzAVBgkq\nhkiG9w0BCQEWCHQ2OUB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0NzBAdGVzdDEXMBUG\nCSqGSIb3DQEJARYIdDcxQHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ3MkB0ZXN0MRcw\nFQYJKoZIhvcNAQkBFgh0NzNAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDc0QHRlc3Qx\nFzAVBgkqhkiG9w0BCQEWCHQ3NUB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0NzZAdGVz\ndDEXMBUGCSqGSIb3DQEJARYIdDc3QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ3OEB0\nZXN0MRcwFQYJKoZIhvcNAQkBFgh0NzlAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDgw\nQHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ4MUB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0\nODJAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDgzQHRlc3QxFzAVBgkqhkiG9w0BCQEW\nCHQ4NEB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0ODVAdGVzdDEXMBUGCSqGSIb3DQEJ\nARYIdDg2QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ4N0B0ZXN0MRcwFQYJKoZIhvcN\nAQkBFgh0ODhAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDg5QHRlc3QxFzAVBgkqhkiG\n9w0BCQEWCHQ5MEB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0OTFAdGVzdDEXMBUGCSqG\nSIb3DQEJARYIdDkyQHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ5M0B0ZXN0MRcwFQYJ\nKoZIhvcNAQkBFgh0OTRAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDk1QHRlc3QxFzAV\nBgkqhkiG9w0BCQEWCHQ5NkB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0OTdAdGVzdDEX\nMBUGCSqGSIb3DQEJARYIdDk4QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ5OUB0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0MTAwQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxMDFA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDEwMkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nMTAzQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxMDRAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDEwNUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTA2QHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQxMDdAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDEwOEB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0MTA5QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxMTBAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDExMUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTEyQHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQxMTNAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDEx\nNEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTE1QHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQxMTZAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDExN0B0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0MTE4QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxMTlAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDEyMEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTIxQHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQxMjJAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDEyM0B0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0MTI0QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxMjVA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDEyNkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nMTI3QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxMjhAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDEyOUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTMwQHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQxMzFAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDEzMkB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0MTMzQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxMzRAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDEzNUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTM2QHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQxMzdAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDEz\nOEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTM5QHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQxNDBAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE0MUB0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0MTQyQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxNDNAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDE0NEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTQ1QHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQxNDZAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE0N0B0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0MTQ4QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxNDlA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDE1MEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nMTUxQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxNTJAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDE1M0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTU0QHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQxNTVAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE1NkB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0MTU3QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxNThAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDE1OUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTYwQHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQxNjFAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE2\nMkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTYzQHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQxNjRAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE2NUB0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0MTY2QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxNjdAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDE2OEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTY5QHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQxNzBAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE3MUB0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0MTcyQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxNzNA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDE3NEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nMTc1QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxNzZAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDE3N0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTc4QHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQxNzlAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE4MEB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0MTgxQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxODJAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDE4M0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTg0QHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQxODVAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE4\nNkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTg3QHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQxODhAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE4OUB0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0MTkwQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxOTFAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDE5MkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTkzQHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQxOTRAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE5NUB0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0MTk2QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxOTdA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDE5OEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nMTk5QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyMDBAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDIwMUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjAyQHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQyMDNAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDIwNEB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0MjA1QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyMDZAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDIwN0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjA4QHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQyMDlAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDIx\nMEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjExQHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQyMTJAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDIxM0B0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0MjE0QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyMTVAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDIxNkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjE3QHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQyMThAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDIxOUB0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0MjIwQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyMjFA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDIyMkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nMjIzQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyMjRAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDIyNUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjI2QHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQyMjdAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDIyOEB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0MjI5QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyMzBAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDIzMUB0ZXN0MRgwFgY",
+static const char *kData51[] = {
+    "-----BEGIN CERTIFICATE-----\nMIJqmDCCaYCgAwIBAgIBBDANBgkqhkiG9w0BAQsFADANMQswCQYDVQQDEwJDQTAg\nFw0wMDAxMDEwMDAwMDBaGA8yMTAwMDEwMTAwMDAwMFowgmfXMRAwDgYDVQQDEwd0\nMC50ZXN0MRYwFAYJKoZIhvcNAQkBFgd0MEB0ZXN0MRYwFAYJKoZIhvcNAQkBFgd0\nMUB0ZXN0MRYwFAYJKoZIhvcNAQkBFgd0MkB0ZXN0MRYwFAYJKoZIhvcNAQkBFgd0\nM0B0ZXN0MRYwFAYJKoZIhvcNAQkBFgd0NEB0ZXN0MRYwFAYJKoZIhvcNAQkBFgd0\nNUB0ZXN0MRYwFAYJKoZIhvcNAQkBFgd0NkB0ZXN0MRYwFAYJKoZIhvcNAQkBFgd0\nN0B0ZXN0MRYwFAYJKoZIhvcNAQkBFgd0OEB0ZXN0MRYwFAYJKoZIhvcNAQkBFgd0\nOUB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0MTBAdGVzdDEXMBUGCSqGSIb3DQEJARYI\ndDExQHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQxMkB0ZXN0MRcwFQYJKoZIhvcNAQkB\nFgh0MTNAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDE0QHRlc3QxFzAVBgkqhkiG9w0B\nCQEWCHQxNUB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0MTZAdGVzdDEXMBUGCSqGSIb3\nDQEJARYIdDE3QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQxOEB0ZXN0MRcwFQYJKoZI\nhvcNAQkBFgh0MTlAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDIwQHRlc3QxFzAVBgkq\nhkiG9w0BCQEWCHQyMUB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0MjJAdGVzdDEXMBUG\nCSqGSIb3DQEJARYIdDIzQHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQyNEB0ZXN0MRcw\nFQYJKoZIhvcNAQkBFgh0MjVAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDI2QHRlc3Qx\nFzAVBgkqhkiG9w0BCQEWCHQyN0B0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0MjhAdGVz\ndDEXMBUGCSqGSIb3DQEJARYIdDI5QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQzMEB0\nZXN0MRcwFQYJKoZIhvcNAQkBFgh0MzFAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDMy\nQHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQzM0B0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0\nMzRAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDM1QHRlc3QxFzAVBgkqhkiG9w0BCQEW\nCHQzNkB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0MzdAdGVzdDEXMBUGCSqGSIb3DQEJ\nARYIdDM4QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQzOUB0ZXN0MRcwFQYJKoZIhvcN\nAQkBFgh0NDBAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDQxQHRlc3QxFzAVBgkqhkiG\n9w0BCQEWCHQ0MkB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0NDNAdGVzdDEXMBUGCSqG\nSIb3DQEJARYIdDQ0QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ0NUB0ZXN0MRcwFQYJ\nKoZIhvcNAQkBFgh0NDZAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDQ3QHRlc3QxFzAV\nBgkqhkiG9w0BCQEWCHQ0OEB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0NDlAdGVzdDEX\nMBUGCSqGSIb3DQEJARYIdDUwQHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ1MUB0ZXN0\nMRcwFQYJKoZIhvcNAQkBFgh0NTJAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDUzQHRl\nc3QxFzAVBgkqhkiG9w0BCQEWCHQ1NEB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0NTVA\ndGVzdDEXMBUGCSqGSIb3DQEJARYIdDU2QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ1\nN0B0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0NThAdGVzdDEXMBUGCSqGSIb3DQEJARYI\ndDU5QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ2MEB0ZXN0MRcwFQYJKoZIhvcNAQkB\nFgh0NjFAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDYyQHRlc3QxFzAVBgkqhkiG9w0B\nCQEWCHQ2M0B0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0NjRAdGVzdDEXMBUGCSqGSIb3\nDQEJARYIdDY1QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ2NkB0ZXN0MRcwFQYJKoZI\nhvcNAQkBFgh0NjdAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDY4QHRlc3QxFzAVBgkq\nhkiG9w0BCQEWCHQ2OUB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0NzBAdGVzdDEXMBUG\nCSqGSIb3DQEJARYIdDcxQHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ3MkB0ZXN0MRcw\nFQYJKoZIhvcNAQkBFgh0NzNAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDc0QHRlc3Qx\nFzAVBgkqhkiG9w0BCQEWCHQ3NUB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0NzZAdGVz\ndDEXMBUGCSqGSIb3DQEJARYIdDc3QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ3OEB0\nZXN0MRcwFQYJKoZIhvcNAQkBFgh0NzlAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDgw\nQHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ4MUB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0\nODJAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDgzQHRlc3QxFzAVBgkqhkiG9w0BCQEW\nCHQ4NEB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0ODVAdGVzdDEXMBUGCSqGSIb3DQEJ\nARYIdDg2QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ4N0B0ZXN0MRcwFQYJKoZIhvcN\nAQkBFgh0ODhAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDg5QHRlc3QxFzAVBgkqhkiG\n9w0BCQEWCHQ5MEB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0OTFAdGVzdDEXMBUGCSqG\nSIb3DQEJARYIdDkyQHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ5M0B0ZXN0MRcwFQYJ\nKoZIhvcNAQkBFgh0OTRAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDk1QHRlc3QxFzAV\nBgkqhkiG9w0BCQEWCHQ5NkB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0OTdAdGVzdDEX\nMBUGCSqGSIb3DQEJARYIdDk4QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ5OUB0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0MTAwQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxMDFA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDEwMkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nMTAzQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxMDRAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDEwNUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTA2QHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQxMDdAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDEwOEB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0MTA5QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxMTBAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDExMUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTEyQHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQxMTNAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDEx\nNEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTE1QHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQxMTZAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDExN0B0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0MTE4QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxMTlAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDEyMEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTIxQHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQxMjJAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDEyM0B0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0MTI0QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxMjVA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDEyNkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nMTI3QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxMjhAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDEyOUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTMwQHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQxMzFAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDEzMkB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0MTMzQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxMzRAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDEzNUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTM2QHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQxMzdAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDEz\nOEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTM5QHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQxNDBAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE0MUB0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0MTQyQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxNDNAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDE0NEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTQ1QHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQxNDZAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE0N0B0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0MTQ4QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxNDlA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDE1MEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nMTUxQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxNTJAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDE1M0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTU0QHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQxNTVAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE1NkB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0MTU3QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxNThAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDE1OUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTYwQHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQxNjFAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE2\nMkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTYzQHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQxNjRAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE2NUB0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0MTY2QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxNjdAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDE2OEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTY5QHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQxNzBAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE3MUB0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0MTcyQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxNzNA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDE3NEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nMTc1QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxNzZAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDE3N0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTc4QHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQxNzlAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE4MEB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0MTgxQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxODJAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDE4M0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTg0QHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQxODVAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE4\nNkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTg3QHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQxODhAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE4OUB0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0MTkwQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxOTFAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDE5MkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTkzQHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQxOTRAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE5NUB0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0MTk2QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxOTdA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDE5OEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nMTk5QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyMDBAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDIwMUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjAyQHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQyMDNAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDIwNEB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0MjA1QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyMDZAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDIwN0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjA4QHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQyMDlAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDIx\nMEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjExQHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQyMTJAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDIxM0B0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0MjE0QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyMTVAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDIxNkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjE3QHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQyMThAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDIxOUB0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0MjIwQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyMjFA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDIyMkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nMjIzQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyMjRAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDIyNUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjI2QHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQyMjdAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDIyOEB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0MjI5QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyMzBAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDIzMUB0ZXN0MRgwFgY",
     "JKoZIhvcNAQkBFgl0MjMyQHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQyMzNAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDIz\nNEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjM1QHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQyMzZAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDIzN0B0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0MjM4QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyMzlAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDI0MEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjQxQHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQyNDJAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDI0M0B0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0MjQ0QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyNDVA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDI0NkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nMjQ3QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyNDhAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDI0OUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjUwQHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQyNTFAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDI1MkB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0MjUzQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyNTRAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDI1NUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjU2QHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQyNTdAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDI1\nOEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjU5QHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQyNjBAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDI2MUB0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0MjYyQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyNjNAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDI2NEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjY1QHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQyNjZAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDI2N0B0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0MjY4QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyNjlA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDI3MEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nMjcxQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyNzJAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDI3M0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0Mjc0QHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQyNzVAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDI3NkB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0Mjc3QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyNzhAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDI3OUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjgwQHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQyODFAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDI4\nMkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjgzQHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQyODRAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDI4NUB0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0Mjg2QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyODdAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDI4OEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0Mjg5QHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQyOTBAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDI5MUB0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0MjkyQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyOTNA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDI5NEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nMjk1QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyOTZAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDI5N0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0Mjk4QHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQyOTlAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDMwMEB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0MzAxQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzMDJAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDMwM0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MzA0QHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQzMDVAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDMw\nNkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MzA3QHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQzMDhAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDMwOUB0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0MzEwQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzMTFAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDMxMkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MzEzQHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQzMTRAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDMxNUB0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0MzE2QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzMTdA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDMxOEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nMzE5QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzMjBAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDMyMUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MzIyQHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQzMjNAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDMyNEB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0MzI1QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzMjZAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDMyN0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MzI4QHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQzMjlAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDMz\nMEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MzMxQHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQzMzJAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDMzM0B0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0MzM0QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzMzVAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDMzNkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MzM3QHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQzMzhAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDMzOUB0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0MzQwQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzNDFA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDM0MkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nMzQzQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzNDRAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDM0NUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MzQ2QHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQzNDdAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDM0OEB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0MzQ5QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzNTBAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDM1MUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MzUyQHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQzNTNAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDM1\nNEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MzU1QHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQzNTZAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDM1N0B0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0MzU4QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzNTlAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDM2MEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MzYxQHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQzNjJAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDM2M0B0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0MzY0QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzNjVA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDM2NkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nMzY3QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzNjhAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDM2OUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MzcwQHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQzNzFAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDM3MkB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0MzczQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzNzRAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDM3NUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0Mzc2QHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQzNzdAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDM3\nOEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0Mzc5QHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQzODBAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDM4MUB0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0MzgyQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzODNAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDM4NEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0Mzg1QHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQzODZAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDM4N0B0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0Mzg4QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzODlA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDM5MEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nMzkxQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzOTJAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDM5M0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0Mzk0QHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQzOTVAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDM5NkB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0Mzk3QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzOThAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDM5OUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDAwQHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQ0MDFAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQw\nMkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDAzQHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQ0MDRAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQwNUB0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0NDA2QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0MDdAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDQwOEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDA5QHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQ0MTBAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQxMUB0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0NDEyQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0MTNA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDQxNEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nNDE1QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0MTZAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDQxN0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDE4QHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQ0MTlAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQyMEB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0NDIxQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0MjJAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDQyM0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDI0QHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQ0MjVAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQy\nNkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDI3QHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQ0MjhAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQyOUB0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0NDMwQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0MzFAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDQzMkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDMzQHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQ0MzRAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQzNUB0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0NDM2QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0MzdA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDQzOEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nNDM5QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0NDBAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDQ0MUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDQyQHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQ0NDNAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQ0NEB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0NDQ1QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0NDZAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDQ0N0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDQ4QHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQ0NDlAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQ1\nMEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDUxQHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQ0NTJAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQ1M0B0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0NDU0QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0NTVAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDQ1NkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDU3QHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQ0NThAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQ1OUB0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0NDYwQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0NjFA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDQ2MkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nNDYzQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0NjRAd",
     "GVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDQ2NUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDY2QHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQ0NjdAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQ2OEB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0NDY5QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0NzBAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDQ3MUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDcyQHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQ0NzNAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQ3\nNEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDc1QHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQ0NzZAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQ3N0B0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0NDc4QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0NzlAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDQ4MEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDgxQHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQ0ODJAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQ4M0B0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0NDg0QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0ODVA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDQ4NkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nNDg3QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0ODhAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDQ4OUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDkwQHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQ0OTFAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQ5MkB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0NDkzQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0OTRAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDQ5NUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDk2QHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQ0OTdAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQ5\nOEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDk5QHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQ1MDBAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDUwMUB0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0NTAyQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ1MDNAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDUwNEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NTA1QHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQ1MDZAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDUwN0B0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0NTA4QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ1MDlA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDUxMEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nNTExQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ1MTJAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDUxM0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NTE0QHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQ1MTVAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDUxNkB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0NTE3QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ1MThAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDUxOUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NTIwQHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQ1MjFAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDUy\nMkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NTIzQHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQ1MjRAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDUyNUB0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0NTI2QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ1MjdAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDUyOEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NTI5QHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQ1MzBAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDUzMUB0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0NTMyQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ1MzNA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDUzNEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nNTM1QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ1MzZAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDUzN0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NTM4QHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQ1MzlAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDU0MEB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0NTQxQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ1NDJAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDU0M0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NTQ0QHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQ1NDVAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDU0\nNkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NTQ3QHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQ1NDhAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDU0OUB0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0NTUwQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ1NTFAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDU1MkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NTUzQHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQ1NTRAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDU1NUB0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0NTU2QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ1NTdA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDU1OEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nNTU5QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ1NjBAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDU2MUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NTYyQHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQ1NjNAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDU2NEB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0NTY1QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ1NjZAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDU2N0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NTY4QHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQ1NjlAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDU3\nMEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NTcxQHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQ1NzJAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDU3M0B0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0NTc0QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ1NzVAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDU3NkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NTc3QHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQ1NzhAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDU3OUB0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0NTgwQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ1ODFA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDU4MkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nNTgzQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ1ODRAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDU4NUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NTg2QHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQ1ODdAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDU4OEB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0NTg5QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ1OTBAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDU5MUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NTkyQHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQ1OTNAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDU5\nNEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NTk1QHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQ1OTZAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDU5N0B0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0NTk4QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ1OTlAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDYwMEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NjAxQHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQ2MDJAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDYwM0B0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0NjA0QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ2MDVA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDYwNkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nNjA3QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ2MDhAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDYwOUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NjEwQHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQ2MTFAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDYxMkB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0NjEzQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ2MTRAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDYxNUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NjE2QHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQ2MTdAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDYx\nOEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NjE5QHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQ2MjBAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDYyMUB0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0NjIyQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ2MjNAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDYyNEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NjI1QHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQ2MjZAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDYyN0B0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0NjI4QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ2MjlA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDYzMEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nNjMxQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ2MzJAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDYzM0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NjM0QHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQ2MzVAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDYzNkB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0NjM3QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ2MzhAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDYzOUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NjQwQHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQ2NDFAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDY0\nMkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NjQzQHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQ2NDRAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDY0NUB0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0NjQ2QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ2NDdAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDY0OEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NjQ5QHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQ2NTBAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDY1MUB0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0NjUyQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ2NTNA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDY1NEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nNjU1QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ2NTZAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDY1N0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NjU4QHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQ2NTlAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDY2MEB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0NjYxQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ2NjJAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDY2M0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NjY0QHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQ2NjVAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDY2\nNkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NjY3QHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQ2NjhAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDY2OUB0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0NjcwQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ2NzFAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDY3MkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NjczQHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQ2NzRAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDY3NUB0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0Njc2QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ2NzdA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDY3OEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nNjc5QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ2ODBAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDY4MUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NjgyQHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQ2ODNAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDY4NEB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0Njg1QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ2ODZAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDY4N0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0Njg4QHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQ2ODlAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDY5\nMEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NjkxQHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQ2OTJAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDY5M0B0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0Njk0QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ2OTVAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDY5NkB0ZXN0MRgwFgYJKoZIhvcNAQk",
     "BFgl0Njk3QHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQ2OThAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDY5OUB0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0NzAwQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ3MDFA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDcwMkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nNzAzQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ3MDRAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDcwNUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NzA2QHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQ3MDdAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDcwOEB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0NzA5QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ3MTBAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDcxMUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NzEyQHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQ3MTNAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDcx\nNEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NzE1QHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQ3MTZAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDcxN0B0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0NzE4QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ3MTlAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDcyMEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NzIxQHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQ3MjJAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDcyM0B0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0NzI0QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ3MjVA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDcyNkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nNzI3QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ3MjhAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDcyOUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NzMwQHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQ3MzFAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDczMkB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0NzMzQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ3MzRAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDczNUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NzM2QHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQ3MzdAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDcz\nOEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NzM5QHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQ3NDBAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDc0MUB0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0NzQyQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ3NDNAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDc0NEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NzQ1QHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQ3NDZAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDc0N0B0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0NzQ4QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ3NDlA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDc1MEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nNzUxQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ3NTJAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDc1M0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NzU0QHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQ3NTVAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDc1NkB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0NzU3QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ3NThAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDc1OUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NzYwQHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQ3NjFAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDc2\nMkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NzYzQHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQ3NjRAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDc2NUB0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0NzY2QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ3NjdAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDc2OEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NzY5QHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQ3NzBAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDc3MUB0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0NzcyQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ3NzNA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDc3NEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nNzc1QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ3NzZAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDc3N0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0Nzc4QHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQ3NzlAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDc4MEB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0NzgxQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ3ODJAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDc4M0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0Nzg0QHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQ3ODVAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDc4\nNkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0Nzg3QHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQ3ODhAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDc4OUB0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0NzkwQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ3OTFAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDc5MkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NzkzQHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQ3OTRAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDc5NUB0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0Nzk2QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ3OTdA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDc5OEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nNzk5QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ4MDBAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDgwMUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0ODAyQHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQ4MDNAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDgwNEB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0ODA1QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ4MDZAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDgwN0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0ODA4QHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQ4MDlAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDgx\nMEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0ODExQHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQ4MTJAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDgxM0B0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0ODE0QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ4MTVAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDgxNkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0ODE3QHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQ4MThAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDgxOUB0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0ODIwQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ4MjFA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDgyMkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nODIzQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ4MjRAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDgyNUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0ODI2QHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQ4MjdAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDgyOEB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0ODI5QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ4MzBAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDgzMUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0ODMyQHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQ4MzNAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDgz\nNEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0ODM1QHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQ4MzZAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDgzN0B0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0ODM4QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ4MzlAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDg0MEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0ODQxQHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQ4NDJAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDg0M0B0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0ODQ0QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ4NDVA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDg0NkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nODQ3QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ4NDhAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDg0OUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0ODUwQHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQ4NTFAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDg1MkB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0ODUzQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ4NTRAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDg1NUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0ODU2QHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQ4NTdAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDg1\nOEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0ODU5QHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQ4NjBAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDg2MUB0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0ODYyQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ4NjNAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDg2NEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0ODY1QHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQ4NjZAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDg2N0B0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0ODY4QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ4NjlA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDg3MEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nODcxQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ4NzJAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDg3M0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0ODc0QHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQ4NzVAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDg3NkB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0ODc3QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ4NzhAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDg3OUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0ODgwQHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQ4ODFAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDg4\nMkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0ODgzQHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQ4ODRAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDg4NUB0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0ODg2QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ4ODdAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDg4OEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0ODg5QHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQ4OTBAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDg5MUB0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0ODkyQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ4OTNA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDg5NEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nODk1QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ4OTZAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDg5N0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0ODk4QHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQ4OTlAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDkwMEB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0OTAxQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ5MDJAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDkwM0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0OTA0QHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQ5MDVAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDkw\nNkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0OTA3QHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQ5MDhAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDkwOUB0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0OTEwQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ5MTFAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDkxMkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0OTEzQHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQ5MTRAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDkxNUB0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0OTE2QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ5MTdA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDkxOEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nOTE5QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ5MjBAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDkyMUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0OTIyQHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQ5MjNAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDkyNEB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0OTI1QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ5MjZAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDkyN0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0OTI4QHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQ5MjlAdGVzdDEYMBYGC",
-    "SqGSIb3DQEJARYJdDkz\nMEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0OTMxQHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQ5MzJAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDkzM0B0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0OTM0QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ5MzVAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDkzNkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0OTM3QHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQ5MzhAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDkzOUB0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0OTQwQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ5NDFA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDk0MkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nOTQzQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ5NDRAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDk0NUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0OTQ2QHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQ5NDdAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDk0OEB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0OTQ5QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ5NTBAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDk1MUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0OTUyQHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQ5NTNAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDk1\nNEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0OTU1QHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQ5NTZAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDk1N0B0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0OTU4QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ5NTlAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDk2MEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0OTYxQHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQ5NjJAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDk2M0B0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0OTY0QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ5NjVA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDk2NkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nOTY3QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ5NjhAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDk2OUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0OTcwQHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQ5NzFAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDk3MkB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0OTczQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ5NzRAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDk3NUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0OTc2QHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQ5NzdAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDk3\nOEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0OTc5QHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQ5ODBAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDk4MUB0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0OTgyQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ5ODNAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDk4NEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0OTg1QHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQ5ODZAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDk4N0B0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0OTg4QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ5ODlA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDk5MEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nOTkxQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ5OTJAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDk5M0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0OTk0QHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQ5OTVAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDk5NkB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0OTk3QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ5OThAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDk5OUB0ZXN0MRkwFwYJKoZIhvcNAQkBFgp0MTAwMEB0\nZXN0MRkwFwYJKoZIhvcNAQkBFgp0MTAwMUB0ZXN0MRkwFwYJKoZIhvcNAQkBFgp0\nMTAwMkB0ZXN0MRkwFwYJKoZIhvcNAQkBFgp0MTAwM0B0ZXN0MRkwFwYJKoZIhvcN\nAQkBFgp0MTAwNEB0ZXN0MRkwFwYJKoZIhvcNAQkBFgp0MTAwNUB0ZXN0MRkwFwYJ\nKoZIhvcNAQkBFgp0MTAwNkB0ZXN0MRkwFwYJKoZIhvcNAQkBFgp0MTAwN0B0ZXN0\nMRkwFwYJKoZIhvcNAQkBFgp0MTAwOEB0ZXN0MRkwFwYJKoZIhvcNAQkBFgp0MTAw\nOUB0ZXN0MRkwFwYJKoZIhvcNAQkBFgp0MTAxMEB0ZXN0MRkwFwYJKoZIhvcNAQkB\nFgp0MTAxMUB0ZXN0MRkwFwYJKoZIhvcNAQkBFgp0MTAxMkB0ZXN0MRkwFwYJKoZI\nhvcNAQkBFgp0MTAxM0B0ZXN0MRkwFwYJKoZIhvcNAQkBFgp0MTAxNEB0ZXN0MRkw\nFwYJKoZIhvcNAQkBFgp0MTAxNUB0ZXN0MRkwFwYJKoZIhvcNAQkBFgp0MTAxNkB0\nZXN0MRkwFwYJKoZIhvcNAQkBFgp0MTAxN0B0ZXN0MRkwFwYJKoZIhvcNAQkBFgp0\nMTAxOEB0ZXN0MRkwFwYJKoZIhvcNAQkBFgp0MTAxOUB0ZXN0MRkwFwYJKoZIhvcN\nAQkBFgp0MTAyMEB0ZXN0MRkwFwYJKoZIhvcNAQkBFgp0MTAyMUB0ZXN0MRkwFwYJ\nKoZIhvcNAQkBFgp0MTAyMkB0ZXN0MRkwFwYJKoZIhvcNAQkBFgp0MTAyM0B0ZXN0\nMRkwFwYJKoZIhvcNAQkBFgp0MTAyNEB0ZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOC\nAQ8AMIIBCgKCAQEAugvahBkSAUF1fC49vb1bvlPrcl80kop1iLpiuYoz4Qptwy57\n+EWssZBcHprZ5BkWf6PeGZ7F5AX1PyJbGHZLqvMCvViP6pd4MFox/igESISEHEix\noiXCzepBrhtp5UQSjHD4D4hKtgdMgVxX+LRtwgW3mnu/vBu7rzpr/DS8io99p3lq\nZ1Aky+aNlcMj6MYy8U+YFEevb/V0lRY9oqwmW7BHnXikm/vi6sjIS350U8zb/mRz\nYeIs2R65LUduTL50+UMgat9ocewI2dv8aO9Dph+8NdGtg8LFYyTTHcUxJoMr1PTO\ngnmET19WJH4PrFwk7ZE1QJQQ1L4iKmPeQistuQIDAQABo0kwRzAOBgNVHQ8BAf8E\nBAMCBaAwEwYDVR0lBAwwCgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADASBgNVHREE\nCzAJggd0MC50ZXN0MA0GCSqGSIb3DQEBCwUAA4IBAQAi7LIMyX5Ec514hvjROZ8b\n7i4UR3xd5IbniVSej+PKZhG2inN6aX9bksdda0ddYZeRSHAkNJuoabeankQJ/x5x\nsxBntWSVLCxz6S8NRrLAPKKPBvFb/W5ns57LP9SrLIij9l/NSd+K/CQNTlfcdorg\n4ltPVNwSMp/XXjH6rQYJSbo9MhDoxeqPpv73e4jY0DfGn1a8uwyCXalLjh4EkUyS\nYe0N7MoUKV0IucrXKdgj2sHgBFqNKJ/GVQ422xZRbYqsyIJ0bPD6Fc8VcqfVrvYg\nlCYJfu7Xij5n3mjQaSYcbVxH71X8fYhhNq1tk+WtQOXirz2EkSuh1rNGU/LT8Q6r\n-----END CERTIFICATE-----\n",
+    "SqGSIb3DQEJARYJdDkz\nMEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0OTMxQHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQ5MzJAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDkzM0B0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0OTM0QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ5MzVAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDkzNkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0OTM3QHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQ5MzhAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDkzOUB0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0OTQwQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ5NDFA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDk0MkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nOTQzQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ5NDRAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDk0NUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0OTQ2QHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQ5NDdAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDk0OEB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0OTQ5QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ5NTBAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDk1MUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0OTUyQHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQ5NTNAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDk1\nNEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0OTU1QHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQ5NTZAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDk1N0B0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0OTU4QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ5NTlAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDk2MEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0OTYxQHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQ5NjJAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDk2M0B0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0OTY0QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ5NjVA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDk2NkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nOTY3QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ5NjhAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDk2OUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0OTcwQHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQ5NzFAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDk3MkB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0OTczQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ5NzRAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDk3NUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0OTc2QHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQ5NzdAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDk3\nOEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0OTc5QHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQ5ODBAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDk4MUB0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0OTgyQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ5ODNAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDk4NEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0OTg1QHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQ5ODZAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDk4N0B0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0OTg4QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ5ODlA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDk5MEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nOTkxQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ5OTJAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDk5M0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0OTk0QHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQ5OTVAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDk5NkB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0OTk3QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ5OThAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDk5OUB0ZXN0MRkwFwYJKoZIhvcNAQkBFgp0MTAwMEB0\nZXN0MRkwFwYJKoZIhvcNAQkBFgp0MTAwMUB0ZXN0MRkwFwYJKoZIhvcNAQkBFgp0\nMTAwMkB0ZXN0MRkwFwYJKoZIhvcNAQkBFgp0MTAwM0B0ZXN0MRkwFwYJKoZIhvcN\nAQkBFgp0MTAwNEB0ZXN0MRkwFwYJKoZIhvcNAQkBFgp0MTAwNUB0ZXN0MRkwFwYJ\nKoZIhvcNAQkBFgp0MTAwNkB0ZXN0MRkwFwYJKoZIhvcNAQkBFgp0MTAwN0B0ZXN0\nMRkwFwYJKoZIhvcNAQkBFgp0MTAwOEB0ZXN0MRkwFwYJKoZIhvcNAQkBFgp0MTAw\nOUB0ZXN0MRkwFwYJKoZIhvcNAQkBFgp0MTAxMEB0ZXN0MRkwFwYJKoZIhvcNAQkB\nFgp0MTAxMUB0ZXN0MRkwFwYJKoZIhvcNAQkBFgp0MTAxMkB0ZXN0MRkwFwYJKoZI\nhvcNAQkBFgp0MTAxM0B0ZXN0MRkwFwYJKoZIhvcNAQkBFgp0MTAxNEB0ZXN0MRkw\nFwYJKoZIhvcNAQkBFgp0MTAxNUB0ZXN0MRkwFwYJKoZIhvcNAQkBFgp0MTAxNkB0\nZXN0MRkwFwYJKoZIhvcNAQkBFgp0MTAxN0B0ZXN0MRkwFwYJKoZIhvcNAQkBFgp0\nMTAxOEB0ZXN0MRkwFwYJKoZIhvcNAQkBFgp0MTAxOUB0ZXN0MRkwFwYJKoZIhvcN\nAQkBFgp0MTAyMEB0ZXN0MRkwFwYJKoZIhvcNAQkBFgp0MTAyMUB0ZXN0MRkwFwYJ\nKoZIhvcNAQkBFgp0MTAyMkB0ZXN0MRkwFwYJKoZIhvcNAQkBFgp0MTAyM0B0ZXN0\nMRkwFwYJKoZIhvcNAQkBFgp0MTAyNEB0ZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOC\nAQ8AMIIBCgKCAQEAugvahBkSAUF1fC49vb1bvlPrcl80kop1iLpiuYoz4Qptwy57\n+EWssZBcHprZ5BkWf6PeGZ7F5AX1PyJbGHZLqvMCvViP6pd4MFox/igESISEHEix\noiXCzepBrhtp5UQSjHD4D4hKtgdMgVxX+LRtwgW3mnu/vBu7rzpr/DS8io99p3lq\nZ1Aky+aNlcMj6MYy8U+YFEevb/V0lRY9oqwmW7BHnXikm/vi6sjIS350U8zb/mRz\nYeIs2R65LUduTL50+UMgat9ocewI2dv8aO9Dph+8NdGtg8LFYyTTHcUxJoMr1PTO\ngnmET19WJH4PrFwk7ZE1QJQQ1L4iKmPeQistuQIDAQABozUwMzAOBgNVHQ8BAf8E\nBAMCBaAwEwYDVR0lBAwwCgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADANBgkqhkiG\n9w0BAQsFAAOCAQEAtMIpnGzOBkJXEBmCsRVbTrg9QgYRlGPG48+cXT2QbIutAmbj\nmiF+OYg/bRsQtuqcKjnJYog+x6UCU3d34jaMEfEXfHSwF7xPQrqJm45MXhG3so4E\n+el5GMAS+SKFQK3w8NPoGhGwn82sz4XV6HMG+ANUxMlCrOcx2jh5UW+7ITjdRwJd\nReJ/JaMpneJdwGFSU9Vn+t7PFb51/pOYqO/PuEANzphovjMVcFZ6mtAQwYDkQZBJ\nVy1/7bPoNmbKD0GAS6HpS+xaJ/DnjjD6Kal2T7GMyvRMogj5BeZ/uEkXCEhvoaBT\nos1gaqqnGpZ6JSEDctzjgpCtEPR40yiz1wv1CA==\n-----END CERTIFICATE-----\n",
 };
-static const size_t kLen53 = 13599;
+static const size_t kLen52 = 13599;
 
-static const char *kData53[] = {
+static const char *kData52[] = {
     "-----BEGIN CERTIFICATE-----\nMIInDDCCJfSgAwIBAgIBBTANBgkqhkiG9w0BAQsFADANMQswCQYDVQQDEwJDQTAg\nFw0wMDAxMDEwMDAwMDBaGA8yMTAwMDEwMTAwMDAwMFowghmkMRAwDgYDVQQDEwd0\nMC50ZXN0MRYwFAYJKoZIhvcNAQkBFgd0MEB0ZXN0MRYwFAYJKoZIhvcNAQkBFgd0\nMUB0ZXN0MRYwFAYJKoZIhvcNAQkBFgd0MkB0ZXN0MRYwFAYJKoZIhvcNAQkBFgd0\nM0B0ZXN0MRYwFAYJKoZIhvcNAQkBFgd0NEB0ZXN0MRYwFAYJKoZIhvcNAQkBFgd0\nNUB0ZXN0MRYwFAYJKoZIhvcNAQkBFgd0NkB0ZXN0MRYwFAYJKoZIhvcNAQkBFgd0\nN0B0ZXN0MRYwFAYJKoZIhvcNAQkBFgd0OEB0ZXN0MRYwFAYJKoZIhvcNAQkBFgd0\nOUB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0MTBAdGVzdDEXMBUGCSqGSIb3DQEJARYI\ndDExQHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQxMkB0ZXN0MRcwFQYJKoZIhvcNAQkB\nFgh0MTNAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDE0QHRlc3QxFzAVBgkqhkiG9w0B\nCQEWCHQxNUB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0MTZAdGVzdDEXMBUGCSqGSIb3\nDQEJARYIdDE3QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQxOEB0ZXN0MRcwFQYJKoZI\nhvcNAQkBFgh0MTlAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDIwQHRlc3QxFzAVBgkq\nhkiG9w0BCQEWCHQyMUB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0MjJAdGVzdDEXMBUG\nCSqGSIb3DQEJARYIdDIzQHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQyNEB0ZXN0MRcw\nFQYJKoZIhvcNAQkBFgh0MjVAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDI2QHRlc3Qx\nFzAVBgkqhkiG9w0BCQEWCHQyN0B0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0MjhAdGVz\ndDEXMBUGCSqGSIb3DQEJARYIdDI5QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQzMEB0\nZXN0MRcwFQYJKoZIhvcNAQkBFgh0MzFAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDMy\nQHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQzM0B0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0\nMzRAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDM1QHRlc3QxFzAVBgkqhkiG9w0BCQEW\nCHQzNkB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0MzdAdGVzdDEXMBUGCSqGSIb3DQEJ\nARYIdDM4QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQzOUB0ZXN0MRcwFQYJKoZIhvcN\nAQkBFgh0NDBAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDQxQHRlc3QxFzAVBgkqhkiG\n9w0BCQEWCHQ0MkB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0NDNAdGVzdDEXMBUGCSqG\nSIb3DQEJARYIdDQ0QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ0NUB0ZXN0MRcwFQYJ\nKoZIhvcNAQkBFgh0NDZAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDQ3QHRlc3QxFzAV\nBgkqhkiG9w0BCQEWCHQ0OEB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0NDlAdGVzdDEX\nMBUGCSqGSIb3DQEJARYIdDUwQHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ1MUB0ZXN0\nMRcwFQYJKoZIhvcNAQkBFgh0NTJAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDUzQHRl\nc3QxFzAVBgkqhkiG9w0BCQEWCHQ1NEB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0NTVA\ndGVzdDEXMBUGCSqGSIb3DQEJARYIdDU2QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ1\nN0B0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0NThAdGVzdDEXMBUGCSqGSIb3DQEJARYI\ndDU5QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ2MEB0ZXN0MRcwFQYJKoZIhvcNAQkB\nFgh0NjFAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDYyQHRlc3QxFzAVBgkqhkiG9w0B\nCQEWCHQ2M0B0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0NjRAdGVzdDEXMBUGCSqGSIb3\nDQEJARYIdDY1QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ2NkB0ZXN0MRcwFQYJKoZI\nhvcNAQkBFgh0NjdAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDY4QHRlc3QxFzAVBgkq\nhkiG9w0BCQEWCHQ2OUB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0NzBAdGVzdDEXMBUG\nCSqGSIb3DQEJARYIdDcxQHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ3MkB0ZXN0MRcw\nFQYJKoZIhvcNAQkBFgh0NzNAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDc0QHRlc3Qx\nFzAVBgkqhkiG9w0BCQEWCHQ3NUB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0NzZAdGVz\ndDEXMBUGCSqGSIb3DQEJARYIdDc3QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ3OEB0\nZXN0MRcwFQYJKoZIhvcNAQkBFgh0NzlAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDgw\nQHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ4MUB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0\nODJAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDgzQHRlc3QxFzAVBgkqhkiG9w0BCQEW\nCHQ4NEB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0ODVAdGVzdDEXMBUGCSqGSIb3DQEJ\nARYIdDg2QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ4N0B0ZXN0MRcwFQYJKoZIhvcN\nAQkBFgh0ODhAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDg5QHRlc3QxFzAVBgkqhkiG\n9w0BCQEWCHQ5MEB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0OTFAdGVzdDEXMBUGCSqG\nSIb3DQEJARYIdDkyQHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ5M0B0ZXN0MRcwFQYJ\nKoZIhvcNAQkBFgh0OTRAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDk1QHRlc3QxFzAV\nBgkqhkiG9w0BCQEWCHQ5NkB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0OTdAdGVzdDEX\nMBUGCSqGSIb3DQEJARYIdDk4QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ5OUB0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0MTAwQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxMDFA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDEwMkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nMTAzQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxMDRAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDEwNUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTA2QHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQxMDdAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDEwOEB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0MTA5QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxMTBAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDExMUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTEyQHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQxMTNAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDEx\nNEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTE1QHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQxMTZAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDExN0B0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0MTE4QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxMTlAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDEyMEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTIxQHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQxMjJAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDEyM0B0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0MTI0QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxMjVA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDEyNkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nMTI3QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxMjhAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDEyOUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTMwQHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQxMzFAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDEzMkB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0MTMzQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxMzRAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDEzNUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTM2QHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQxMzdAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDEz\nOEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTM5QHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQxNDBAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE0MUB0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0MTQyQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxNDNAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDE0NEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTQ1QHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQxNDZAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE0N0B0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0MTQ4QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxNDlA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDE1MEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nMTUxQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxNTJAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDE1M0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTU0QHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQxNTVAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE1NkB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0MTU3QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxNThAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDE1OUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTYwQHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQxNjFAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE2\nMkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTYzQHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQxNjRAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE2NUB0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0MTY2QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxNjdAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDE2OEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTY5QHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQxNzBAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE3MUB0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0MTcyQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxNzNA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDE3NEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nMTc1QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxNzZAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDE3N0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTc4QHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQxNzlAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE4MEB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0MTgxQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxODJAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDE4M0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTg0QHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQxODVAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE4\nNkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTg3QHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQxODhAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE4OUB0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0MTkwQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxOTFAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDE5MkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTkzQHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQxOTRAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE5NUB0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0MTk2QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxOTdA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDE5OEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nMTk5QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyMDBAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDIwMUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjAyQHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQyMDNAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDIwNEB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0MjA1QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyMDZAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDIwN0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjA4QHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQyMDlAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDIx\nMEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjExQHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQyMTJAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDIxM0B0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0MjE0QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyMTVAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDIxNkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjE3QHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQyMThAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDIxOUB0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0MjIwQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyMjFA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDIyMkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nMjIzQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyMjRAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDIyNUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjI2QHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQyMjdAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDIyOEB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0MjI5QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyMzBAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDIzMUB0ZXN0MRgwFgY",
     "JKoZIhvcNAQkBFgl0MjMyQHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQyMzNAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDIz\nNEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjM1QHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQyMzZAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDIzN0B0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0MjM4QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyMzlAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDI0MEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjQxQHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQyNDJAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDI0M0B0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0MjQ0QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyNDVA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDI0NkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nMjQ3QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyNDhAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDI0OUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjUwQHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQyNTFAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDI1MkB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0MjUzQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyNTRAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDI1NUB0ZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A\nMIIBCgKCAQEAugvahBkSAUF1fC49vb1bvlPrcl80kop1iLpiuYoz4Qptwy57+EWs\nsZBcHprZ5BkWf6PeGZ7F5AX1PyJbGHZLqvMCvViP6pd4MFox/igESISEHEixoiXC\nzepBrhtp5UQSjHD4D4hKtgdMgVxX+LRtwgW3mnu/vBu7rzpr/DS8io99p3lqZ1Ak\ny+aNlcMj6MYy8U+YFEevb/V0lRY9oqwmW7BHnXikm/vi6sjIS350U8zb/mRzYeIs\n2R65LUduTL50+UMgat9ocewI2dv8aO9Dph+8NdGtg8LFYyTTHcUxJoMr1PTOgnmE\nT19WJH4PrFwk7ZE1QJQQ1L4iKmPeQistuQIDAQABo4IK2jCCCtYwDgYDVR0PAQH/\nBAQDAgWgMBMGA1UdJQQMMAoGCCsGAQUFBwMBMAwGA1UdEwEB/wQCMAAwggqfBgNV\nHREEggqWMIIKkoIHdDAudGVzdIIHdDEudGVzdIIHdDIudGVzdIIHdDMudGVzdIIH\ndDQudGVzdIIHdDUudGVzdIIHdDYudGVzdIIHdDcudGVzdIIHdDgudGVzdIIHdDku\ndGVzdIIIdDEwLnRlc3SCCHQxMS50ZXN0ggh0MTIudGVzdIIIdDEzLnRlc3SCCHQx\nNC50ZXN0ggh0MTUudGVzdIIIdDE2LnRlc3SCCHQxNy50ZXN0ggh0MTgudGVzdIII\ndDE5LnRlc3SCCHQyMC50ZXN0ggh0MjEudGVzdIIIdDIyLnRlc3SCCHQyMy50ZXN0\nggh0MjQudGVzdIIIdDI1LnRlc3SCCHQyNi50ZXN0ggh0MjcudGVzdIIIdDI4LnRl\nc3SCCHQyOS50ZXN0ggh0MzAudGVzdIIIdDMxLnRlc3SCCHQzMi50ZXN0ggh0MzMu\ndGVzdIIIdDM0LnRlc3SCCHQzNS50ZXN0ggh0MzYudGVzdIIIdDM3LnRlc3SCCHQz\nOC50ZXN0ggh0MzkudGVzdIIIdDQwLnRlc3SCCHQ0MS50ZXN0ggh0NDIudGVzdIII\ndDQzLnRlc3SCCHQ0NC50ZXN0ggh0NDUudGVzdIIIdDQ2LnRlc3SCCHQ0Ny50ZXN0\nggh0NDgudGVzdIIIdDQ5LnRlc3SCCHQ1MC50ZXN0ggh0NTEudGVzdIIIdDUyLnRl\nc3SCCHQ1My50ZXN0ggh0NTQudGVzdIIIdDU1LnRlc3SCCHQ1Ni50ZXN0ggh0NTcu\ndGVzdIIIdDU4LnRlc3SCCHQ1OS50ZXN0ggh0NjAudGVzdIIIdDYxLnRlc3SCCHQ2\nMi50ZXN0ggh0NjMudGVzdIIIdDY0LnRlc3SCCHQ2NS50ZXN0ggh0NjYudGVzdIII\ndDY3LnRlc3SCCHQ2OC50ZXN0ggh0NjkudGVzdIIIdDcwLnRlc3SCCHQ3MS50ZXN0\nggh0NzIudGVzdIIIdDczLnRlc3SCCHQ3NC50ZXN0ggh0NzUudGVzdIIIdDc2LnRl\nc3SCCHQ3Ny50ZXN0ggh0NzgudGVzdIIIdDc5LnRlc3SCCHQ4MC50ZXN0ggh0ODEu\ndGVzdIIIdDgyLnRlc3SCCHQ4My50ZXN0ggh0ODQudGVzdIIIdDg1LnRlc3SCCHQ4\nNi50ZXN0ggh0ODcudGVzdIIIdDg4LnRlc3SCCHQ4OS50ZXN0ggh0OTAudGVzdIII\ndDkxLnRlc3SCCHQ5Mi50ZXN0ggh0OTMudGVzdIIIdDk0LnRlc3SCCHQ5NS50ZXN0\nggh0OTYudGVzdIIIdDk3LnRlc3SCCHQ5OC50ZXN0ggh0OTkudGVzdIIJdDEwMC50\nZXN0ggl0MTAxLnRlc3SCCXQxMDIudGVzdIIJdDEwMy50ZXN0ggl0MTA0LnRlc3SC\nCXQxMDUudGVzdIIJdDEwNi50ZXN0ggl0MTA3LnRlc3SCCXQxMDgudGVzdIIJdDEw\nOS50ZXN0ggl0MTEwLnRlc3SCCXQxMTEudGVzdIIJdDExMi50ZXN0ggl0MTEzLnRl\nc3SCCXQxMTQudGVzdIIJdDExNS50ZXN0ggl0MTE2LnRlc3SCCXQxMTcudGVzdIIJ\ndDExOC50ZXN0ggl0MTE5LnRlc3SCCXQxMjAudGVzdIIJdDEyMS50ZXN0ggl0MTIy\nLnRlc3SCCXQxMjMudGVzdIIJdDEyNC50ZXN0ggl0MTI1LnRlc3SCCXQxMjYudGVz\ndIIJdDEyNy50ZXN0ggl0MTI4LnRlc3SCCXQxMjkudGVzdIIJdDEzMC50ZXN0ggl0\nMTMxLnRlc3SCCXQxMzIudGVzdIIJdDEzMy50ZXN0ggl0MTM0LnRlc3SCCXQxMzUu\ndGVzdIIJdDEzNi50ZXN0ggl0MTM3LnRlc3SCCXQxMzgudGVzdIIJdDEzOS50ZXN0\nggl0MTQwLnRlc3SCCXQxNDEudGVzdIIJdDE0Mi50ZXN0ggl0MTQzLnRlc3SCCXQx\nNDQudGVzdIIJdDE0NS50ZXN0ggl0MTQ2LnRlc3SCCXQxNDcudGVzdIIJdDE0OC50\nZXN0ggl0MTQ5LnRlc3SCCXQxNTAudGVzdIIJdDE1MS50ZXN0ggl0MTUyLnRlc3SC\nCXQxNTMudGVzdIIJdDE1NC50ZXN0ggl0MTU1LnRlc3SCCXQxNTYudGVzdIIJdDE1\nNy50ZXN0ggl0MTU4LnRlc3SCCXQxNTkudGVzdIIJdDE2MC50ZXN0ggl0MTYxLnRl\nc3SCCXQxNjIudGVzdIIJdDE2My50ZXN0ggl0MTY0LnRlc3SCCXQxNjUudGVzdIIJ\ndDE2Ni50ZXN0ggl0MTY3LnRlc3SCCXQxNjgudGVzdIIJdDE2OS50ZXN0ggl0MTcw\nLnRlc3SCCXQxNzEudGVzdIIJdDE3Mi50ZXN0ggl0MTczLnRlc3SCCXQxNzQudGVz\ndIIJdDE3NS50ZXN0ggl0MTc2LnRlc3SCCXQxNzcudGVzdIIJdDE3OC50ZXN0ggl0\nMTc5LnRlc3SCCXQxODAudGVzdIIJdDE4MS50ZXN0ggl0MTgyLnRlc3SCCXQxODMu\ndGVzdIIJdDE4NC50ZXN0ggl0MTg1LnRlc3SCCXQxODYudGVzdIIJdDE4Ny50ZXN0\nggl0MTg4LnRlc3SCCXQxODkudGVzdIIJdDE5MC50ZXN0ggl0MTkxLnRlc3SCCXQx\nOTIudGVzdIIJdDE5My50ZXN0ggl0MTk0LnRlc3SCCXQxOTUudGVzdIIJdDE5Ni50\nZXN0ggl0MTk3LnRlc3SCCXQxOTgudGVzdIIJdDE5OS50ZXN0ggl0MjAwLnRlc3SC\nCXQyMDEudGVzdIIJdDIwMi50ZXN0ggl0MjAzLnRlc3SCCXQyMDQudGVzdIIJdDIw\nNS50ZXN0ggl0MjA2LnRlc3SCCXQyMDcudGVzdIIJdDIwOC50ZXN0ggl0MjA5LnRl\nc3SCCXQyMTAudGVzdIIJdDIxMS50ZXN0ggl0MjEyLnRlc3SCCXQyMTMudGVzdIIJ\ndDIxNC50ZXN0ggl0MjE1LnRlc3SCCXQyMTYudGVzdIIJdDIxNy50ZXN0ggl0MjE4\nLnRlc3SCCXQyMTkudGVzdIIJdDIyMC50ZXN0ggl0MjIxLnRlc3SCCXQyMjIudGVz\ndIIJdDIyMy50ZXN0ggl0MjI0LnRlc3SCCXQyMjUudGVzdIIJdDIyNi50ZXN0ggl0\nMjI3LnRlc3SCCXQyMjgudGVzdIIJdDIyOS50ZXN0ggl0MjMwLnRlc3SCCXQyMzEu\ndGVzdIIJdDIzMi50ZXN0ggl0MjMzLnRlc3SCCXQyMzQudGVzdIIJdDIzNS50ZXN0\nggl0MjM2LnRlc3SCCXQyMzcudGVzdIIJdDIzOC50ZXN0ggl0MjM5LnRlc3SCCXQy\nNDAudGVzdIIJdDI0MS50ZXN0ggl0MjQyLnRlc3SCCXQyNDMudGVzdIIJdDI0NC50\nZXN0ggl0MjQ1LnRlc3SCCXQyNDYudGVzdIIJdDI0Ny50ZXN0ggl0MjQ4LnRlc3SC\nCXQyNDkudGVzdIIJdDI1MC50ZXN0ggl0MjUxLnRlc3SCCXQyNTIudGVzdIIJdDI1\nMy50ZXN0ggl0MjU0LnRlc3SCCXQyNTUudGVzdDANBgkqhkiG9w0BAQsFAAOCAQEA\nJIFn5ymMVnj0DOFldXQzAjaosat0Z1dAca0BFO/4bf+IfvpaLvZCiSucInV0ejgR\ndP3UsoiXV8qXBax1nr5t4k+yOGYbhgj3imHFtKhFaqJ45AqEJOmzCHWIN0LkN+YL\nME6JBJr86EB+diLPBS7iljmtvN7avvmJ8AbGFI6eB5BwSjewavWpv55u52zMWti7\nCa2WpKffH74zhnGqkbMzEiiRa1L1+H/uQBJ0BEeAZbr+pSkJZJvzY/eH8a7fLHra\nLfBqD4epDm6RI6gSNeJ+G7qSfpVSk7l9bsVh7rUTSSCKBxhcImudqBuLfswoa0Ub\nZoA33vstMRAur0m/blHQHA==\n-----END CERTIFICATE-----\n",
 };
-static const size_t kLen54 = 8557;
+static const size_t kLen53 = 8557;
 
-static const char *kData54[] = {
+static const char *kData53[] = {
     "-----BEGIN CERTIFICATE-----\nMIIYgzCCF2ugAwIBAgIBBjANBgkqhkiG9w0BAQsFADANMQswCQYDVQQDEwJDQTAg\nFw0wMDAxMDEwMDAwMDBaGA8yMTAwMDEwMTAwMDAwMFowEjEQMA4GA1UEAxMHdDAu\ndGVzdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALoL2oQZEgFBdXwu\nPb29W75T63JfNJKKdYi6YrmKM+EKbcMue/hFrLGQXB6a2eQZFn+j3hmexeQF9T8i\nWxh2S6rzAr1Yj+qXeDBaMf4oBEiEhBxIsaIlws3qQa4baeVEEoxw+A+ISrYHTIFc\nV/i0bcIFt5p7v7wbu686a/w0vIqPfad5amdQJMvmjZXDI+jGMvFPmBRHr2/1dJUW\nPaKsJluwR514pJv74urIyEt+dFPM2/5kc2HiLNkeuS1Hbky+dPlDIGrfaHHsCNnb\n/GjvQ6YfvDXRrYPCxWMk0x3FMSaDK9T0zoJ5hE9fViR+D6xcJO2RNUCUENS+Iipj\n3kIrLbkCAwEAAaOCFeUwghXhMA4GA1UdDwEB/wQEAwIFoDATBgNVHSUEDDAKBggr\nBgEFBQcDATAMBgNVHRMBAf8EAjAAMIIVqgYDVR0RBIIVoTCCFZ2CB3QwLnRlc3SC\nB3QxLnRlc3SCB3QyLnRlc3SCB3QzLnRlc3SCB3Q0LnRlc3SCB3Q1LnRlc3SCB3Q2\nLnRlc3SCB3Q3LnRlc3SCB3Q4LnRlc3SCB3Q5LnRlc3SCCHQxMC50ZXN0ggh0MTEu\ndGVzdIIIdDEyLnRlc3SCCHQxMy50ZXN0ggh0MTQudGVzdIIIdDE1LnRlc3SCCHQx\nNi50ZXN0ggh0MTcudGVzdIIIdDE4LnRlc3SCCHQxOS50ZXN0ggh0MjAudGVzdIII\ndDIxLnRlc3SCCHQyMi50ZXN0ggh0MjMudGVzdIIIdDI0LnRlc3SCCHQyNS50ZXN0\nggh0MjYudGVzdIIIdDI3LnRlc3SCCHQyOC50ZXN0ggh0MjkudGVzdIIIdDMwLnRl\nc3SCCHQzMS50ZXN0ggh0MzIudGVzdIIIdDMzLnRlc3SCCHQzNC50ZXN0ggh0MzUu\ndGVzdIIIdDM2LnRlc3SCCHQzNy50ZXN0ggh0MzgudGVzdIIIdDM5LnRlc3SCCHQ0\nMC50ZXN0ggh0NDEudGVzdIIIdDQyLnRlc3SCCHQ0My50ZXN0ggh0NDQudGVzdIII\ndDQ1LnRlc3SCCHQ0Ni50ZXN0ggh0NDcudGVzdIIIdDQ4LnRlc3SCCHQ0OS50ZXN0\nggh0NTAudGVzdIIIdDUxLnRlc3SCCHQ1Mi50ZXN0ggh0NTMudGVzdIIIdDU0LnRl\nc3SCCHQ1NS50ZXN0ggh0NTYudGVzdIIIdDU3LnRlc3SCCHQ1OC50ZXN0ggh0NTku\ndGVzdIIIdDYwLnRlc3SCCHQ2MS50ZXN0ggh0NjIudGVzdIIIdDYzLnRlc3SCCHQ2\nNC50ZXN0ggh0NjUudGVzdIIIdDY2LnRlc3SCCHQ2Ny50ZXN0ggh0NjgudGVzdIII\ndDY5LnRlc3SCCHQ3MC50ZXN0ggh0NzEudGVzdIIIdDcyLnRlc3SCCHQ3My50ZXN0\nggh0NzQudGVzdIIIdDc1LnRlc3SCCHQ3Ni50ZXN0ggh0NzcudGVzdIIIdDc4LnRl\nc3SCCHQ3OS50ZXN0ggh0ODAudGVzdIIIdDgxLnRlc3SCCHQ4Mi50ZXN0ggh0ODMu\ndGVzdIIIdDg0LnRlc3SCCHQ4NS50ZXN0ggh0ODYudGVzdIIIdDg3LnRlc3SCCHQ4\nOC50ZXN0ggh0ODkudGVzdIIIdDkwLnRlc3SCCHQ5MS50ZXN0ggh0OTIudGVzdIII\ndDkzLnRlc3SCCHQ5NC50ZXN0ggh0OTUudGVzdIIIdDk2LnRlc3SCCHQ5Ny50ZXN0\nggh0OTgudGVzdIIIdDk5LnRlc3SCCXQxMDAudGVzdIIJdDEwMS50ZXN0ggl0MTAy\nLnRlc3SCCXQxMDMudGVzdIIJdDEwNC50ZXN0ggl0MTA1LnRlc3SCCXQxMDYudGVz\ndIIJdDEwNy50ZXN0ggl0MTA4LnRlc3SCCXQxMDkudGVzdIIJdDExMC50ZXN0ggl0\nMTExLnRlc3SCCXQxMTIudGVzdIIJdDExMy50ZXN0ggl0MTE0LnRlc3SCCXQxMTUu\ndGVzdIIJdDExNi50ZXN0ggl0MTE3LnRlc3SCCXQxMTgudGVzdIIJdDExOS50ZXN0\nggl0MTIwLnRlc3SCCXQxMjEudGVzdIIJdDEyMi50ZXN0ggl0MTIzLnRlc3SCCXQx\nMjQudGVzdIIJdDEyNS50ZXN0ggl0MTI2LnRlc3SCCXQxMjcudGVzdIIJdDEyOC50\nZXN0ggl0MTI5LnRlc3SCCXQxMzAudGVzdIIJdDEzMS50ZXN0ggl0MTMyLnRlc3SC\nCXQxMzMudGVzdIIJdDEzNC50ZXN0ggl0MTM1LnRlc3SCCXQxMzYudGVzdIIJdDEz\nNy50ZXN0ggl0MTM4LnRlc3SCCXQxMzkudGVzdIIJdDE0MC50ZXN0ggl0MTQxLnRl\nc3SCCXQxNDIudGVzdIIJdDE0My50ZXN0ggl0MTQ0LnRlc3SCCXQxNDUudGVzdIIJ\ndDE0Ni50ZXN0ggl0MTQ3LnRlc3SCCXQxNDgudGVzdIIJdDE0OS50ZXN0ggl0MTUw\nLnRlc3SCCXQxNTEudGVzdIIJdDE1Mi50ZXN0ggl0MTUzLnRlc3SCCXQxNTQudGVz\ndIIJdDE1NS50ZXN0ggl0MTU2LnRlc3SCCXQxNTcudGVzdIIJdDE1OC50ZXN0ggl0\nMTU5LnRlc3SCCXQxNjAudGVzdIIJdDE2MS50ZXN0ggl0MTYyLnRlc3SCCXQxNjMu\ndGVzdIIJdDE2NC50ZXN0ggl0MTY1LnRlc3SCCXQxNjYudGVzdIIJdDE2Ny50ZXN0\nggl0MTY4LnRlc3SCCXQxNjkudGVzdIIJdDE3MC50ZXN0ggl0MTcxLnRlc3SCCXQx\nNzIudGVzdIIJdDE3My50ZXN0ggl0MTc0LnRlc3SCCXQxNzUudGVzdIIJdDE3Ni50\nZXN0ggl0MTc3LnRlc3SCCXQxNzgudGVzdIIJdDE3OS50ZXN0ggl0MTgwLnRlc3SC\nCXQxODEudGVzdIIJdDE4Mi50ZXN0ggl0MTgzLnRlc3SCCXQxODQudGVzdIIJdDE4\nNS50ZXN0ggl0MTg2LnRlc3SCCXQxODcudGVzdIIJdDE4OC50ZXN0ggl0MTg5LnRl\nc3SCCXQxOTAudGVzdIIJdDE5MS50ZXN0ggl0MTkyLnRlc3SCCXQxOTMudGVzdIIJ\ndDE5NC50ZXN0ggl0MTk1LnRlc3SCCXQxOTYudGVzdIIJdDE5Ny50ZXN0ggl0MTk4\nLnRlc3SCCXQxOTkudGVzdIIJdDIwMC50ZXN0ggl0MjAxLnRlc3SCCXQyMDIudGVz\ndIIJdDIwMy50ZXN0ggl0MjA0LnRlc3SCCXQyMDUudGVzdIIJdDIwNi50ZXN0ggl0\nMjA3LnRlc3SCCXQyMDgudGVzdIIJdDIwOS50ZXN0ggl0MjEwLnRlc3SCCXQyMTEu\ndGVzdIIJdDIxMi50ZXN0ggl0MjEzLnRlc3SCCXQyMTQudGVzdIIJdDIxNS50ZXN0\nggl0MjE2LnRlc3SCCXQyMTcudGVzdIIJdDIxOC50ZXN0ggl0MjE5LnRlc3SCCXQy\nMjAudGVzdIIJdDIyMS50ZXN0ggl0MjIyLnRlc3SCCXQyMjMudGVzdIIJdDIyNC50\nZXN0ggl0MjI1LnRlc3SCCXQyMjYudGVzdIIJdDIyNy50ZXN0ggl0MjI4LnRlc3SC\nCXQyMjkudGVzdIIJdDIzMC50ZXN0ggl0MjMxLnRlc3SCCXQyMzIudGVzdIIJdDIz\nMy50ZXN0ggl0MjM0LnRlc3SCCXQyMzUudGVzdIIJdDIzNi50ZXN0ggl0MjM3LnRl\nc3SCCXQyMzgudGVzdIIJdDIzOS50ZXN0ggl0MjQwLnRlc3SCCXQyNDEudGVzdIIJ\ndDI0Mi50ZXN0ggl0MjQzLnRlc3SCCXQyNDQudGVzdIIJdDI0NS50ZXN0ggl0MjQ2\nLnRlc3SCCXQyNDcudGVzdIIJdDI0OC50ZXN0ggl0MjQ5LnRlc3SCCXQyNTAudGVz\ndIIJdDI1MS50ZXN0ggl0MjUyLnRlc3SCCXQyNTMudGVzdIIJdDI1NC50ZXN0ggl0\nMjU1LnRlc3SCCXQyNTYudGVzdIIJdDI1Ny50ZXN0ggl0MjU4LnRlc3SCCXQyNTku\ndGVzdIIJdDI2MC50ZXN0ggl0MjYxLnRlc3SCCXQyNjIudGVzdIIJdDI2My50ZXN0\nggl0MjY0LnRlc3SCCXQyNjUudGVzdIIJdDI2Ni50ZXN0ggl0MjY3LnRlc3SCCXQy\nNjgudGVzdIIJdDI2OS50ZXN0ggl0MjcwLnRlc3SCCXQyNzEudGVzdIIJdDI3Mi50\nZXN0ggl0MjczLnRlc3SCCXQyNzQudGVzdIIJdDI3NS50ZXN0ggl0Mjc2LnRlc3SC\nCXQyNzcudGVzdIIJdDI3OC50ZXN0ggl0Mjc5LnRlc3SCCXQyODAudGVzdIIJdDI4\nMS50ZXN0ggl0MjgyLnRlc3SCCXQyODMudGVzdIIJdDI4NC50ZXN0ggl0Mjg1LnRl\nc3SCCXQyODYudGVzdIIJdDI4Ny50ZXN0ggl0Mjg4LnRlc3SCCXQyODkudGVzdIIJ\ndDI5MC50ZXN0ggl0MjkxLnRlc3SCCXQyOTIudGVzdIIJdDI5My50ZXN0ggl0Mjk0\nLnRlc3SCCXQyOTUudGVzdIIJdDI5Ni50ZXN0ggl0Mjk3LnRlc3SCCXQyOTgudGVz\ndIIJdDI5OS50ZXN0ggl0MzAwLnRlc3SCCXQzMDEudGVzdIIJdDMwMi50ZXN0ggl0\nMzAzLnRlc3SCCXQzMDQudGVzdIIJdDMwNS50ZXN0ggl0MzA2LnRlc3SCCXQzMDcu\ndGVzdIIJdDMwOC50ZXN0ggl0MzA5LnRlc3SCCXQzMTAudGVzdIIJdDMxMS50ZXN0\nggl0MzEyLnRlc3SCCXQzMTMudGVzdIIJdDMxNC50ZXN0ggl0MzE1LnRlc3SCCXQz\nMTYudGVzdIIJdDMxNy50ZXN0ggl0MzE4LnRlc3SCCXQzMTkudGVzdIIJdDMyMC50\nZXN0ggl0MzIxLnRlc3SCCXQzMjIudGVzdIIJdDMyMy50ZXN0ggl0MzI0LnRlc3SC\nCXQzMjUudGVzdIIJdDMyNi50ZXN0ggl0MzI3LnRlc3SCCXQzMjgudGVzdIIJdDMy\nOS50ZXN0ggl0MzMwLnRlc3SCCXQzMzEudGVzdIIJdDMzMi50ZXN0ggl0MzMzLnRl\nc3SCCXQzMzQudGVzdIIJdDMzNS50ZXN0ggl0MzM2LnRlc3SCCXQzMzcudGVzdIIJ\ndDMzOC50ZXN0ggl0MzM5LnRlc3SCCXQzNDAudGVzdIIJdDM0MS50ZXN0ggl0MzQy\nLnRlc3SCCXQzNDMudGVzdIIJdDM0NC50ZXN0ggl0MzQ1LnRlc3SCCXQzNDYudGVz\ndIIJdDM0Ny50ZXN0ggl0MzQ4LnRlc3SCCXQzNDkudGVzdIIJdDM1MC50ZXN0ggl0\nMzUxLnRlc3SCCXQzNTIudGVzdIIJdDM1My50ZXN0ggl0MzU0LnRlc3SCCXQzNTUu\ndGVzdIIJdDM1Ni50ZXN0ggl0MzU3LnRlc3SCCXQzNTgudGVzdIIJdDM1OS50ZXN0\nggl0MzYwLnRlc3SCCXQzNjEudGVzdIIJdDM2Mi50ZXN0ggl0MzYzLnRlc3SCCXQz\nNjQudGVzdIIJdDM2NS50ZXN0ggl0MzY2LnRlc3SCCXQzNjcudGVzdIIJdDM2OC50\nZXN0ggl0MzY5LnRlc3SCCXQzNzAudGVzdIIJdDM3MS50ZXN0ggl0MzcyLnRlc3SC\nCXQzNzMudGVzdIIJdDM3NC50ZXN0ggl0Mzc1LnRlc3SCCXQzNzYudGVzdIIJdDM3\nNy50ZXN0ggl0Mzc4LnRlc3SCCXQzNzkudGVzdIIJdDM4MC50ZXN0ggl0MzgxLnRl\nc3SCCXQzODIudGVzdIIJdDM4My50ZXN0ggl0Mzg0LnRlc3SCCXQzODUudGVzdIIJ\ndDM4Ni50ZXN0ggl0Mzg3LnRlc3SCCXQzODgudGVzdIIJdDM4OS50ZXN0ggl0Mzkw\nLnRlc3SCCXQzOTEudGVzdIIJdDM5Mi50ZXN0ggl0MzkzLnRlc3SCCXQzOTQudGVz\ndIIJdDM5NS50ZXN0ggl0Mzk2LnRlc3SCCXQzOTcudGVzdIIJdDM5OC50ZXN0ggl0\nMzk5LnRlc3SCCXQ0MDAudGVzdIIJdDQwMS50ZXN0ggl0NDAyLnRlc3SCCXQ0MDMu\ndGVzdIIJdDQwNC50ZXN0ggl0NDA1LnRlc3SCCXQ0MDYudGVzdIIJdDQwNy50ZXN0\nggl0NDA4LnRlc3SCCXQ0MDkudGVzdIIJdDQxMC50ZXN0ggl0NDExLnRlc3SCCXQ0\nMTIudGVzdIIJdDQxMy50ZXN0ggl0NDE0LnRlc3SCCXQ0MTUudGVzdIIJdDQxNi50\nZXN0ggl0NDE3LnRlc3SCCXQ0MTgudGVzdIIJdDQxOS50ZXN0ggl0NDIwLnRlc3SC\nCXQ0MjEudGVzdIIJdDQyMi50ZXN0ggl0NDIzLnRlc3SCCXQ0MjQudGVzdIIJdDQy\nNS50ZXN0ggl0NDI2LnRlc3SCCXQ0MjcudGVzdIIJdDQyOC50ZXN0ggl0NDI5LnRl\nc3SCCXQ0MzAudGVzdIIJdDQzMS50ZXN0ggl0NDMyLnRlc3SCCXQ0MzMudGVzdIIJ\ndDQzNC50ZXN0ggl0NDM1LnRlc3SCCXQ0MzYudGVzdIIJdDQzNy50ZXN0ggl0NDM4\nLnRlc3SCCXQ0MzkudGVzdIIJdDQ0MC50ZXN0ggl0NDQxLnRlc3SCCXQ0NDIudGVz\ndIIJdDQ0My50ZXN0ggl0NDQ0LnRlc3SCCXQ0NDUudGVzdIIJdDQ0Ni50ZXN0ggl0\nNDQ3LnRlc3SCCXQ0NDgudGVzdIIJdDQ0OS50ZXN0ggl0NDUwLnRlc3SCCXQ0NTEu\ndGVzdIIJdDQ1Mi50ZXN0ggl0NDUzLnRlc3SCCXQ0NTQudGVzdIIJdDQ1NS50ZXN0\nggl0NDU2LnRlc3SCCXQ0NTcudGVzdIIJdDQ1OC50ZXN0ggl0NDU5LnRlc3SCCXQ0\nNjAudGVzdIIJdDQ2MS50ZXN0ggl0NDYyLnRlc3SCCXQ0NjMudGVzdIIJdDQ2NC50\nZXN0ggl0NDY1LnRlc3SCCXQ0NjYudGVzdIIJdDQ2Ny50ZXN0ggl0NDY4LnRlc3SC\nCXQ0NjkudGVzdIIJdDQ3MC50ZXN0ggl0NDcxLnRlc3SCCXQ0NzIudGVzdIIJdDQ3\nMy50ZXN0ggl0NDc0LnRlc3SCCXQ0NzUudGVzdIIJdDQ3Ni50ZXN0ggl0NDc3LnRl\nc3SCCXQ0NzgudGVzdIIJdDQ3OS50ZXN0ggl0NDgwLnRlc3SCCXQ0ODEudGVzdIIJ\ndDQ4Mi50ZXN0ggl0NDgzLnRlc3SCCXQ0ODQudGVzdIIJdDQ4NS50ZXN0ggl0NDg2\nLnRlc3SCCXQ0ODcudGVzdIIJdDQ4OC50ZXN0ggl0NDg5LnRlc3SCCXQ0OTAudGVz\ndIIJdDQ5MS50ZXN0ggl0NDkyLnRlc3SCCXQ0OTMudGVzdIIJdDQ5NC50ZXN0ggl0\nNDk1LnRlc3SCCXQ0OTYudGVzdIIJdDQ5Ny50ZXN0ggl0NDk4LnRlc3SCCXQ0OTku\ndGVzdIIJdDUwMC50ZXN0ggl0NTAxLnRlc3SCCXQ1MDIudGVzdIIJdDUwMy50ZXN0\nggl0NTA0LnRlc3SCCXQ1MDUudGVzdIIJdDUwNi50ZXN0ggl0NTA3LnRlc3SCCXQ1\nMDgudGVzdIIJdDUwOS50ZXN0ggl0NTEwLnRlc3SCCXQ1MTEudGVzdIIJdDUxMi50\nZXN0MA0GCSqGSIb3DQEBCwUAA4IBAQBjxDfYTob",
     "CREWVHPrt1T9iT2t0gieS7hVw\nlQaezO1n+m0MerQ92DHhMXBROBiMXIWyvTa341xClpYAwPqqAIUEdS0L5r4Jq/Ep\n4uglb+eZXMvTAm89KH3L8xTugc8UtHMqbfyo92v96wgFXBrcDDXIkGdPkLyz2s2J\nQjpNVG/La/EYTQdHPgv6Rg0g+t6RNN1JJ0p1wQ5ItDc8d/bfWdlG/EViWVRsiSBh\n7YRbkGWdnHnorCe0yIg0jKCk3UhgXaYY66/alpmE/QVXSaLgNvdmJ5m9mixY0ZaB\n0niy+KzIgBczvDcxVdL5/fsxGvA4nI8Gi7Z+EJDKXeED+FwcTDJD\n-----END CERTIFICATE-----\n",
 };
-static const size_t kLen55 = 18982;
+static const size_t kLen54 = 18953;
+
+static const char *kData54[] = {
+    "-----BEGIN CERTIFICATE-----\nMII2fzCCNWegAwIBAgIBBzANBgkqhkiG9w0BAQsFADANMQswCQYDVQQDEwJDQTAg\nFw0wMDAxMDEwMDAwMDBaGA8yMTAwMDEwMTAwMDAwMFowgjO+MRAwDgYDVQQDEwd0\nMC50ZXN0MRYwFAYJKoZIhvcNAQkBFgd0MEB0ZXN0MRYwFAYJKoZIhvcNAQkBFgd0\nMUB0ZXN0MRYwFAYJKoZIhvcNAQkBFgd0MkB0ZXN0MRYwFAYJKoZIhvcNAQkBFgd0\nM0B0ZXN0MRYwFAYJKoZIhvcNAQkBFgd0NEB0ZXN0MRYwFAYJKoZIhvcNAQkBFgd0\nNUB0ZXN0MRYwFAYJKoZIhvcNAQkBFgd0NkB0ZXN0MRYwFAYJKoZIhvcNAQkBFgd0\nN0B0ZXN0MRYwFAYJKoZIhvcNAQkBFgd0OEB0ZXN0MRYwFAYJKoZIhvcNAQkBFgd0\nOUB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0MTBAdGVzdDEXMBUGCSqGSIb3DQEJARYI\ndDExQHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQxMkB0ZXN0MRcwFQYJKoZIhvcNAQkB\nFgh0MTNAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDE0QHRlc3QxFzAVBgkqhkiG9w0B\nCQEWCHQxNUB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0MTZAdGVzdDEXMBUGCSqGSIb3\nDQEJARYIdDE3QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQxOEB0ZXN0MRcwFQYJKoZI\nhvcNAQkBFgh0MTlAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDIwQHRlc3QxFzAVBgkq\nhkiG9w0BCQEWCHQyMUB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0MjJAdGVzdDEXMBUG\nCSqGSIb3DQEJARYIdDIzQHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQyNEB0ZXN0MRcw\nFQYJKoZIhvcNAQkBFgh0MjVAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDI2QHRlc3Qx\nFzAVBgkqhkiG9w0BCQEWCHQyN0B0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0MjhAdGVz\ndDEXMBUGCSqGSIb3DQEJARYIdDI5QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQzMEB0\nZXN0MRcwFQYJKoZIhvcNAQkBFgh0MzFAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDMy\nQHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQzM0B0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0\nMzRAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDM1QHRlc3QxFzAVBgkqhkiG9w0BCQEW\nCHQzNkB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0MzdAdGVzdDEXMBUGCSqGSIb3DQEJ\nARYIdDM4QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQzOUB0ZXN0MRcwFQYJKoZIhvcN\nAQkBFgh0NDBAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDQxQHRlc3QxFzAVBgkqhkiG\n9w0BCQEWCHQ0MkB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0NDNAdGVzdDEXMBUGCSqG\nSIb3DQEJARYIdDQ0QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ0NUB0ZXN0MRcwFQYJ\nKoZIhvcNAQkBFgh0NDZAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDQ3QHRlc3QxFzAV\nBgkqhkiG9w0BCQEWCHQ0OEB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0NDlAdGVzdDEX\nMBUGCSqGSIb3DQEJARYIdDUwQHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ1MUB0ZXN0\nMRcwFQYJKoZIhvcNAQkBFgh0NTJAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDUzQHRl\nc3QxFzAVBgkqhkiG9w0BCQEWCHQ1NEB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0NTVA\ndGVzdDEXMBUGCSqGSIb3DQEJARYIdDU2QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ1\nN0B0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0NThAdGVzdDEXMBUGCSqGSIb3DQEJARYI\ndDU5QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ2MEB0ZXN0MRcwFQYJKoZIhvcNAQkB\nFgh0NjFAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDYyQHRlc3QxFzAVBgkqhkiG9w0B\nCQEWCHQ2M0B0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0NjRAdGVzdDEXMBUGCSqGSIb3\nDQEJARYIdDY1QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ2NkB0ZXN0MRcwFQYJKoZI\nhvcNAQkBFgh0NjdAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDY4QHRlc3QxFzAVBgkq\nhkiG9w0BCQEWCHQ2OUB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0NzBAdGVzdDEXMBUG\nCSqGSIb3DQEJARYIdDcxQHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ3MkB0ZXN0MRcw\nFQYJKoZIhvcNAQkBFgh0NzNAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDc0QHRlc3Qx\nFzAVBgkqhkiG9w0BCQEWCHQ3NUB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0NzZAdGVz\ndDEXMBUGCSqGSIb3DQEJARYIdDc3QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ3OEB0\nZXN0MRcwFQYJKoZIhvcNAQkBFgh0NzlAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDgw\nQHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ4MUB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0\nODJAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDgzQHRlc3QxFzAVBgkqhkiG9w0BCQEW\nCHQ4NEB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0ODVAdGVzdDEXMBUGCSqGSIb3DQEJ\nARYIdDg2QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ4N0B0ZXN0MRcwFQYJKoZIhvcN\nAQkBFgh0ODhAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDg5QHRlc3QxFzAVBgkqhkiG\n9w0BCQEWCHQ5MEB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0OTFAdGVzdDEXMBUGCSqG\nSIb3DQEJARYIdDkyQHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ5M0B0ZXN0MRcwFQYJ\nKoZIhvcNAQkBFgh0OTRAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDk1QHRlc3QxFzAV\nBgkqhkiG9w0BCQEWCHQ5NkB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0OTdAdGVzdDEX\nMBUGCSqGSIb3DQEJARYIdDk4QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ5OUB0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0MTAwQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxMDFA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDEwMkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nMTAzQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxMDRAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDEwNUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTA2QHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQxMDdAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDEwOEB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0MTA5QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxMTBAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDExMUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTEyQHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQxMTNAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDEx\nNEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTE1QHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQxMTZAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDExN0B0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0MTE4QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxMTlAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDEyMEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTIxQHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQxMjJAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDEyM0B0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0MTI0QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxMjVA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDEyNkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nMTI3QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxMjhAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDEyOUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTMwQHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQxMzFAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDEzMkB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0MTMzQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxMzRAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDEzNUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTM2QHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQxMzdAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDEz\nOEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTM5QHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQxNDBAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE0MUB0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0MTQyQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxNDNAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDE0NEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTQ1QHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQxNDZAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE0N0B0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0MTQ4QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxNDlA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDE1MEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nMTUxQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxNTJAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDE1M0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTU0QHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQxNTVAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE1NkB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0MTU3QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxNThAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDE1OUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTYwQHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQxNjFAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE2\nMkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTYzQHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQxNjRAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE2NUB0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0MTY2QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxNjdAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDE2OEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTY5QHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQxNzBAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE3MUB0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0MTcyQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxNzNA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDE3NEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nMTc1QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxNzZAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDE3N0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTc4QHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQxNzlAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE4MEB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0MTgxQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxODJAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDE4M0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTg0QHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQxODVAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE4\nNkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTg3QHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQxODhAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE4OUB0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0MTkwQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxOTFAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDE5MkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTkzQHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQxOTRAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE5NUB0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0MTk2QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxOTdA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDE5OEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nMTk5QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyMDBAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDIwMUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjAyQHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQyMDNAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDIwNEB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0MjA1QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyMDZAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDIwN0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjA4QHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQyMDlAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDIx\nMEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjExQHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQyMTJAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDIxM0B0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0MjE0QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyMTVAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDIxNkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjE3QHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQyMThAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDIxOUB0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0MjIwQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyMjFA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDIyMkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nMjIzQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyMjRAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDIyNUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjI2QHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQyMjdAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDIyOEB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0MjI5QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyMzBAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDIzMUB0ZXN0MRgwFgY",
+    "JKoZIhvcNAQkBFgl0MjMyQHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQyMzNAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDIz\nNEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjM1QHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQyMzZAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDIzN0B0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0MjM4QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyMzlAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDI0MEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjQxQHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQyNDJAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDI0M0B0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0MjQ0QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyNDVA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDI0NkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nMjQ3QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyNDhAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDI0OUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjUwQHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQyNTFAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDI1MkB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0MjUzQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyNTRAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDI1NUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjU2QHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQyNTdAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDI1\nOEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjU5QHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQyNjBAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDI2MUB0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0MjYyQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyNjNAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDI2NEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjY1QHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQyNjZAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDI2N0B0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0MjY4QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyNjlA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDI3MEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nMjcxQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyNzJAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDI3M0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0Mjc0QHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQyNzVAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDI3NkB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0Mjc3QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyNzhAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDI3OUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjgwQHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQyODFAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDI4\nMkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjgzQHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQyODRAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDI4NUB0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0Mjg2QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyODdAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDI4OEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0Mjg5QHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQyOTBAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDI5MUB0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0MjkyQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyOTNA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDI5NEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nMjk1QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyOTZAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDI5N0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0Mjk4QHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQyOTlAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDMwMEB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0MzAxQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzMDJAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDMwM0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MzA0QHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQzMDVAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDMw\nNkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MzA3QHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQzMDhAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDMwOUB0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0MzEwQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzMTFAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDMxMkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MzEzQHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQzMTRAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDMxNUB0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0MzE2QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzMTdA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDMxOEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nMzE5QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzMjBAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDMyMUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MzIyQHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQzMjNAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDMyNEB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0MzI1QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzMjZAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDMyN0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MzI4QHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQzMjlAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDMz\nMEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MzMxQHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQzMzJAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDMzM0B0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0MzM0QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzMzVAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDMzNkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MzM3QHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQzMzhAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDMzOUB0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0MzQwQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzNDFA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDM0MkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nMzQzQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzNDRAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDM0NUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MzQ2QHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQzNDdAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDM0OEB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0MzQ5QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzNTBAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDM1MUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MzUyQHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQzNTNAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDM1\nNEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MzU1QHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQzNTZAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDM1N0B0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0MzU4QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzNTlAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDM2MEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MzYxQHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQzNjJAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDM2M0B0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0MzY0QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzNjVA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDM2NkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nMzY3QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzNjhAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDM2OUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MzcwQHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQzNzFAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDM3MkB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0MzczQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzNzRAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDM3NUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0Mzc2QHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQzNzdAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDM3\nOEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0Mzc5QHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQzODBAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDM4MUB0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0MzgyQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzODNAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDM4NEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0Mzg1QHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQzODZAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDM4N0B0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0Mzg4QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzODlA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDM5MEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nMzkxQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzOTJAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDM5M0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0Mzk0QHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQzOTVAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDM5NkB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0Mzk3QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzOThAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDM5OUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDAwQHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQ0MDFAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQw\nMkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDAzQHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQ0MDRAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQwNUB0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0NDA2QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0MDdAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDQwOEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDA5QHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQ0MTBAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQxMUB0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0NDEyQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0MTNA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDQxNEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nNDE1QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0MTZAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDQxN0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDE4QHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQ0MTlAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQyMEB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0NDIxQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0MjJAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDQyM0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDI0QHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQ0MjVAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQy\nNkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDI3QHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQ0MjhAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQyOUB0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0NDMwQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0MzFAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDQzMkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDMzQHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQ0MzRAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQzNUB0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0NDM2QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0MzdA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDQzOEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nNDM5QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0NDBAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDQ0MUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDQyQHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQ0NDNAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQ0NEB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0NDQ1QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0NDZAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDQ0N0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDQ4QHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQ0NDlAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQ1\nMEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDUxQHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQ0NTJAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQ1M0B0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0NDU0QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0NTVAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDQ1NkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDU3QHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQ0NThAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQ1OUB0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0NDYwQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0NjFA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDQ2MkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nNDYzQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0NjRAd",
+    "GVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDQ2NUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDY2QHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQ0NjdAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQ2OEB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0NDY5QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0NzBAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDQ3MUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDcyQHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQ0NzNAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQ3\nNEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDc1QHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQ0NzZAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQ3N0B0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0NDc4QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0NzlAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDQ4MEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDgxQHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQ0ODJAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQ4M0B0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0NDg0QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0ODVA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDQ4NkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nNDg3QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0ODhAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDQ4OUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDkwQHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQ0OTFAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQ5MkB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0NDkzQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0OTRAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDQ5NUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDk2QHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQ0OTdAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQ5\nOEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDk5QHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQ1MDBAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDUwMUB0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0NTAyQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ1MDNAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDUwNEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NTA1QHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQ1MDZAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDUwN0B0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0NTA4QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ1MDlA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDUxMEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nNTExQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ1MTJAdGVzdDCCASIwDQYJKoZIhvcN\nAQEBBQADggEPADCCAQoCggEBALoL2oQZEgFBdXwuPb29W75T63JfNJKKdYi6YrmK\nM+EKbcMue/hFrLGQXB6a2eQZFn+j3hmexeQF9T8iWxh2S6rzAr1Yj+qXeDBaMf4o\nBEiEhBxIsaIlws3qQa4baeVEEoxw+A+ISrYHTIFcV/i0bcIFt5p7v7wbu686a/w0\nvIqPfad5amdQJMvmjZXDI+jGMvFPmBRHr2/1dJUWPaKsJluwR514pJv74urIyEt+\ndFPM2/5kc2HiLNkeuS1Hbky+dPlDIGrfaHHsCNnb/GjvQ6YfvDXRrYPCxWMk0x3F\nMSaDK9T0zoJ5hE9fViR+D6xcJO2RNUCUENS+Iipj3kIrLbkCAwEAAaM1MDMwDgYD\nVR0PAQH/BAQDAgWgMBMGA1UdJQQMMAoGCCsGAQUFBwMBMAwGA1UdEwEB/wQCMAAw\nDQYJKoZIhvcNAQELBQADggEBAH6ad2kFE0qGDe3ErMdwTGjbBz3T12dDvAUVhGHQ\nuZShOdPsXMHD2mUqFgLE0iJFeXB7jOSAKtzmKHNmxZ4W0UZ7eMPPogkgIbG3d3yR\n8zBO21CUyOQWChywpKcAou9ji3Kq6pb4+mqq0a5TGIYyGJKSUTv09KI+iHgwteCX\nDHzzhuTs8AhodmNO5K/F9YFWJWvQ1NrwyUmOFEw8/UcljyKxFrP2VEov0fWeiTRB\nPs6VaFBW7SEEi8fAM9W5kfsl+iWRvwFcFdXGQt1HbeywCu58DLI4uceHCFb+3MMO\nXv7wJ5UhQODuzwuq7CuZvlxR2tiFoPP+s5fPH0L8MBP5z6w=\n-----END CERTIFICATE-----\n",
+};
+static const size_t kLen55 = 66001;
 
 static const char *kData55[] = {
-    "-----BEGIN CERTIFICATE-----\nMII2kzCCNXugAwIBAgIBBzANBgkqhkiG9w0BAQsFADANMQswCQYDVQQDEwJDQTAg\nFw0wMDAxMDEwMDAwMDBaGA8yMTAwMDEwMTAwMDAwMFowgjO+MRAwDgYDVQQDEwd0\nMC50ZXN0MRYwFAYJKoZIhvcNAQkBFgd0MEB0ZXN0MRYwFAYJKoZIhvcNAQkBFgd0\nMUB0ZXN0MRYwFAYJKoZIhvcNAQkBFgd0MkB0ZXN0MRYwFAYJKoZIhvcNAQkBFgd0\nM0B0ZXN0MRYwFAYJKoZIhvcNAQkBFgd0NEB0ZXN0MRYwFAYJKoZIhvcNAQkBFgd0\nNUB0ZXN0MRYwFAYJKoZIhvcNAQkBFgd0NkB0ZXN0MRYwFAYJKoZIhvcNAQkBFgd0\nN0B0ZXN0MRYwFAYJKoZIhvcNAQkBFgd0OEB0ZXN0MRYwFAYJKoZIhvcNAQkBFgd0\nOUB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0MTBAdGVzdDEXMBUGCSqGSIb3DQEJARYI\ndDExQHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQxMkB0ZXN0MRcwFQYJKoZIhvcNAQkB\nFgh0MTNAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDE0QHRlc3QxFzAVBgkqhkiG9w0B\nCQEWCHQxNUB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0MTZAdGVzdDEXMBUGCSqGSIb3\nDQEJARYIdDE3QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQxOEB0ZXN0MRcwFQYJKoZI\nhvcNAQkBFgh0MTlAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDIwQHRlc3QxFzAVBgkq\nhkiG9w0BCQEWCHQyMUB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0MjJAdGVzdDEXMBUG\nCSqGSIb3DQEJARYIdDIzQHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQyNEB0ZXN0MRcw\nFQYJKoZIhvcNAQkBFgh0MjVAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDI2QHRlc3Qx\nFzAVBgkqhkiG9w0BCQEWCHQyN0B0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0MjhAdGVz\ndDEXMBUGCSqGSIb3DQEJARYIdDI5QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQzMEB0\nZXN0MRcwFQYJKoZIhvcNAQkBFgh0MzFAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDMy\nQHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQzM0B0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0\nMzRAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDM1QHRlc3QxFzAVBgkqhkiG9w0BCQEW\nCHQzNkB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0MzdAdGVzdDEXMBUGCSqGSIb3DQEJ\nARYIdDM4QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQzOUB0ZXN0MRcwFQYJKoZIhvcN\nAQkBFgh0NDBAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDQxQHRlc3QxFzAVBgkqhkiG\n9w0BCQEWCHQ0MkB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0NDNAdGVzdDEXMBUGCSqG\nSIb3DQEJARYIdDQ0QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ0NUB0ZXN0MRcwFQYJ\nKoZIhvcNAQkBFgh0NDZAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDQ3QHRlc3QxFzAV\nBgkqhkiG9w0BCQEWCHQ0OEB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0NDlAdGVzdDEX\nMBUGCSqGSIb3DQEJARYIdDUwQHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ1MUB0ZXN0\nMRcwFQYJKoZIhvcNAQkBFgh0NTJAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDUzQHRl\nc3QxFzAVBgkqhkiG9w0BCQEWCHQ1NEB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0NTVA\ndGVzdDEXMBUGCSqGSIb3DQEJARYIdDU2QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ1\nN0B0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0NThAdGVzdDEXMBUGCSqGSIb3DQEJARYI\ndDU5QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ2MEB0ZXN0MRcwFQYJKoZIhvcNAQkB\nFgh0NjFAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDYyQHRlc3QxFzAVBgkqhkiG9w0B\nCQEWCHQ2M0B0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0NjRAdGVzdDEXMBUGCSqGSIb3\nDQEJARYIdDY1QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ2NkB0ZXN0MRcwFQYJKoZI\nhvcNAQkBFgh0NjdAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDY4QHRlc3QxFzAVBgkq\nhkiG9w0BCQEWCHQ2OUB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0NzBAdGVzdDEXMBUG\nCSqGSIb3DQEJARYIdDcxQHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ3MkB0ZXN0MRcw\nFQYJKoZIhvcNAQkBFgh0NzNAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDc0QHRlc3Qx\nFzAVBgkqhkiG9w0BCQEWCHQ3NUB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0NzZAdGVz\ndDEXMBUGCSqGSIb3DQEJARYIdDc3QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ3OEB0\nZXN0MRcwFQYJKoZIhvcNAQkBFgh0NzlAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDgw\nQHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ4MUB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0\nODJAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDgzQHRlc3QxFzAVBgkqhkiG9w0BCQEW\nCHQ4NEB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0ODVAdGVzdDEXMBUGCSqGSIb3DQEJ\nARYIdDg2QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ4N0B0ZXN0MRcwFQYJKoZIhvcN\nAQkBFgh0ODhAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDg5QHRlc3QxFzAVBgkqhkiG\n9w0BCQEWCHQ5MEB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0OTFAdGVzdDEXMBUGCSqG\nSIb3DQEJARYIdDkyQHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ5M0B0ZXN0MRcwFQYJ\nKoZIhvcNAQkBFgh0OTRAdGVzdDEXMBUGCSqGSIb3DQEJARYIdDk1QHRlc3QxFzAV\nBgkqhkiG9w0BCQEWCHQ5NkB0ZXN0MRcwFQYJKoZIhvcNAQkBFgh0OTdAdGVzdDEX\nMBUGCSqGSIb3DQEJARYIdDk4QHRlc3QxFzAVBgkqhkiG9w0BCQEWCHQ5OUB0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0MTAwQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxMDFA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDEwMkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nMTAzQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxMDRAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDEwNUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTA2QHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQxMDdAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDEwOEB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0MTA5QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxMTBAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDExMUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTEyQHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQxMTNAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDEx\nNEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTE1QHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQxMTZAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDExN0B0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0MTE4QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxMTlAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDEyMEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTIxQHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQxMjJAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDEyM0B0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0MTI0QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxMjVA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDEyNkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nMTI3QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxMjhAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDEyOUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTMwQHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQxMzFAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDEzMkB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0MTMzQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxMzRAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDEzNUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTM2QHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQxMzdAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDEz\nOEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTM5QHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQxNDBAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE0MUB0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0MTQyQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxNDNAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDE0NEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTQ1QHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQxNDZAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE0N0B0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0MTQ4QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxNDlA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDE1MEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nMTUxQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxNTJAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDE1M0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTU0QHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQxNTVAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE1NkB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0MTU3QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxNThAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDE1OUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTYwQHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQxNjFAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE2\nMkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTYzQHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQxNjRAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE2NUB0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0MTY2QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxNjdAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDE2OEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTY5QHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQxNzBAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE3MUB0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0MTcyQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxNzNA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDE3NEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nMTc1QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxNzZAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDE3N0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTc4QHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQxNzlAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE4MEB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0MTgxQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxODJAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDE4M0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTg0QHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQxODVAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE4\nNkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTg3QHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQxODhAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE4OUB0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0MTkwQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxOTFAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDE5MkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MTkzQHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQxOTRAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDE5NUB0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0MTk2QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQxOTdA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDE5OEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nMTk5QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyMDBAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDIwMUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjAyQHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQyMDNAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDIwNEB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0MjA1QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyMDZAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDIwN0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjA4QHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQyMDlAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDIx\nMEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjExQHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQyMTJAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDIxM0B0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0MjE0QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyMTVAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDIxNkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjE3QHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQyMThAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDIxOUB0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0MjIwQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyMjFA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDIyMkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nMjIzQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyMjRAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDIyNUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjI2QHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQyMjdAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDIyOEB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0MjI5QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyMzBAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDIzMUB0ZXN0MRgwFgY",
-    "JKoZIhvcNAQkBFgl0MjMyQHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQyMzNAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDIz\nNEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjM1QHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQyMzZAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDIzN0B0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0MjM4QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyMzlAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDI0MEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjQxQHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQyNDJAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDI0M0B0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0MjQ0QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyNDVA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDI0NkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nMjQ3QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyNDhAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDI0OUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjUwQHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQyNTFAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDI1MkB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0MjUzQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyNTRAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDI1NUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjU2QHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQyNTdAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDI1\nOEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjU5QHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQyNjBAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDI2MUB0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0MjYyQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyNjNAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDI2NEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjY1QHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQyNjZAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDI2N0B0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0MjY4QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyNjlA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDI3MEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nMjcxQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyNzJAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDI3M0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0Mjc0QHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQyNzVAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDI3NkB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0Mjc3QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyNzhAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDI3OUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjgwQHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQyODFAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDI4\nMkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MjgzQHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQyODRAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDI4NUB0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0Mjg2QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyODdAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDI4OEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0Mjg5QHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQyOTBAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDI5MUB0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0MjkyQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyOTNA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDI5NEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nMjk1QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQyOTZAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDI5N0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0Mjk4QHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQyOTlAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDMwMEB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0MzAxQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzMDJAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDMwM0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MzA0QHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQzMDVAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDMw\nNkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MzA3QHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQzMDhAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDMwOUB0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0MzEwQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzMTFAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDMxMkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MzEzQHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQzMTRAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDMxNUB0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0MzE2QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzMTdA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDMxOEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nMzE5QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzMjBAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDMyMUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MzIyQHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQzMjNAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDMyNEB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0MzI1QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzMjZAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDMyN0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MzI4QHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQzMjlAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDMz\nMEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MzMxQHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQzMzJAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDMzM0B0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0MzM0QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzMzVAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDMzNkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MzM3QHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQzMzhAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDMzOUB0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0MzQwQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzNDFA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDM0MkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nMzQzQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzNDRAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDM0NUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MzQ2QHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQzNDdAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDM0OEB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0MzQ5QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzNTBAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDM1MUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MzUyQHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQzNTNAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDM1\nNEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MzU1QHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQzNTZAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDM1N0B0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0MzU4QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzNTlAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDM2MEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MzYxQHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQzNjJAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDM2M0B0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0MzY0QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzNjVA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDM2NkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nMzY3QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzNjhAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDM2OUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0MzcwQHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQzNzFAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDM3MkB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0MzczQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzNzRAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDM3NUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0Mzc2QHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQzNzdAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDM3\nOEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0Mzc5QHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQzODBAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDM4MUB0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0MzgyQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzODNAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDM4NEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0Mzg1QHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQzODZAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDM4N0B0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0Mzg4QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzODlA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDM5MEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nMzkxQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzOTJAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDM5M0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0Mzk0QHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQzOTVAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDM5NkB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0Mzk3QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQzOThAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDM5OUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDAwQHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQ0MDFAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQw\nMkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDAzQHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQ0MDRAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQwNUB0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0NDA2QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0MDdAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDQwOEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDA5QHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQ0MTBAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQxMUB0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0NDEyQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0MTNA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDQxNEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nNDE1QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0MTZAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDQxN0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDE4QHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQ0MTlAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQyMEB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0NDIxQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0MjJAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDQyM0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDI0QHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQ0MjVAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQy\nNkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDI3QHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQ0MjhAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQyOUB0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0NDMwQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0MzFAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDQzMkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDMzQHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQ0MzRAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQzNUB0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0NDM2QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0MzdA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDQzOEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nNDM5QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0NDBAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDQ0MUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDQyQHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQ0NDNAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQ0NEB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0NDQ1QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0NDZAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDQ0N0B0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDQ4QHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQ0NDlAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQ1\nMEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDUxQHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQ0NTJAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQ1M0B0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0NDU0QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0NTVAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDQ1NkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDU3QHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQ0NThAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQ1OUB0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0NDYwQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0NjFA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDQ2MkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nNDYzQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0NjRAd",
-    "GVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDQ2NUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDY2QHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQ0NjdAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQ2OEB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0NDY5QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0NzBAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDQ3MUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDcyQHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQ0NzNAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQ3\nNEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDc1QHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQ0NzZAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQ3N0B0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0NDc4QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0NzlAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDQ4MEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDgxQHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQ0ODJAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQ4M0B0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0NDg0QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0ODVA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDQ4NkB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nNDg3QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0ODhAdGVzdDEYMBYGCSqGSIb3DQEJ\nARYJdDQ4OUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDkwQHRlc3QxGDAWBgkqhkiG\n9w0BCQEWCXQ0OTFAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQ5MkB0ZXN0MRgwFgYJ\nKoZIhvcNAQkBFgl0NDkzQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ0OTRAdGVzdDEY\nMBYGCSqGSIb3DQEJARYJdDQ5NUB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDk2QHRl\nc3QxGDAWBgkqhkiG9w0BCQEWCXQ0OTdAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDQ5\nOEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NDk5QHRlc3QxGDAWBgkqhkiG9w0BCQEW\nCXQ1MDBAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDUwMUB0ZXN0MRgwFgYJKoZIhvcN\nAQkBFgl0NTAyQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ1MDNAdGVzdDEYMBYGCSqG\nSIb3DQEJARYJdDUwNEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0NTA1QHRlc3QxGDAW\nBgkqhkiG9w0BCQEWCXQ1MDZAdGVzdDEYMBYGCSqGSIb3DQEJARYJdDUwN0B0ZXN0\nMRgwFgYJKoZIhvcNAQkBFgl0NTA4QHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ1MDlA\ndGVzdDEYMBYGCSqGSIb3DQEJARYJdDUxMEB0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0\nNTExQHRlc3QxGDAWBgkqhkiG9w0BCQEWCXQ1MTJAdGVzdDCCASIwDQYJKoZIhvcN\nAQEBBQADggEPADCCAQoCggEBALoL2oQZEgFBdXwuPb29W75T63JfNJKKdYi6YrmK\nM+EKbcMue/hFrLGQXB6a2eQZFn+j3hmexeQF9T8iWxh2S6rzAr1Yj+qXeDBaMf4o\nBEiEhBxIsaIlws3qQa4baeVEEoxw+A+ISrYHTIFcV/i0bcIFt5p7v7wbu686a/w0\nvIqPfad5amdQJMvmjZXDI+jGMvFPmBRHr2/1dJUWPaKsJluwR514pJv74urIyEt+\ndFPM2/5kc2HiLNkeuS1Hbky+dPlDIGrfaHHsCNnb/GjvQ6YfvDXRrYPCxWMk0x3F\nMSaDK9T0zoJ5hE9fViR+D6xcJO2RNUCUENS+Iipj3kIrLbkCAwEAAaNJMEcwDgYD\nVR0PAQH/BAQDAgWgMBMGA1UdJQQMMAoGCCsGAQUFBwMBMAwGA1UdEwEB/wQCMAAw\nEgYDVR0RBAswCYIHdDAudGVzdDANBgkqhkiG9w0BAQsFAAOCAQEAQA/0vvY1gLA2\n0jrPkBVWte7OHzWVkwq7mqgQPR4L9qLLu7Vhelp4dW8n95s1wCbca5j5SJEGv4Uv\n0fI1OOK7XQeYdNlHBmvMVW47GoBSo6tuYNPI/y4xnM6ypEZiPKkdj9Ar9qNgURfV\nz3s1czip915dyTWgwBy7CTxOlG8NW0uiFgEc9iiDDfQsPwVXiVtxOPtjhPeI3F0J\njh3wctFxBnAvLV9SsDxpWujM1dd/1SSQ25jKQhbKNtiDAC8v+Q043r8ZGHjRdxe8\nW2tVWH/iz9c+ze0P0ao7LKv8eGzoIsrBqICS86X4Zv5lGeTGaD2osF1oNvmmoSlh\n536yFa415g==\n-----END CERTIFICATE-----\n",
-};
-static const size_t kLen56 = 66001;
-
-static const char *kData56[] = {
     "# Imported from Wycheproof's aes_cbc_pkcs5_test.json.\n# This file is generated by convert_wycheproof.go. Do not edit by hand.\n#\n# Algorithm: AES-CBC-PKCS5\n# Generator version: 0.4.12\n\n[ivSize = 128]\n[keySize = 128]\n\n# tcId = 1\n# empty message\nct = b10ab60153276941361000414aed0a9d\niv = da9520f7d3520277035173299388bee2\nkey = e34f15c7bd819930fe9d66e0c166e61c\nmsg = \nresult = valid\n\n# tcId = 2\n# message size divisible by block size\nct = d1fa697f3e2e04d64f1a0da203813ca5bc226a0b1d42287b2a5b994a66eaf14a\niv = c9ee3cd746bf208c65ca9e72a266d54f\nkey = e09eaa5a3f5e56d279d5e7a03373f6ea\nmsg = ef4eab37181f98423e53e947e7050fd0\nresult = valid\n\n# tcId = 3\n# message size divisible by block size\nct = 514cbc69aced506926deacdeb0cc0a5a07d540f65d825b65c7db0075cf930a06e0124ae598461cab0b3251baa853e377\niv = 8b2e86a9a185cfa6f51c7cc595b822bc\nkey = 9bd3902ed0996c869b572272e76f3889\nmsg = a7ba19d49ee1ea02f098aa8e30c740d893a4456ccc294040484ed8a00a55f93e\nresult = valid\n\n# tcId = 4\n# message size divisible by block size\nct = 137c824d7f7dc36f24216dde37c2e1c10cee533f6453de92e44b898fc3037d2e9e19d67a96387136dd9717a56e28614a5c177158f402ce2936fd98d1feb6a817\niv = 2717d10eb2eea3b39ec257e43307a260\nkey = 75ce184447cada672e02290310d224f7\nmsg = c774810a31a6421ad8eaafd5c22fa2455e2c167fee4a0b73ff927b2d96c69da1e939407b86b1c19bcfc69c434c3cf8a2\nresult = valid\n\n# tcId = 5\n# small plaintext size\nct = 599d77aca16910b42d8b4ac9560efe1b\niv = 155fd397579b0b5d991d42607f2cc9ad\nkey = e1e726677f4893890f8c027f9d8ef80d\nmsg = 3f\nresult = valid\n\n# tcId = 6\n# small plaintext size\nct = 74e20bf03a0ad4b49edc86a1b19c3d1d\niv = 4eb836be6808db264cb1111a3283b394\nkey = b151f491c4c006d1f28214aa3da9a985\nmsg = 27d9\nresult = valid\n\n# tcId = 7\n# small plaintext size\nct = 3f7a26558ba51cf352219d34c46907ae\niv = a8446c27ea9068d8d924d5c4eac91157\nkey = c36ff15f72777ee21deec07b63c1a0cd\nmsg = 50b428\nresult = valid\n\n# tcId = 8\n# small plaintext size\nct = c29d1463baccc558fd720c897da5bb98\niv = ef026d27da3702d7bb72e5e364a8f8f2\nkey = 32b9c5c78c3a0689a86052420fa1e8fc\nmsg = 0b9262ec\nresult = valid\n\n# tcId = 9\n# small plaintext size\nct = e24a717914f9cc8eaa1dc96f7840d6af\niv = c9defd3929dcd6c355c144e9750dd869\nkey = 43151bbaef367277ebfc97509d0aa49c\nmsg = eaa91273e7\nresult = valid\n\n# tcId = 10\n# small plaintext size\nct = f080e487f4e5b7aed793ea95ffe4bb30\niv = ce91e0454b0123f1ead0f158826459e9\nkey = 481440298525cc261f8159159aedf62d\nmsg = 6123c556c5cc\nresult = valid\n\n# tcId = 11\n# small plaintext size\nct = 27cadee413ed901f51c9366d731d95f6\niv = 1cb7bc8fe00523e7743d3cd9f483d6fe\nkey = 9ca26eb88731efbf7f810d5d95e196ac\nmsg = 7e48f06183aa40\nresult = valid\n\n# tcId = 12\n# small plaintext size\nct = 59bf12427b51a3aee0c9d3c540d04d24\niv = a345f084229dbfe0ceab6c6939571532\nkey = 48f0d03e41cc55c4b58f737b5acdea32\nmsg = f4a133aa6d5985a0\nresult = valid\n\n# tcId = 13\n# small plaintext size\nct = 1a0a18355f8ca4e6e2cf31da18d070da\niv = e5b6f73f132355b7be7d977bea068dfc\nkey = 1c958849f31996b28939ce513087d1be\nmsg = b0d2fee11b8e2f86b7\nresult = valid\n\n# tcId = 14\n# small plaintext size\nct = cef498ea61715a27f400418d1d5bfbf0\niv = c7cd10ca949ea03e7d4ba204b69e09b8\nkey = 39de0ebea97c09b2301a90009a423253\nmsg = 81e5c33b4c620852f044\nresult = valid\n\n# tcId = 15\n# small plaintext size\nct = 7ab43ddc45835ce40d2280bcea6a63f2\niv = bb8c9af30821dfeb7124392a554d9f01\nkey = 91656d8fc0aced60ddb1c4006d0dde53\nmsg = 7b3e440fe566790064b2ec\nresult = valid\n\n# tcId = 16\n# small plaintext size\nct = c70b457c945ad40895cf4c8be3ce7c66\niv = 54c3b90ca6e933f9094334d0263d3775\nkey = af7d5134720b5386158d51ea126e7cf9\nmsg = 7cc6fcc925c20f3c83b5567c\nresult = valid\n\n# tcId = 17\n# small plaintext size\nct = f9900afee2acfe63f8f15d81bbf64c39\niv = 9a2c5e91d4f0b9b9da64b46c5c2c8cb2\nkey = 4ed56753de6f75a032ebabca3ce27971\nmsg = 0c8c0f5619d9f8da5339281285\nresult = valid\n\n# tcId = 18\n# small plaintext size\nct = da4137bd8ac78e75a700b3de806f2d6f\niv = cf7951501104e1434309e6b936ec1742\nkey = beba50c936b696c15e25046dffb23a64\nmsg = 821ea8532fbabffb6e3d212e9b46\nresult = valid\n\n# tcId = 19\n# small plaintext size\nct = fed05321d11d978e2ec32527ecfce06c\niv = 90f5cf4fbfd2e2a1ab8eef402617bd5c\nkey = 501d81ebf912ddb87fbe3b7aac1437bc\nmsg = 2368e3c3636b5e8e94d2081adbf798\nresult = valid\n\n# tcId = 20\n# plaintext size > 16\nct = 8d55dc10584e243f55d2bdbb5758b7fabcd58c8d3785f01c7e3640b2a1dadcd9\niv = 54f2459e40e002763144f4752cde2fb5\nkey = 831e664c9e3f0c3094c0b27b9d908eb2\nmsg = 26603bb76dd0a0180791c4ed4d3b058807\nresult = valid\n\n# tcId = 21\n# plaintext size > 16\nct = e9199842355ea0c3dbf1b2a94fef1c802a95d024df9e407883cf5bf1f02c3cdc\niv = 088e01c2c65b26e7ad6af7b92ea09d73\nkey = cbffc6c8c7f76f46349c32d666f4efb0\nmsg = 6df067add738195fd55ac2e76b476971b9a0e6d8\nresult = valid\n\n# tcId = 22\n# plaintext size > 16\nct = 19beb4db2be0f3aff0083583038b2281a77c85b5f345ba4d2bc7f742a14f9247\niv = d9c9468796a2f5741b84d2d41430c5d3\nkey = fda6a01194beb462953d7e6c49b32dac\nmsg = f60ae3b036abcab78c98fc1d4b67970c0955cb6fe24483f8907fd73319679b\nresult = valid\n\n# tcId = 23\n# plaintext size > 16\nct = 84904fc92bd2e7590aa268e667370327b9446f41067dd40d3e5091a63a0d5687e4926e00cc3cb461c3b85d80ee2da818\niv = c98b47808add45c0c891983ec4b09846\nkey = efd9caa8ac68e9e29acdae57e93bcea8\nmsg = 3e1d2001f1e475b972738936443a5f51eedaf802a66fadf2406cfaadb0549149fcb9f485e534dc2d\nresult = valid\n\n# tcId = 24\n# plaintext size > 16\nct = 1d1391593a336be4b207295ad0542bc4ef2f39053066e12c38f71603f377fd42f4f0b2b5a42cdfeaee2af039f06fcf347abe171af3157ff07f3cdd3b33e11a60caecf9890325c132eeb66ab847278d165c26bca7c30486bb2fd83b63c5ff7ae0\niv = 08e9410de244d3f40607ebae38fa74e7\nkey = 37e4dbdc436258d5a9adb9f205c77cf3\nmsg = 24a874aec067116ad22eb55846ded3f5e86919a135585c929a86d92b2958fed110e52e33804887243584a6a94402cc9a105e0c940ec335bd2890f16dcce3fc8bd02873c80ade6f1ac08683130bcca454\nresult = valid\n\n# tcId = 25\n# zero padding\nct = aa62606a287476777b92d8e4c4e53028\niv = 23468aa734f5f0f19827316ff168e94f\nkey = db4f3e5e3795cc09a073fa6a81e5a6bc\nmsg = \nresult = invalid\n# The ciphertext in this test vector is the message encrypted with an invalid or\n# unexpected padding. This allows to find implementations that are not properly\n# checking the padding during decryption.\n\n# tcId = 26\n# zero padding\nct = ada437b682c92384b6c23ec10a21b3d8\niv = 23468aa734f5f0f19827316ff168e94f\nkey = db4f3e5e3795cc09a073fa6a81e5a6bc\nmsg = 6162636465666768\nresult = invalid\n# The ciphertext in this test vector is the message encrypted with an invalid or\n# unexpected padding. This allows to find implementations that are not properly\n# checking the padding during decryption.\n\n# tcId = 27\n# zero padding\nct = 26c5b3e540ee3dd6b52d14afd01a44f8\niv = 23468aa734f5f0f19827316ff168e94f\nkey = db4f3e5e3795cc09a073fa6a81e5a6bc\nmsg = 303132333435363738396162636465\nresult = invalid\n# The ciphertext in this test vector is the message encrypted with an invalid or\n# unexpected padding. This allows to find implementations that are not properly\n# checking the padding during decryption.\n\n# tcId = 28\n# zero padding\nct = fbcbdfdaaf17980be939c0b243266ecbc0deb417e98aba3ee12fea2921f8ae51\niv = 23468aa734f5f0f19827316ff168e94f\nkey = db4f3e5e3795cc09a073fa6a81e5a6bc\nmsg = 30313233343536373839414243444546\nresult = invalid\n# The ciphertext in this test vector is the message encrypted with an invalid or\n# unexpected padding. This allows to find implementations that are not properly\n# checking the padding during decryption.\n\n# tcId = 29\n# zero padding\nct = fbcbdfdaaf17980be939c0b243266ecb1188ff22f6563f6173440547d1e0dfd8\niv = 23468aa734f5f0f19827316ff168e94f\nkey = db4f3e5e3795cc09a073fa6a81e5a6bc\nmsg = 3031323334353637383941424344454647\nresult = invalid\n# The ciphertext in this test vector is the message encrypted with an invalid or\n# unexpected padding. This allows to find implementations that are not properly\n# checking the padding during decryption.\n\n# tcId = 30\n# padding with 0xff\nct = 726570a34cea08139d9f836579102a0e\niv = 23468aa734f5f0f19827316ff168e94f\nkey = db4f3e5e3795cc09a073fa6a81e5a6bc\nmsg = \nresult = invalid\n# The ciphertext in this test vector is the message encrypted with an invalid or\n# unexpected padding. This allows to find implementations that are not properly\n# checking the padding during decryption.\n\n# tcId = 31\n# padding with 0xff\nct = c8ef7ac3fd659ce7157d72a25f0a5048\niv = 2",
     "3468aa734f5f0f19827316ff168e94f\nkey = db4f3e5e3795cc09a073fa6a81e5a6bc\nmsg = 6162636465666768\nresult = invalid\n# The ciphertext in this test vector is the message encrypted with an invalid or\n# unexpected padding. This allows to find implementations that are not properly\n# checking the padding during decryption.\n\n# tcId = 32\n# padding with 0xff\nct = 6123c889bbc766acd4bca4cb982f9978\niv = 23468aa734f5f0f19827316ff168e94f\nkey = db4f3e5e3795cc09a073fa6a81e5a6bc\nmsg = 303132333435363738396162636465\nresult = invalid\n# The ciphertext in this test vector is the message encrypted with an invalid or\n# unexpected padding. This allows to find implementations that are not properly\n# checking the padding during decryption.\n\n# tcId = 33\n# padding with 0xff\nct = fbcbdfdaaf17980be939c0b243266ecb442cd16f7410fca70924b573f7967e84\niv = 23468aa734f5f0f19827316ff168e94f\nkey = db4f3e5e3795cc09a073fa6a81e5a6bc\nmsg = 30313233343536373839414243444546\nresult = invalid\n# The ciphertext in this test vector is the message encrypted with an invalid or\n# unexpected padding. This allows to find implementations that are not properly\n# checking the padding during decryption.\n\n# tcId = 34\n# padding with 0xff\nct = fbcbdfdaaf17980be939c0b243266ecbb20f899b0e7c1d65b931af94b5c44c25\niv = 23468aa734f5f0f19827316ff168e94f\nkey = db4f3e5e3795cc09a073fa6a81e5a6bc\nmsg = 3031323334353637383941424344454647\nresult = invalid\n# The ciphertext in this test vector is the message encrypted with an invalid or\n# unexpected padding. This allows to find implementations that are not properly\n# checking the padding during decryption.\n\n# tcId = 35\n# bit padding\nct = 50aeed98a820c5a037a5aa4d4ef3090b\niv = 23468aa734f5f0f19827316ff168e94f\nkey = db4f3e5e3795cc09a073fa6a81e5a6bc\nmsg = \nresult = invalid\n# The ciphertext in this test vector is the message encrypted with an invalid or\n# unexpected padding. This allows to find implementations that are not properly\n# checking the padding during decryption.\n\n# tcId = 36\n# bit padding\nct = 25ee339006f948f42713543c62467ef9\niv = 23468aa734f5f0f19827316ff168e94f\nkey = db4f3e5e3795cc09a073fa6a81e5a6bc\nmsg = 6162636465666768\nresult = invalid\n# The ciphertext in this test vector is the message encrypted with an invalid or\n# unexpected padding. This allows to find implementations that are not properly\n# checking the padding during decryption.\n\n# tcId = 37\n# bit padding\nct = 97914574676ed5b8db0b6f3931195b3f\niv = 23468aa734f5f0f19827316ff168e94f\nkey = db4f3e5e3795cc09a073fa6a81e5a6bc\nmsg = 303132333435363738396162636465\nresult = invalid\n# The ciphertext in this test vector is the message encrypted with an invalid or\n# unexpected padding. This allows to find implementations that are not properly\n# checking the padding during decryption.\n\n# tcId = 38\n# bit padding\nct = fbcbdfdaaf17980be939c0b243266ecb2874a1e2d28dd18e5573df9fd59fd789\niv = 23468aa734f5f0f19827316ff168e94f\nkey = db4f3e5e3795cc09a073fa6a81e5a6bc\nmsg = 30313233343536373839414243444546\nresult = invalid\n# The ciphertext in this test vector is the message encrypted with an invalid or\n# unexpected padding. This allows to find implementations that are not properly\n# checking the padding during decryption.\n\n# tcId = 39\n# bit padding\nct = fbcbdfdaaf17980be939c0b243266ecbb547c4fddbdcd3e02f438a2e48587594\niv = 23468aa734f5f0f19827316ff168e94f\nkey = db4f3e5e3795cc09a073fa6a81e5a6bc\nmsg = 3031323334353637383941424344454647\nresult = invalid\n# The ciphertext in this test vector is the message encrypted with an invalid or\n# unexpected padding. This allows to find implementations that are not properly\n# checking the padding during decryption.\n\n# tcId = 40\n# padding longer than 1 block\nct = d17ccbb26f0aa95f397b20063547349bac24c5429cbea591e96595cccc11451b\niv = 23468aa734f5f0f19827316ff168e94f\nkey = db4f3e5e3795cc09a073fa6a81e5a6bc\nmsg = \nresult = invalid\n# The ciphertext in this test vector is the message encrypted with an invalid or\n# unexpected padding. This allows to find implementations that are not properly\n# checking the padding during decryption.\n\n# tcId = 41\n# padding longer than 1 block\nct = fc07025e81d43efa85f92afdf8781b1e88598e12d6812df43733e93414b9e901\niv = 23468aa734f5f0f19827316ff168e94f\nkey = db4f3e5e3795cc09a073fa6a81e5a6bc\nmsg = 6162636465666768\nresult = invalid\n# The ciphertext in this test vector is the message encrypted with an invalid or\n# unexpected padding. This allows to find implementations that are not properly\n# checking the padding during decryption.\n\n# tcId = 42\n# padding longer than 1 block\nct = deb1746f4e9e0be4a21825b071b6e93303031651e0c59091e2ae0fbcce11b987\niv = 23468aa734f5f0f19827316ff168e94f\nkey = db4f3e5e3795cc09a073fa6a81e5a6bc\nmsg = 303132333435363738396162636465\nresult = invalid\n# The ciphertext in this test vector is the message encrypted with an invalid or\n# unexpected padding. This allows to find implementations that are not properly\n# checking the padding during decryption.\n\n# tcId = 43\n# padding longer than 1 block\nct = fbcbdfdaaf17980be939c0b243266ecb563d35096fde10ccb6f768438c9eb4ec90f399b76924c716e9f94143263306c6\niv = 23468aa734f5f0f19827316ff168e94f\nkey = db4f3e5e3795cc09a073fa6a81e5a6bc\nmsg = 30313233343536373839414243444546\nresult = invalid\n# The ciphertext in this test vector is the message encrypted with an invalid or\n# unexpected padding. This allows to find implementations that are not properly\n# checking the padding during decryption.\n\n# tcId = 44\n# padding longer than 1 block\nct = fbcbdfdaaf17980be939c0b243266ecbc8fd2e2c5362acf5212bd47859aa827d8469b87b0e6adafe3dba98c1885b6345\niv = 23468aa734f5f0f19827316ff168e94f\nkey = db4f3e5e3795cc09a073fa6a81e5a6bc\nmsg = 3031323334353637383941424344454647\nresult = invalid\n# The ciphertext in this test vector is the message encrypted with an invalid or\n# unexpected padding. This allows to find implementations that are not properly\n# checking the padding during decryption.\n\n# tcId = 45\n# ANSI X.923 padding\nct = ca5dd2d09bd56eec9e8acaeca20af68e\niv = 23468aa734f5f0f19827316ff168e94f\nkey = db4f3e5e3795cc09a073fa6a81e5a6bc\nmsg = \nresult = invalid\n# The ciphertext in this test vector is the message encrypted with an invalid or\n# unexpected padding. This allows to find implementations that are not properly\n# checking the padding during decryption.\n\n# tcId = 46\n# ANSI X.923 padding\nct = 01e53a5ec9b0957c45f79ed0f4b2b982\niv = 23468aa734f5f0f19827316ff168e94f\nkey = db4f3e5e3795cc09a073fa6a81e5a6bc\nmsg = 6162636465666768\nresult = invalid\n# The ciphertext in this test vector is the message encrypted with an invalid or\n# unexpected padding. This allows to find implementations that are not properly\n# checking the padding during decryption.\n\n# tcId = 47\n# ANSI X.923 padding\nct = fbcbdfdaaf17980be939c0b243266ecbd3909bb3457e5b946ff709be9a2ed84d\niv = 23468aa734f5f0f19827316ff168e94f\nkey = db4f3e5e3795cc09a073fa6a81e5a6bc\nmsg = 30313233343536373839414243444546\nresult = invalid\n# The ciphertext in this test vector is the message encrypted with an invalid or\n# unexpected padding. This allows to find implementations that are not properly\n# checking the padding during decryption.\n\n# tcId = 48\n# ANSI X.923 padding\nct = fbcbdfdaaf17980be939c0b243266ecbc5ab3ab637166a6a067b82b5672c08f8\niv = 23468aa734f5f0f19827316ff168e94f\nkey = db4f3e5e3795cc09a073fa6a81e5a6bc\nmsg = 3031323334353637383941424344454647\nresult = invalid\n# The ciphertext in this test vector is the message encrypted with an invalid or\n# unexpected padding. This allows to find implementations that are not properly\n# checking the padding during decryption.\n\n# tcId = 49\n# ISO 10126 padding\nct = ba0726bd6dea11382b19c842e2ddead2\niv = 23468aa734f5f0f19827316ff168e94f\nkey = db4f3e5e3795cc09a073fa6a81e5a6bc\nmsg = \nresult = invalid\n# The ciphertext in this test vector is the message encrypted with an invalid or\n# unexpected padding. This allows to find implementations that are not properly\n# checking the padding during decryption.\n\n# tcId = 50\n# ISO 10126 padding\nct = 22f18b85c729903744fb8db5ed2840d4\niv = 23468aa734f5f0f19827316ff168e94f\nkey = db4f3e5e3795cc09a073fa6a81e5a6bc\nmsg = 6162636465666768\nresult = invalid\n# The ciphertext in this test vector is the message encrypted with an invalid or\n# unexpected padd",
     "ing. This allows to find implementations that are not properly\n# checking the padding during decryption.\n\n# tcId = 51\n# ISO 10126 padding\nct = fbcbdfdaaf17980be939c0b243266ecb6b103fbe43519a18880b7e6d9153e1c2\niv = 23468aa734f5f0f19827316ff168e94f\nkey = db4f3e5e3795cc09a073fa6a81e5a6bc\nmsg = 30313233343536373839414243444546\nresult = invalid\n# The ciphertext in this test vector is the message encrypted with an invalid or\n# unexpected padding. This allows to find implementations that are not properly\n# checking the padding during decryption.\n\n# tcId = 52\n# ISO 10126 padding\nct = fbcbdfdaaf17980be939c0b243266ecbe00bdb15b8a61285447498700d35e0c6\niv = 23468aa734f5f0f19827316ff168e94f\nkey = db4f3e5e3795cc09a073fa6a81e5a6bc\nmsg = 3031323334353637383941424344454647\nresult = invalid\n# The ciphertext in this test vector is the message encrypted with an invalid or\n# unexpected padding. This allows to find implementations that are not properly\n# checking the padding during decryption.\n\n# tcId = 53\n# padding longer than message\nct = d17ccbb26f0aa95f397b20063547349b\niv = 23468aa734f5f0f19827316ff168e94f\nkey = db4f3e5e3795cc09a073fa6a81e5a6bc\nmsg = \nresult = invalid\n# The ciphertext in this test vector is the message encrypted with an invalid or\n# unexpected padding. This allows to find implementations that are not properly\n# checking the padding during decryption.\n\n# tcId = 54\n# padding longer than message\nct = 2056dfa339fa00be6836999411a98c76\niv = 23468aa734f5f0f19827316ff168e94f\nkey = db4f3e5e3795cc09a073fa6a81e5a6bc\nmsg = 6162636465666768\nresult = invalid\n# The ciphertext in this test vector is the message encrypted with an invalid or\n# unexpected padding. This allows to find implementations that are not properly\n# checking the padding during decryption.\n\n# tcId = 55\n# padding longer than message\nct = f92628f6418d8d9c9afac233861b3835\niv = 23468aa734f5f0f19827316ff168e94f\nkey = db4f3e5e3795cc09a073fa6a81e5a6bc\nmsg = 303132333435363738396162636465\nresult = invalid\n# The ciphertext in this test vector is the message encrypted with an invalid or\n# unexpected padding. This allows to find implementations that are not properly\n# checking the padding during decryption.\n\n# tcId = 56\n# padding longer than message\nct = fbcbdfdaaf17980be939c0b243266ecbc0c41093b495a7d5a080d976493fd0e7\niv = 23468aa734f5f0f19827316ff168e94f\nkey = db4f3e5e3795cc09a073fa6a81e5a6bc\nmsg = 30313233343536373839414243444546\nresult = invalid\n# The ciphertext in this test vector is the message encrypted with an invalid or\n# unexpected padding. This allows to find implementations that are not properly\n# checking the padding during decryption.\n\n# tcId = 57\n# padding longer than message\nct = fbcbdfdaaf17980be939c0b243266ecb6770446a5ccaa26f7d4f970cc5834eba\niv = 23468aa734f5f0f19827316ff168e94f\nkey = db4f3e5e3795cc09a073fa6a81e5a6bc\nmsg = 3031323334353637383941424344454647\nresult = invalid\n# The ciphertext in this test vector is the message encrypted with an invalid or\n# unexpected padding. This allows to find implementations that are not properly\n# checking the padding during decryption.\n\n# tcId = 58\n#  invalid padding\nct = 4ff3e623fdd432608c183f40864177af\niv = 23468aa734f5f0f19827316ff168e94f\nkey = db4f3e5e3795cc09a073fa6a81e5a6bc\nmsg = \nresult = invalid\n# The ciphertext in this test vector is the message encrypted with an invalid or\n# unexpected padding. This allows to find implementations that are not properly\n# checking the padding during decryption.\n\n# tcId = 59\n#  invalid padding\nct = 6a1ef1e6ae6a788777aabd9ccf3cf43a\niv = 23468aa734f5f0f19827316ff168e94f\nkey = db4f3e5e3795cc09a073fa6a81e5a6bc\nmsg = 6162636465666768\nresult = invalid\n# The ciphertext in this test vector is the message encrypted with an invalid or\n# unexpected padding. This allows to find implementations that are not properly\n# checking the padding during decryption.\n\n# tcId = 60\n#  invalid padding\nct = fbcbdfdaaf17980be939c0b243266ecbee1345cd513161b241f4ae2799b0327f\niv = 23468aa734f5f0f19827316ff168e94f\nkey = db4f3e5e3795cc09a073fa6a81e5a6bc\nmsg = 30313233343536373839414243444546\nresult = invalid\n# The ciphertext in this test vector is the message encrypted with an invalid or\n# unexpected padding. This allows to find implementations that are not properly\n# checking the padding during decryption.\n\n# tcId = 61\n#  invalid padding\nct = fbcbdfdaaf17980be939c0b243266ecbe0d539beef6f2d4f7cda4fd9f4f05570\niv = 23468aa734f5f0f19827316ff168e94f\nkey = db4f3e5e3795cc09a073fa6a81e5a6bc\nmsg = 3031323334353637383941424344454647\nresult = invalid\n# The ciphertext in this test vector is the message encrypted with an invalid or\n# unexpected padding. This allows to find implementations that are not properly\n# checking the padding during decryption.\n\n[ivSize = 128]\n[keySize = 192]\n\n# tcId = 62\n# empty message\nct = ff0c315873b4b1872abef2353b792ef0\niv = db20f9a6f4d6b4e478f1a4b9d4051d34\nkey = 3d6bf9edae6d881eade0ff8c7076a4835b71320c1f36b631\nmsg = \nresult = valid\n\n# tcId = 63\n# message size divisible by block size\nct = 7dbd573e4db58a318edfe29f199d8cda538a49f36486337c2711163e55fd5d0b\niv = 69a76dc4da64d89c580eb75ae975ec39\nkey = f4bfa5aa4f0f4d62cf736cd2969c43d580fdb92f2753bedb\nmsg = 0e239f239705b282ce2200fe20de1165\nresult = valid\n\n# tcId = 64\n# message size divisible by block size\nct = bd0258909e5b72438d95ca4b29c8a79c6228fd06a3b2fa06f7659654c7b24610f23f2fb16313b7d3614cb0cd16fabb8e\niv = 6525667350930fb945dd1895a3abfcd1\nkey = 9d11abc1fcb248a436598e695be12c3c2ed90a18ba09d62c\nmsg = aa5182cae2a8fb068c0b3fb2be3e57ae523d13dffd1a944587707c2b67447f3f\nresult = valid\n\n# tcId = 65\n# message size divisible by block size\nct = 6cbeacf8de25d7dd9dcdc087bf2f80873b1eb335400589076f8d2bf81e294c5d72b85eb8ac9558b0de9e9fbee4b18716e5220c507fbb9d319a08f67816765ca6\niv = 3943d8fddd5bb2a59772df31a31a8fff\nkey = 7e41d83181659a2c38da5ead353cdb04c2b4d4a3cfe58e25\nmsg = 8a32d11c7a11aa72e13381632b1310f4fd90fc209a6a350e61c069a561871214f9c04fc1df7354cbe4d8d639c525d324\nresult = valid\n\n# tcId = 66\n# small plaintext size\nct = 519925956d32e4fa350b1144f088e4e8\niv = 1379d48493f743e6a149deb3b9bab31e\nkey = 915429743435c28997a33b33b6574a953d81dae0e7032e6a\nmsg = 58\nresult = valid\n\n# tcId = 67\n# small plaintext size\nct = bfb90aa7de1bdeed5bdc5703bdfd9630\niv = 48c7f44b43a1279d820733e6cb30617a\nkey = f0c288ba26b284f9fb321b444a6517b3cdda1a799d55fdff\nmsg = 0f7e\nresult = valid\n\n# tcId = 68\n# small plaintext size\nct = b1a25816908c086f26037d10b7be9ad9\niv = 2c287b38cc30c8c351b087b91a6a97ba\nkey = 6b55e4d4fd6847a80a6bfb0dcc0aa93f9fd797fc5c50292e\nmsg = 33f530\nresult = valid\n\n# tcId = 69\n# small plaintext size\nct = 74dbdecbfa94b71d2d6ef03200c7d095\niv = 61f6060919c9c09ef06be28f39c344aa\nkey = 1eb21a9e995a8e45c9e71ecbd6fe615b3e0318007c64b644\nmsg = 3aa73c48\nresult = valid\n\n# tcId = 70\n# small plaintext size\nct = 10c860aaee23c3c3c1b9306b189dd80d\niv = 7682005907bfef3ce00196a17ad2246d\nkey = 710e2d5d4a9f0bc7e50796655e046a18cc5769d7764355da\nmsg = 7e4c690a88\nresult = valid\n\n# tcId = 71\n# small plaintext size\nct = 673dcd444386930a0cc577fab4501e5c\niv = 1f6c912997ce007701e5fdf407c6b421\nkey = d8c09ea400779b63e774bdacd0cb7b5dd6f736ca23d52acf\nmsg = e9520280973b\nresult = valid\n\n# tcId = 72\n# small plaintext size\nct = 059e5f72a81d8820add8eae8fabcdd42\niv = 5854033ae50de090678432781a168b6c\nkey = 8e67e9a0863b55bed408866f1cbc05357abe3f9d79f406f2\nmsg = 4880b412287a0b\nresult = valid\n\n# tcId = 73\n# small plaintext size\nct = c412159fd5ae20d771b7d2e734124d6a\niv = 003b2d86d8b636c58cf664565572d5e6\nkey = 28d8da67806410e5565bcc5a9d7ab9fb357413fa0158378c\nmsg = 004e3f4a4e6db955\nresult = valid\n\n# tcId = 74\n# small plaintext size\nct = 4aba571c2c5ab9a6140f16efc68c8ec1\niv = 3f22b50f888ab9424ba871d15aac55b7\nkey = dc968dd89fd602bb7eca6f3a8a13e4f59c08d02a514b1934\nmsg = 41a25354efeb1bc3b8\nresult = valid\n\n# tcId = 75\n# small plaintext size\nct = 66d1b9152a8cd1a88eab341c775070b4\niv = e4b8dde04b49fa6b88bfccd8d70c21d1\nkey = 7658951c0f620d82afd92756cc2d7983b79da3e56fdd1b78\nmsg = f0e82fb5c5666f4af49f\nresult = valid\n\n# tcId = 76\n# small plaintext size\nct = d9377788e2881a48f9347786db7df51f\niv = 7753f616cd8796c9b8a3bbfbe6cb1e7f\nkey = d9574c3a221b986690931faac5258d9d3c52362b2cb9b054\nmsg = 178ea8404ba54ee4e4522c\nresult = valid\n\n# tcId = 77\n# small plaintext size\nct =",
@@ -2834,9 +2815,9 @@
     "adding during decryption.\n\n# tcId = 165\n# padding longer than 1 block\nct = 8881e9e02fa9e3037b397957ba1fb7cec0f74a1aa92fd9c96f9d15d193d1695c1eb33486e269277612f90f509f0535c2\niv = f010f61c31c9aa8fa0d5be5f6b0f2f70\nkey = 7c78f34dbce8f0557d43630266f59babd1cb92ba624bd1a8f45a2a91c84a804a\nmsg = 30313233343536373839414243444546\nresult = invalid\n# The ciphertext in this test vector is the message encrypted with an invalid or\n# unexpected padding. This allows to find implementations that are not properly\n# checking the padding during decryption.\n\n# tcId = 166\n# padding longer than 1 block\nct = 8881e9e02fa9e3037b397957ba1fb7ce151ade309ec5200bacdd83b57ce794cd2b3bf9f8957def829e8465f7db266f9e\niv = f010f61c31c9aa8fa0d5be5f6b0f2f70\nkey = 7c78f34dbce8f0557d43630266f59babd1cb92ba624bd1a8f45a2a91c84a804a\nmsg = 3031323334353637383941424344454647\nresult = invalid\n# The ciphertext in this test vector is the message encrypted with an invalid or\n# unexpected padding. This allows to find implementations that are not properly\n# checking the padding during decryption.\n\n# tcId = 167\n# ANSI X.923 padding\nct = fb38cbef13f1d5be9c0ac7ed9cbe023c\niv = f010f61c31c9aa8fa0d5be5f6b0f2f70\nkey = 7c78f34dbce8f0557d43630266f59babd1cb92ba624bd1a8f45a2a91c84a804a\nmsg = \nresult = invalid\n# The ciphertext in this test vector is the message encrypted with an invalid or\n# unexpected padding. This allows to find implementations that are not properly\n# checking the padding during decryption.\n\n# tcId = 168\n# ANSI X.923 padding\nct = 18cf8988abe9a2463a3a75db1fac8bcc\niv = f010f61c31c9aa8fa0d5be5f6b0f2f70\nkey = 7c78f34dbce8f0557d43630266f59babd1cb92ba624bd1a8f45a2a91c84a804a\nmsg = 6162636465666768\nresult = invalid\n# The ciphertext in this test vector is the message encrypted with an invalid or\n# unexpected padding. This allows to find implementations that are not properly\n# checking the padding during decryption.\n\n# tcId = 169\n# ANSI X.923 padding\nct = 8881e9e02fa9e3037b397957ba1fb7cee16d6fc4b4d3cdf6f915996e437fd4cc\niv = f010f61c31c9aa8fa0d5be5f6b0f2f70\nkey = 7c78f34dbce8f0557d43630266f59babd1cb92ba624bd1a8f45a2a91c84a804a\nmsg = 30313233343536373839414243444546\nresult = invalid\n# The ciphertext in this test vector is the message encrypted with an invalid or\n# unexpected padding. This allows to find implementations that are not properly\n# checking the padding during decryption.\n\n# tcId = 170\n# ANSI X.923 padding\nct = 8881e9e02fa9e3037b397957ba1fb7cea8f41f61ead6e9936cbe7ee5a1163b9b\niv = f010f61c31c9aa8fa0d5be5f6b0f2f70\nkey = 7c78f34dbce8f0557d43630266f59babd1cb92ba624bd1a8f45a2a91c84a804a\nmsg = 3031323334353637383941424344454647\nresult = invalid\n# The ciphertext in this test vector is the message encrypted with an invalid or\n# unexpected padding. This allows to find implementations that are not properly\n# checking the padding during decryption.\n\n# tcId = 171\n# ISO 10126 padding\nct = a05c14da0109093c195b4998812fe150\niv = f010f61c31c9aa8fa0d5be5f6b0f2f70\nkey = 7c78f34dbce8f0557d43630266f59babd1cb92ba624bd1a8f45a2a91c84a804a\nmsg = \nresult = invalid\n# The ciphertext in this test vector is the message encrypted with an invalid or\n# unexpected padding. This allows to find implementations that are not properly\n# checking the padding during decryption.\n\n# tcId = 172\n# ISO 10126 padding\nct = c477877250c8e4ca2869f35c4757cdb4\niv = f010f61c31c9aa8fa0d5be5f6b0f2f70\nkey = 7c78f34dbce8f0557d43630266f59babd1cb92ba624bd1a8f45a2a91c84a804a\nmsg = 6162636465666768\nresult = invalid\n# The ciphertext in this test vector is the message encrypted with an invalid or\n# unexpected padding. This allows to find implementations that are not properly\n# checking the padding during decryption.\n\n# tcId = 173\n# ISO 10126 padding\nct = 8881e9e02fa9e3037b397957ba1fb7ce69f57c6e99c7b9df7d4879ccd15caf3d\niv = f010f61c31c9aa8fa0d5be5f6b0f2f70\nkey = 7c78f34dbce8f0557d43630266f59babd1cb92ba624bd1a8f45a2a91c84a804a\nmsg = 30313233343536373839414243444546\nresult = invalid\n# The ciphertext in this test vector is the message encrypted with an invalid or\n# unexpected padding. This allows to find implementations that are not properly\n# checking the padding during decryption.\n\n# tcId = 174\n# ISO 10126 padding\nct = 8881e9e02fa9e3037b397957ba1fb7ce77f89a247c928f147748ce6bc8fc4b67\niv = f010f61c31c9aa8fa0d5be5f6b0f2f70\nkey = 7c78f34dbce8f0557d43630266f59babd1cb92ba624bd1a8f45a2a91c84a804a\nmsg = 3031323334353637383941424344454647\nresult = invalid\n# The ciphertext in this test vector is the message encrypted with an invalid or\n# unexpected padding. This allows to find implementations that are not properly\n# checking the padding during decryption.\n\n# tcId = 175\n# padding longer than message\nct = 524236e25956e950713bec0d3d579068\niv = f010f61c31c9aa8fa0d5be5f6b0f2f70\nkey = 7c78f34dbce8f0557d43630266f59babd1cb92ba624bd1a8f45a2a91c84a804a\nmsg = \nresult = invalid\n# The ciphertext in this test vector is the message encrypted with an invalid or\n# unexpected padding. This allows to find implementations that are not properly\n# checking the padding during decryption.\n\n# tcId = 176\n# padding longer than message\nct = e03b6f2ae1c963b6dfa40b42d34314b7\niv = f010f61c31c9aa8fa0d5be5f6b0f2f70\nkey = 7c78f34dbce8f0557d43630266f59babd1cb92ba624bd1a8f45a2a91c84a804a\nmsg = 6162636465666768\nresult = invalid\n# The ciphertext in this test vector is the message encrypted with an invalid or\n# unexpected padding. This allows to find implementations that are not properly\n# checking the padding during decryption.\n\n# tcId = 177\n# padding longer than message\nct = df14f4cbbccca57b9727d68270a1b6c1\niv = f010f61c31c9aa8fa0d5be5f6b0f2f70\nkey = 7c78f34dbce8f0557d43630266f59babd1cb92ba624bd1a8f45a2a91c84a804a\nmsg = 303132333435363738396162636465\nresult = invalid\n# The ciphertext in this test vector is the message encrypted with an invalid or\n# unexpected padding. This allows to find implementations that are not properly\n# checking the padding during decryption.\n\n# tcId = 178\n# padding longer than message\nct = 8881e9e02fa9e3037b397957ba1fb7ceea228bf1edd41c390e2eef140142bc00\niv = f010f61c31c9aa8fa0d5be5f6b0f2f70\nkey = 7c78f34dbce8f0557d43630266f59babd1cb92ba624bd1a8f45a2a91c84a804a\nmsg = 30313233343536373839414243444546\nresult = invalid\n# The ciphertext in this test vector is the message encrypted with an invalid or\n# unexpected padding. This allows to find implementations that are not properly\n# checking the padding during decryption.\n\n# tcId = 179\n# padding longer than message\nct = 8881e9e02fa9e3037b397957ba1fb7ce3937e0e9abf7f672a34a500ba8e9099a\niv = f010f61c31c9aa8fa0d5be5f6b0f2f70\nkey = 7c78f34dbce8f0557d43630266f59babd1cb92ba624bd1a8f45a2a91c84a804a\nmsg = 3031323334353637383941424344454647\nresult = invalid\n# The ciphertext in this test vector is the message encrypted with an invalid or\n# unexpected padding. This allows to find implementations that are not properly\n# checking the padding during decryption.\n\n# tcId = 180\n#  invalid padding\nct = 32ac6057df2a5d1e2e5131348c6ebc4e\niv = f010f61c31c9aa8fa0d5be5f6b0f2f70\nkey = 7c78f34dbce8f0557d43630266f59babd1cb92ba624bd1a8f45a2a91c84a804a\nmsg = \nresult = invalid\n# The ciphertext in this test vector is the message encrypted with an invalid or\n# unexpected padding. This allows to find implementations that are not properly\n# checking the padding during decryption.\n\n# tcId = 181\n#  invalid padding\nct = df4a7c3b9f4756d30fca0d18e9b28960\niv = f010f61c31c9aa8fa0d5be5f6b0f2f70\nkey = 7c78f34dbce8f0557d43630266f59babd1cb92ba624bd1a8f45a2a91c84a804a\nmsg = 6162636465666768\nresult = invalid\n# The ciphertext in this test vector is the message encrypted with an invalid or\n# unexpected padding. This allows to find implementations that are not properly\n# checking the padding during decryption.\n\n# tcId = 182\n#  invalid padding\nct = 8881e9e02fa9e3037b397957ba1fb7ceae2855c47c7988873d57f901e049494b\niv = f010f61c31c9aa8fa0d5be5f6b0f2f70\nkey = 7c78f34dbce8f0557d43630266f59babd1cb92ba624bd1a8f45a2a91c84a804a\nmsg = 30313233343536373839414243444546\nresult = invalid\n# The ciphertext in this test vector is the message encrypted with an invalid or\n# unexpected padding. This allows to find implementations that are not properly\n# checking the padding during decryption.\n\n# tcId =",
     " 183\n#  invalid padding\nct = 8881e9e02fa9e3037b397957ba1fb7ce0714c8de200b27ac91d9257fc93c13be\niv = f010f61c31c9aa8fa0d5be5f6b0f2f70\nkey = 7c78f34dbce8f0557d43630266f59babd1cb92ba624bd1a8f45a2a91c84a804a\nmsg = 3031323334353637383941424344454647\nresult = invalid\n# The ciphertext in this test vector is the message encrypted with an invalid or\n# unexpected padding. This allows to find implementations that are not properly\n# checking the padding during decryption.\n\n",
 };
-static const size_t kLen57 = 49978;
+static const size_t kLen56 = 49978;
 
-static const char *kData57[] = {
+static const char *kData56[] = {
     "# Imported from Wycheproof's aes_cmac_test.json.\n# This file is generated by convert_wycheproof.go. Do not edit by hand.\n#\n# Algorithm: AES-CMAC\n# Generator version: 0.4.12\n\n[keySize = 128]\n[tagSize = 96]\n\n# tcId = 1\n# empty message\nkey = 1607559459d30d33548a635ab1eeab9d\nmsg = \nresult = valid\ntag = 6a8974470fddb0a47e2b6e7d\n\n# tcId = 2\n# truncated mac\nkey = 994275465065fdc96ae37b5d2feb8726\nmsg = c6\nresult = valid\ntag = 3bfa9ec0fb0cc2b8509e7b1f\n\n# tcId = 3\n# truncated mac\nkey = ddc31fc7751a2bf5c8d2d815035622e8\nmsg = c81598f30b3e8ca8\nresult = valid\ntag = 323c2fd67f1bc85108f391e1\n\n# tcId = 4\n# truncated mac\nkey = acef13560296fdc6b09398ae04196f2b\nmsg = 25d99a552339745e24a0cb6a9669c4\nresult = valid\ntag = cdff8af899f61a70a97d967a\n\n# tcId = 5\n# truncated mac\nkey = 33defac4ec7c7b69aa72edb23119e619\nmsg = ceabee3f13d0718779ba86acccd6d5a9\nresult = valid\ntag = e0b19f7e0316f276a846115f\n\n# tcId = 6\n# truncated mac\nkey = d1c61c251def47b39deb1a77a8b188d9\nmsg = 0d68e86cf139677cb461a0fa76690e4afc\nresult = valid\ntag = 2c5f2629fa41555e84c0ef0c\n\n# tcId = 7\n# truncated mac\nkey = 3f71e3875f234fc569433cafa3a36330\nmsg = a3e01e9a597e57502fd849908aa7a19407cbfdc74bc5c485\nresult = valid\ntag = eb8e0bb4937e4a4f9fd55465\n\n[keySize = 128]\n[tagSize = 128]\n\n# tcId = 8\n# empty message\nkey = e34f15c7bd819930fe9d66e0c166e61c\nmsg = \nresult = valid\ntag = d47afca1d857a5933405b1eb7a5cb7af\n\n# tcId = 9\n# full length mac\nkey = e1e726677f4893890f8c027f9d8ef80d\nmsg = 3f\nresult = valid\ntag = 15f856bbed3b321952a584b3c4437a63\n\n# tcId = 10\n# full length mac\nkey = 48f0d03e41cc55c4b58f737b5acdea32\nmsg = f4a133aa6d5985a0\nresult = valid\ntag = 1f1cd0327c02e6d00086915937dd61d9\n\n# tcId = 11\n# full length mac\nkey = 501d81ebf912ddb87fbe3b7aac1437bc\nmsg = 2368e3c3636b5e8e94d2081adbf798\nresult = valid\ntag = aeb784a3825168ddd61f72d0202125e6\n\n# tcId = 12\n# full length mac\nkey = e09eaa5a3f5e56d279d5e7a03373f6ea\nmsg = ef4eab37181f98423e53e947e7050fd0\nresult = valid\ntag = 40facf0e2fb51b73a7472681b033d6dc\n\n# tcId = 13\n# full length mac\nkey = 831e664c9e3f0c3094c0b27b9d908eb2\nmsg = 26603bb76dd0a0180791c4ed4d3b058807\nresult = valid\ntag = a8144c8b24f2aa47d9c160cff4ab1716\n\n# tcId = 14\n# full length mac\nkey = 549bd282ee21b4d7c3b1d02e3ee20ef7\nmsg = d84bf73c5eecbd38444f1a73556e2fa3253f4c54d6916545\nresult = valid\ntag = 7ed458afe02f4a513f59715b664b1bbe\n\n# tcId = 15\n# Flipped bit 0 in tag\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = \nresult = invalid\ntag = 96dd6e5a882cbd564c39ae7d1c5a31aa\n\n# tcId = 16\n# Flipped bit 0 in tag\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = 0001020304050607\nresult = invalid\ntag = 43802eb1931f0032afe984443738cd31\n\n# tcId = 17\n# Flipped bit 0 in tag\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = 000102030405060708090a0b0c0d0e0f\nresult = invalid\ntag = 7acfbbca7a2ea68b966fc5399f74809e\n\n# tcId = 18\n# Flipped bit 1 in tag\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = \nresult = invalid\ntag = 95dd6e5a882cbd564c39ae7d1c5a31aa\n\n# tcId = 19\n# Flipped bit 1 in tag\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = 0001020304050607\nresult = invalid\ntag = 40802eb1931f0032afe984443738cd31\n\n# tcId = 20\n# Flipped bit 1 in tag\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = 000102030405060708090a0b0c0d0e0f\nresult = invalid\ntag = 79cfbbca7a2ea68b966fc5399f74809e\n\n# tcId = 21\n# Flipped bit 7 in tag\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = \nresult = invalid\ntag = 17dd6e5a882cbd564c39ae7d1c5a31aa\n\n# tcId = 22\n# Flipped bit 7 in tag\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = 0001020304050607\nresult = invalid\ntag = c2802eb1931f0032afe984443738cd31\n\n# tcId = 23\n# Flipped bit 7 in tag\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = 000102030405060708090a0b0c0d0e0f\nresult = invalid\ntag = fbcfbbca7a2ea68b966fc5399f74809e\n\n# tcId = 24\n# Flipped bit 8 in tag\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = \nresult = invalid\ntag = 97dc6e5a882cbd564c39ae7d1c5a31aa\n\n# tcId = 25\n# Flipped bit 8 in tag\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = 0001020304050607\nresult = invalid\ntag = 42812eb1931f0032afe984443738cd31\n\n# tcId = 26\n# Flipped bit 8 in tag\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = 000102030405060708090a0b0c0d0e0f\nresult = invalid\ntag = 7bcebbca7a2ea68b966fc5399f74809e\n\n# tcId = 27\n# Flipped bit 31 in tag\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = \nresult = invalid\ntag = 97dd6eda882cbd564c39ae7d1c5a31aa\n\n# tcId = 28\n# Flipped bit 31 in tag\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = 0001020304050607\nresult = invalid\ntag = 42802e31931f0032afe984443738cd31\n\n# tcId = 29\n# Flipped bit 31 in tag\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = 000102030405060708090a0b0c0d0e0f\nresult = invalid\ntag = 7bcfbb4a7a2ea68b966fc5399f74809e\n\n# tcId = 30\n# Flipped bit 32 in tag\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = \nresult = invalid\ntag = 97dd6e5a892cbd564c39ae7d1c5a31aa\n\n# tcId = 31\n# Flipped bit 32 in tag\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = 0001020304050607\nresult = invalid\ntag = 42802eb1921f0032afe984443738cd31\n\n# tcId = 32\n# Flipped bit 32 in tag\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = 000102030405060708090a0b0c0d0e0f\nresult = invalid\ntag = 7bcfbbca7b2ea68b966fc5399f74809e\n\n# tcId = 33\n# Flipped bit 33 in tag\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = \nresult = invalid\ntag = 97dd6e5a8a2cbd564c39ae7d1c5a31aa\n\n# tcId = 34\n# Flipped bit 33 in tag\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = 0001020304050607\nresult = invalid\ntag = 42802eb1911f0032afe984443738cd31\n\n# tcId = 35\n# Flipped bit 33 in tag\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = 000102030405060708090a0b0c0d0e0f\nresult = invalid\ntag = 7bcfbbca782ea68b966fc5399f74809e\n\n# tcId = 36\n# Flipped bit 63 in tag\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = \nresult = invalid\ntag = 97dd6e5a882cbdd64c39ae7d1c5a31aa\n\n# tcId = 37\n# Flipped bit 63 in tag\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = 0001020304050607\nresult = invalid\ntag = 42802eb1931f00b2afe984443738cd31\n\n# tcId = 38\n# Flipped bit 63 in tag\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = 000102030405060708090a0b0c0d0e0f\nresult = invalid\ntag = 7bcfbbca7a2ea60b966fc5399f74809e\n\n# tcId = 39\n# Flipped bit 64 in tag\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = \nresult = invalid\ntag = 97dd6e5a882cbd564d39ae7d1c5a31aa\n\n# tcId = 40\n# Flipped bit 64 in tag\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = 0001020304050607\nresult = invalid\ntag = 42802eb1931f0032aee984443738cd31\n\n# tcId = 41\n# Flipped bit 64 in tag\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = 000102030405060708090a0b0c0d0e0f\nresult = invalid\ntag = 7bcfbbca7a2ea68b976fc5399f74809e\n\n# tcId = 42\n# Flipped bit 71 in tag\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = \nresult = invalid\ntag = 97dd6e5a882cbd56cc39ae7d1c5a31aa\n\n# tcId = 43\n# Flipped bit 71 in tag\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = 0001020304050607\nresult = invalid\ntag = 42802eb1931f00322fe984443738cd31\n\n# tcId = 44\n# Flipped bit 71 in tag\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = 000102030405060708090a0b0c0d0e0f\nresult = invalid\ntag = 7bcfbbca7a2ea68b166fc5399f74809e\n\n# tcId = 45\n# Flipped bit 77 in tag\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = \nresult = invalid\ntag = 97dd6e5a882cbd564c19ae7d1c5a31aa\n\n# tcId = 46\n# Flipped bit 77 in tag\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = 0001020304050607\nresult = invalid\ntag = 42802eb1931f0032afc984443738cd31\n\n# tcId = 47\n# Flipped bit 77 in tag\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = 000102030405060708090a0b0c0d0e0f\nresult = invalid\ntag = 7bcfbbca7a2ea68b964fc5399f74809e\n\n# tcId = 48\n# Flipped bit 80 in tag\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = \nresult = invalid\ntag = 97dd6e5a882cbd564c39af7d1c5a31aa\n\n# tcId = 49\n# Flipped bit 80 in tag\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = 0001020304050607\nresult = invalid\ntag = 42802eb1931f0032afe985443738cd31\n\n# tcId = 50\n# Flipped bit 80 in tag\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = 000102030405060708090a0b0c0d0e0f\nresult = invalid\ntag = 7bcfbbca7a2ea68b966fc4399f74809e\n\n# tcId = 51\n# Flipped bit 96 in tag\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = \nresult = invalid\ntag = 97dd6e5a882cbd564c39ae7d1d5a31aa\n\n# tcId = 52\n# Flipped bit 96 in tag\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = 0001020304050607\nresult = invalid\ntag = 42802eb1931f0032afe984443638cd31\n\n# tcId = 53\n# ",
     "Flipped bit 96 in tag\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = 000102030405060708090a0b0c0d0e0f\nresult = invalid\ntag = 7bcfbbca7a2ea68b966fc5399e74809e\n\n# tcId = 54\n# Flipped bit 97 in tag\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = \nresult = invalid\ntag = 97dd6e5a882cbd564c39ae7d1e5a31aa\n\n# tcId = 55\n# Flipped bit 97 in tag\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = 0001020304050607\nresult = invalid\ntag = 42802eb1931f0032afe984443538cd31\n\n# tcId = 56\n# Flipped bit 97 in tag\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = 000102030405060708090a0b0c0d0e0f\nresult = invalid\ntag = 7bcfbbca7a2ea68b966fc5399d74809e\n\n# tcId = 57\n# Flipped bit 103 in tag\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = \nresult = invalid\ntag = 97dd6e5a882cbd564c39ae7d9c5a31aa\n\n# tcId = 58\n# Flipped bit 103 in tag\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = 0001020304050607\nresult = invalid\ntag = 42802eb1931f0032afe98444b738cd31\n\n# tcId = 59\n# Flipped bit 103 in tag\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = 000102030405060708090a0b0c0d0e0f\nresult = invalid\ntag = 7bcfbbca7a2ea68b966fc5391f74809e\n\n# tcId = 60\n# Flipped bit 120 in tag\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = \nresult = invalid\ntag = 97dd6e5a882cbd564c39ae7d1c5a31ab\n\n# tcId = 61\n# Flipped bit 120 in tag\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = 0001020304050607\nresult = invalid\ntag = 42802eb1931f0032afe984443738cd30\n\n# tcId = 62\n# Flipped bit 120 in tag\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = 000102030405060708090a0b0c0d0e0f\nresult = invalid\ntag = 7bcfbbca7a2ea68b966fc5399f74809f\n\n# tcId = 63\n# Flipped bit 121 in tag\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = \nresult = invalid\ntag = 97dd6e5a882cbd564c39ae7d1c5a31a8\n\n# tcId = 64\n# Flipped bit 121 in tag\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = 0001020304050607\nresult = invalid\ntag = 42802eb1931f0032afe984443738cd33\n\n# tcId = 65\n# Flipped bit 121 in tag\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = 000102030405060708090a0b0c0d0e0f\nresult = invalid\ntag = 7bcfbbca7a2ea68b966fc5399f74809c\n\n# tcId = 66\n# Flipped bit 126 in tag\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = \nresult = invalid\ntag = 97dd6e5a882cbd564c39ae7d1c5a31ea\n\n# tcId = 67\n# Flipped bit 126 in tag\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = 0001020304050607\nresult = invalid\ntag = 42802eb1931f0032afe984443738cd71\n\n# tcId = 68\n# Flipped bit 126 in tag\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = 000102030405060708090a0b0c0d0e0f\nresult = invalid\ntag = 7bcfbbca7a2ea68b966fc5399f7480de\n\n# tcId = 69\n# Flipped bit 127 in tag\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = \nresult = invalid\ntag = 97dd6e5a882cbd564c39ae7d1c5a312a\n\n# tcId = 70\n# Flipped bit 127 in tag\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = 0001020304050607\nresult = invalid\ntag = 42802eb1931f0032afe984443738cdb1\n\n# tcId = 71\n# Flipped bit 127 in tag\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = 000102030405060708090a0b0c0d0e0f\nresult = invalid\ntag = 7bcfbbca7a2ea68b966fc5399f74801e\n\n# tcId = 72\n# Flipped bits 0 and 64 in tag\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = \nresult = invalid\ntag = 96dd6e5a882cbd564d39ae7d1c5a31aa\n\n# tcId = 73\n# Flipped bits 0 and 64 in tag\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = 0001020304050607\nresult = invalid\ntag = 43802eb1931f0032aee984443738cd31\n\n# tcId = 74\n# Flipped bits 0 and 64 in tag\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = 000102030405060708090a0b0c0d0e0f\nresult = invalid\ntag = 7acfbbca7a2ea68b976fc5399f74809e\n\n# tcId = 75\n# Flipped bits 31 and 63 in tag\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = \nresult = invalid\ntag = 97dd6eda882cbdd64c39ae7d1c5a31aa\n\n# tcId = 76\n# Flipped bits 31 and 63 in tag\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = 0001020304050607\nresult = invalid\ntag = 42802e31931f00b2afe984443738cd31\n\n# tcId = 77\n# Flipped bits 31 and 63 in tag\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = 000102030405060708090a0b0c0d0e0f\nresult = invalid\ntag = 7bcfbb4a7a2ea60b966fc5399f74809e\n\n# tcId = 78\n# Flipped bits 63 and 127 in tag\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = \nresult = invalid\ntag = 97dd6e5a882cbdd64c39ae7d1c5a312a\n\n# tcId = 79\n# Flipped bits 63 and 127 in tag\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = 0001020304050607\nresult = invalid\ntag = 42802eb1931f00b2afe984443738cdb1\n\n# tcId = 80\n# Flipped bits 63 and 127 in tag\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = 000102030405060708090a0b0c0d0e0f\nresult = invalid\ntag = 7bcfbbca7a2ea60b966fc5399f74801e\n\n# tcId = 81\n# all bits of tag flipped\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = \nresult = invalid\ntag = 682291a577d342a9b3c65182e3a5ce55\n\n# tcId = 82\n# all bits of tag flipped\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = 0001020304050607\nresult = invalid\ntag = bd7fd14e6ce0ffcd50167bbbc8c732ce\n\n# tcId = 83\n# all bits of tag flipped\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = 000102030405060708090a0b0c0d0e0f\nresult = invalid\ntag = 8430443585d1597469903ac6608b7f61\n\n# tcId = 84\n# Tag changed to all zero\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = \nresult = invalid\ntag = 00000000000000000000000000000000\n\n# tcId = 85\n# Tag changed to all zero\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = 0001020304050607\nresult = invalid\ntag = 00000000000000000000000000000000\n\n# tcId = 86\n# Tag changed to all zero\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = 000102030405060708090a0b0c0d0e0f\nresult = invalid\ntag = 00000000000000000000000000000000\n\n# tcId = 87\n# tag changed to all 1\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = \nresult = invalid\ntag = ffffffffffffffffffffffffffffffff\n\n# tcId = 88\n# tag changed to all 1\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = 0001020304050607\nresult = invalid\ntag = ffffffffffffffffffffffffffffffff\n\n# tcId = 89\n# tag changed to all 1\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = 000102030405060708090a0b0c0d0e0f\nresult = invalid\ntag = ffffffffffffffffffffffffffffffff\n\n# tcId = 90\n# msbs changed in tag\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = \nresult = invalid\ntag = 175deeda08ac3dd6ccb92efd9cdab12a\n\n# tcId = 91\n# msbs changed in tag\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = 0001020304050607\nresult = invalid\ntag = c200ae31139f80b22f6904c4b7b84db1\n\n# tcId = 92\n# msbs changed in tag\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = 000102030405060708090a0b0c0d0e0f\nresult = invalid\ntag = fb4f3b4afaae260b16ef45b91ff4001e\n\n# tcId = 93\n# lsbs changed in tag\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = \nresult = invalid\ntag = 96dc6f5b892dbc574d38af7c1d5b30ab\n\n# tcId = 94\n# lsbs changed in tag\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = 0001020304050607\nresult = invalid\ntag = 43812fb0921e0133aee885453639cc30\n\n# tcId = 95\n# lsbs changed in tag\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = 000102030405060708090a0b0c0d0e0f\nresult = invalid\ntag = 7acebacb7b2fa78a976ec4389e75819f\n\n[keySize = 192]\n[tagSize = 96]\n\n# tcId = 96\n# empty message\nkey = 78fe7087bc810abf08f15fc69804f888435a6442677c8c79\nmsg = \nresult = valid\ntag = 48d92d311f60d51a23e56d8c\n\n# tcId = 97\n# truncated mac\nkey = 7ab6fb0e3456e40c3a6c5db57a3d0548d4c8c3cfd8849dba\nmsg = c6\nresult = valid\ntag = d904a70715bd0ad9468f37b2\n\n# tcId = 98\n# truncated mac\nkey = f095a5d39f0b499cef0130b4eb3bfae90253a1f30270efb5\nmsg = 738e196c2cb0206b\nresult = valid\ntag = 7a3b8de1c57e7c5f7babbe42\n\n# tcId = 99\n# truncated mac\nkey = 6fee9e028a35d168ffe2062338f753d3930597b341210f0c\nmsg = a1518bb8cb88f305935b91f64f2479\nresult = valid\ntag = 7ba264b276a0849bc76a2a29\n\n# tcId = 100\n# truncated mac\nkey = 304b9077a8f36fd949e38bbfb6dd71e313530ba0a34d3e77\nmsg = 87e60924ae7f2ae1567cbcb07f7ae2aa\nresult = valid\ntag = 725e51ac5b10338d940c0236\n\n# tcId = 101\n# truncated mac\nkey = fec7f37de35365c415701ba2eec2d94cb20e3e2a0c21cfcf\nmsg = cf24271e0acebd3249f996da1fe9d13e3f\nresult = valid\ntag = 7636cec43b5b7a40787580fa\n\n# tcId = 102\n# truncated mac\nkey = 5f4df68a45a5edde95907b5b002fcf3ba6747f9194536dd3\nmsg = 4cc781faaa8decb281afab7dc69f380921d04c54414bb65f\nresult = valid\ntag = bb2de41c514dd64ebc5f5a99\n\n[keySize = 192]\n[tagSize = 128]\n\n# tcId = 103\n# empty message\nkey = 3d6bf9edae6d881eade0ff8c7076a4835b71320c1f36b631\nmsg = \nresult = valid\ntag = a8dd15fe2ce3495ec5b666744ec29220\n\n# tcId = 104\n# full length mac\nkey = 915429743435c28997a33b33b6574a953d81dae0e7032e6a\nmsg = 58\nresult = va",
     "lid\ntag = e13b3f7f7f510c3a059df7a68c7e2ad5\n\n# tcId = 105\n# full length mac\nkey = 28d8da67806410e5565bcc5a9d7ab9fb357413fa0158378c\nmsg = 004e3f4a4e6db955\nresult = valid\ntag = c4c2c0876be9eabeb5a956da53846b08\n\n# tcId = 106\n# full length mac\nkey = 850fc859e9f7b89a367611dee6698f33962d8245ca8dc331\nmsg = 586f4f171af116519061a8e0e77940\nresult = valid\ntag = fb11a360c9776991d73d6e41d07710a2\n\n# tcId = 107\n# full length mac\nkey = f4bfa5aa4f0f4d62cf736cd2969c43d580fdb92f2753bedb\nmsg = 0e239f239705b282ce2200fe20de1165\nresult = valid\ntag = ab20a6cf60873665b1d6999b05c7f9c6\n\n# tcId = 108\n# full length mac\nkey = cfd3f68873d81a27d2bfce876c79f6e609074dec39e34614\nmsg = b1973cb25aa87ef9d1a8888b0a0f5c04c6\nresult = valid\ntag = b95a016b83a0ae4194023333c8a7345a\n\n# tcId = 109\n# full length mac\nkey = 648a44468d67bb6744b235ee7a3fcd6ed4bdc29ec5b5fa1a\nmsg = c59d0d6981cca1be1d5519fc7881e6d230f39f6c12a9e827\nresult = valid\ntag = a1b96272ae7f9aef567271795f21d1d3\n\n# tcId = 110\n# Flipped bit 0 in tag\nkey = 000102030405060708090a0b0c0d0e0f1011121314151617\nmsg = \nresult = invalid\ntag = ed12390ea0a7ed15d9d37a6eca1fc990\n\n# tcId = 111\n# Flipped bit 0 in tag\nkey = 000102030405060708090a0b0c0d0e0f1011121314151617\nmsg = 0001020304050607\nresult = invalid\ntag = c81307df60859acb911c7be61be7ca90\n\n# tcId = 112\n# Flipped bit 0 in tag\nkey = 000102030405060708090a0b0c0d0e0f1011121314151617\nmsg = 000102030405060708090a0b0c0d0e0f\nresult = invalid\ntag = f91bde0069a6e389573bf04e7cde688c\n\n# tcId = 113\n# Flipped bit 1 in tag\nkey = 000102030405060708090a0b0c0d0e0f1011121314151617\nmsg = \nresult = invalid\ntag = ee12390ea0a7ed15d9d37a6eca1fc990\n\n# tcId = 114\n# Flipped bit 1 in tag\nkey = 000102030405060708090a0b0c0d0e0f1011121314151617\nmsg = 0001020304050607\nresult = invalid\ntag = cb1307df60859acb911c7be61be7ca90\n\n# tcId = 115\n# Flipped bit 1 in tag\nkey = 000102030405060708090a0b0c0d0e0f1011121314151617\nmsg = 000102030405060708090a0b0c0d0e0f\nresult = invalid\ntag = fa1bde0069a6e389573bf04e7cde688c\n\n# tcId = 116\n# Flipped bit 7 in tag\nkey = 000102030405060708090a0b0c0d0e0f1011121314151617\nmsg = \nresult = invalid\ntag = 6c12390ea0a7ed15d9d37a6eca1fc990\n\n# tcId = 117\n# Flipped bit 7 in tag\nkey = 000102030405060708090a0b0c0d0e0f1011121314151617\nmsg = 0001020304050607\nresult = invalid\ntag = 491307df60859acb911c7be61be7ca90\n\n# tcId = 118\n# Flipped bit 7 in tag\nkey = 000102030405060708090a0b0c0d0e0f1011121314151617\nmsg = 000102030405060708090a0b0c0d0e0f\nresult = invalid\ntag = 781bde0069a6e389573bf04e7cde688c\n\n# tcId = 119\n# Flipped bit 8 in tag\nkey = 000102030405060708090a0b0c0d0e0f1011121314151617\nmsg = \nresult = invalid\ntag = ec13390ea0a7ed15d9d37a6eca1fc990\n\n# tcId = 120\n# Flipped bit 8 in tag\nkey = 000102030405060708090a0b0c0d0e0f1011121314151617\nmsg = 0001020304050607\nresult = invalid\ntag = c91207df60859acb911c7be61be7ca90\n\n# tcId = 121\n# Flipped bit 8 in tag\nkey = 000102030405060708090a0b0c0d0e0f1011121314151617\nmsg = 000102030405060708090a0b0c0d0e0f\nresult = invalid\ntag = f81ade0069a6e389573bf04e7cde688c\n\n# tcId = 122\n# Flipped bit 31 in tag\nkey = 000102030405060708090a0b0c0d0e0f1011121314151617\nmsg = \nresult = invalid\ntag = ec12398ea0a7ed15d9d37a6eca1fc990\n\n# tcId = 123\n# Flipped bit 31 in tag\nkey = 000102030405060708090a0b0c0d0e0f1011121314151617\nmsg = 0001020304050607\nresult = invalid\ntag = c913075f60859acb911c7be61be7ca90\n\n# tcId = 124\n# Flipped bit 31 in tag\nkey = 000102030405060708090a0b0c0d0e0f1011121314151617\nmsg = 000102030405060708090a0b0c0d0e0f\nresult = invalid\ntag = f81bde8069a6e389573bf04e7cde688c\n\n# tcId = 125\n# Flipped bit 32 in tag\nkey = 000102030405060708090a0b0c0d0e0f1011121314151617\nmsg = \nresult = invalid\ntag = ec12390ea1a7ed15d9d37a6eca1fc990\n\n# tcId = 126\n# Flipped bit 32 in tag\nkey = 000102030405060708090a0b0c0d0e0f1011121314151617\nmsg = 0001020304050607\nresult = invalid\ntag = c91307df61859acb911c7be61be7ca90\n\n# tcId = 127\n# Flipped bit 32 in tag\nkey = 000102030405060708090a0b0c0d0e0f1011121314151617\nmsg = 000102030405060708090a0b0c0d0e0f\nresult = invalid\ntag = f81bde0068a6e389573bf04e7cde688c\n\n# tcId = 128\n# Flipped bit 33 in tag\nkey = 000102030405060708090a0b0c0d0e0f1011121314151617\nmsg = \nresult = invalid\ntag = ec12390ea2a7ed15d9d37a6eca1fc990\n\n# tcId = 129\n# Flipped bit 33 in tag\nkey = 000102030405060708090a0b0c0d0e0f1011121314151617\nmsg = 0001020304050607\nresult = invalid\ntag = c91307df62859acb911c7be61be7ca90\n\n# tcId = 130\n# Flipped bit 33 in tag\nkey = 000102030405060708090a0b0c0d0e0f1011121314151617\nmsg = 000102030405060708090a0b0c0d0e0f\nresult = invalid\ntag = f81bde006ba6e389573bf04e7cde688c\n\n# tcId = 131\n# Flipped bit 63 in tag\nkey = 000102030405060708090a0b0c0d0e0f1011121314151617\nmsg = \nresult = invalid\ntag = ec12390ea0a7ed95d9d37a6eca1fc990\n\n# tcId = 132\n# Flipped bit 63 in tag\nkey = 000102030405060708090a0b0c0d0e0f1011121314151617\nmsg = 0001020304050607\nresult = invalid\ntag = c91307df60859a4b911c7be61be7ca90\n\n# tcId = 133\n# Flipped bit 63 in tag\nkey = 000102030405060708090a0b0c0d0e0f1011121314151617\nmsg = 000102030405060708090a0b0c0d0e0f\nresult = invalid\ntag = f81bde0069a6e309573bf04e7cde688c\n\n# tcId = 134\n# Flipped bit 64 in tag\nkey = 000102030405060708090a0b0c0d0e0f1011121314151617\nmsg = \nresult = invalid\ntag = ec12390ea0a7ed15d8d37a6eca1fc990\n\n# tcId = 135\n# Flipped bit 64 in tag\nkey = 000102030405060708090a0b0c0d0e0f1011121314151617\nmsg = 0001020304050607\nresult = invalid\ntag = c91307df60859acb901c7be61be7ca90\n\n# tcId = 136\n# Flipped bit 64 in tag\nkey = 000102030405060708090a0b0c0d0e0f1011121314151617\nmsg = 000102030405060708090a0b0c0d0e0f\nresult = invalid\ntag = f81bde0069a6e389563bf04e7cde688c\n\n# tcId = 137\n# Flipped bit 71 in tag\nkey = 000102030405060708090a0b0c0d0e0f1011121314151617\nmsg = \nresult = invalid\ntag = ec12390ea0a7ed1559d37a6eca1fc990\n\n# tcId = 138\n# Flipped bit 71 in tag\nkey = 000102030405060708090a0b0c0d0e0f1011121314151617\nmsg = 0001020304050607\nresult = invalid\ntag = c91307df60859acb111c7be61be7ca90\n\n# tcId = 139\n# Flipped bit 71 in tag\nkey = 000102030405060708090a0b0c0d0e0f1011121314151617\nmsg = 000102030405060708090a0b0c0d0e0f\nresult = invalid\ntag = f81bde0069a6e389d73bf04e7cde688c\n\n# tcId = 140\n# Flipped bit 77 in tag\nkey = 000102030405060708090a0b0c0d0e0f1011121314151617\nmsg = \nresult = invalid\ntag = ec12390ea0a7ed15d9f37a6eca1fc990\n\n# tcId = 141\n# Flipped bit 77 in tag\nkey = 000102030405060708090a0b0c0d0e0f1011121314151617\nmsg = 0001020304050607\nresult = invalid\ntag = c91307df60859acb913c7be61be7ca90\n\n# tcId = 142\n# Flipped bit 77 in tag\nkey = 000102030405060708090a0b0c0d0e0f1011121314151617\nmsg = 000102030405060708090a0b0c0d0e0f\nresult = invalid\ntag = f81bde0069a6e389571bf04e7cde688c\n\n# tcId = 143\n# Flipped bit 80 in tag\nkey = 000102030405060708090a0b0c0d0e0f1011121314151617\nmsg = \nresult = invalid\ntag = ec12390ea0a7ed15d9d37b6eca1fc990\n\n# tcId = 144\n# Flipped bit 80 in tag\nkey = 000102030405060708090a0b0c0d0e0f1011121314151617\nmsg = 0001020304050607\nresult = invalid\ntag = c91307df60859acb911c7ae61be7ca90\n\n# tcId = 145\n# Flipped bit 80 in tag\nkey = 000102030405060708090a0b0c0d0e0f1011121314151617\nmsg = 000102030405060708090a0b0c0d0e0f\nresult = invalid\ntag = f81bde0069a6e389573bf14e7cde688c\n\n# tcId = 146\n# Flipped bit 96 in tag\nkey = 000102030405060708090a0b0c0d0e0f1011121314151617\nmsg = \nresult = invalid\ntag = ec12390ea0a7ed15d9d37a6ecb1fc990\n\n# tcId = 147\n# Flipped bit 96 in tag\nkey = 000102030405060708090a0b0c0d0e0f1011121314151617\nmsg = 0001020304050607\nresult = invalid\ntag = c91307df60859acb911c7be61ae7ca90\n\n# tcId = 148\n# Flipped bit 96 in tag\nkey = 000102030405060708090a0b0c0d0e0f1011121314151617\nmsg = 000102030405060708090a0b0c0d0e0f\nresult = invalid\ntag = f81bde0069a6e389573bf04e7dde688c\n\n# tcId = 149\n# Flipped bit 97 in tag\nkey = 000102030405060708090a0b0c0d0e0f1011121314151617\nmsg = \nresult = invalid\ntag = ec12390ea0a7ed15d9d37a6ec81fc990\n\n# tcId = 150\n# Flipped bit 97 in tag\nkey = 000102030405060708090a0b0c0d0e0f1011121314151617\nmsg = 0001020304050607\nresult = invalid\ntag = c91307df60859acb911c7be619e7ca90\n\n# tcId = 151\n# Flipped bit 97 in tag\nkey = 000102030405060708090a0b0c0d0e0f1011121314151617\nmsg = 000102030405060708090a0b0c0d0e0f\nresult = invalid\ntag = f81bde0069a6e389573bf04e7ede688c\n\n# tcId = 152\n# Flipped bit 103 in ta",
@@ -2845,9 +2826,9 @@
     "161718191a1b1c1d1e1f\nmsg = 0001020304050607\nresult = invalid\ntag = d609717c3a4ef8a2ea200b297c2accec\n\n# tcId = 243\n# Flipped bit 96 in tag\nkey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nmsg = 000102030405060708090a0b0c0d0e0f\nresult = invalid\ntag = 59ee3f3b5f83e290cae26dad28bba32d\n\n# tcId = 244\n# Flipped bit 97 in tag\nkey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nmsg = \nresult = invalid\ntag = 6bf0a293d8cba0101f0089727491b7fb\n\n# tcId = 245\n# Flipped bit 97 in tag\nkey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nmsg = 0001020304050607\nresult = invalid\ntag = d609717c3a4ef8a2ea200b297f2accec\n\n# tcId = 246\n# Flipped bit 97 in tag\nkey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nmsg = 000102030405060708090a0b0c0d0e0f\nresult = invalid\ntag = 59ee3f3b5f83e290cae26dad2bbba32d\n\n# tcId = 247\n# Flipped bit 103 in tag\nkey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nmsg = \nresult = invalid\ntag = 6bf0a293d8cba0101f008972f691b7fb\n\n# tcId = 248\n# Flipped bit 103 in tag\nkey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nmsg = 0001020304050607\nresult = invalid\ntag = d609717c3a4ef8a2ea200b29fd2accec\n\n# tcId = 249\n# Flipped bit 103 in tag\nkey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nmsg = 000102030405060708090a0b0c0d0e0f\nresult = invalid\ntag = 59ee3f3b5f83e290cae26dada9bba32d\n\n# tcId = 250\n# Flipped bit 120 in tag\nkey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nmsg = \nresult = invalid\ntag = 6bf0a293d8cba0101f0089727691b7fa\n\n# tcId = 251\n# Flipped bit 120 in tag\nkey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nmsg = 0001020304050607\nresult = invalid\ntag = d609717c3a4ef8a2ea200b297d2acced\n\n# tcId = 252\n# Flipped bit 120 in tag\nkey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nmsg = 000102030405060708090a0b0c0d0e0f\nresult = invalid\ntag = 59ee3f3b5f83e290cae26dad29bba32c\n\n# tcId = 253\n# Flipped bit 121 in tag\nkey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nmsg = \nresult = invalid\ntag = 6bf0a293d8cba0101f0089727691b7f9\n\n# tcId = 254\n# Flipped bit 121 in tag\nkey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nmsg = 0001020304050607\nresult = invalid\ntag = d609717c3a4ef8a2ea200b297d2accee\n\n# tcId = 255\n# Flipped bit 121 in tag\nkey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nmsg = 000102030405060708090a0b0c0d0e0f\nresult = invalid\ntag = 59ee3f3b5f83e290cae26dad29bba32f\n\n# tcId = 256\n# Flipped bit 126 in tag\nkey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nmsg = \nresult = invalid\ntag = 6bf0a293d8cba0101f0089727691b7bb\n\n# tcId = 257\n# Flipped bit 126 in tag\nkey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nmsg = 0001020304050607\nresult = invalid\ntag = d609717c3a4ef8a2ea200b297d2accac\n\n# tcId = 258\n# Flipped bit 126 in tag\nkey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nmsg = 000102030405060708090a0b0c0d0e0f\nresult = invalid\ntag = 59ee3f3b5f83e290cae26dad29bba36d\n\n# tcId = 259\n# Flipped bit 127 in tag\nkey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nmsg = \nresult = invalid\ntag = 6bf0a293d8cba0101f0089727691b77b\n\n# tcId = 260\n# Flipped bit 127 in tag\nkey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nmsg = 0001020304050607\nresult = invalid\ntag = d609717c3a4ef8a2ea200b297d2acc6c\n\n# tcId = 261\n# Flipped bit 127 in tag\nkey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nmsg = 000102030405060708090a0b0c0d0e0f\nresult = invalid\ntag = 59ee3f3b5f83e290cae26dad29bba3ad\n\n# tcId = 262\n# Flipped bits 0 and 64 in tag\nkey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nmsg = \nresult = invalid\ntag = 6af0a293d8cba0101e0089727691b7fb\n\n# tcId = 263\n# Flipped bits 0 and 64 in tag\nkey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nmsg = 0001020304050607\nresult = invalid\ntag = d709717c3a4ef8a2eb200b297d2accec\n\n# tcId = 264\n# Flipped bits 0 and 64 in tag\nkey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nmsg = 000102030405060708090a0b0c0d0e0f\nresult = invalid\ntag = 58ee3f3b5f83e290cbe26dad29bba32d\n\n# tcId = 265\n# Flipped bits 31 and 63 in tag\nkey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nmsg = \nresult = invalid\ntag = 6bf0a213d8cba0901f0089727691b7fb\n\n# tcId = 266\n# Flipped bits 31 and 63 in tag\nkey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nmsg = 0001020304050607\nresult = invalid\ntag = d60971fc3a4ef822ea200b297d2accec\n\n# tcId = 267\n# Flipped bits 31 and 63 in tag\nkey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nmsg = 000102030405060708090a0b0c0d0e0f\nresult = invalid\ntag = 59ee3fbb5f83e210cae26dad29bba32d\n\n# tcId = 268\n# Flipped bits 63 and 127 in tag\nkey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nmsg = \nresult = invalid\ntag = 6bf0a293d8cba0901f0089727691b77b\n\n# tcId = 269\n# Flipped bits 63 and 127 in tag\nkey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nmsg = 0001020304050607\nresult = invalid\ntag = d609717c3a4ef822ea200b297d2acc6c\n\n# tcId = 270\n# Flipped bits 63 and 127 in tag\nkey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nmsg = 000102030405060708090a0b0c0d0e0f\nresult = invalid\ntag = 59ee3f3b5f83e210cae26dad29bba3ad\n\n# tcId = 271\n# all bits of tag flipped\nkey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nmsg = \nresult = invalid\ntag = 940f5d6c27345fefe0ff768d896e4804\n\n# tcId = 272\n# all bits of tag flipped\nkey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nmsg = 0001020304050607\nresult = invalid\ntag = 29f68e83c5b1075d15dff4d682d53313\n\n# tcId = 273\n# all bits of tag flipped\nkey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nmsg = 000102030405060708090a0b0c0d0e0f\nresult = invalid\ntag = a611c0c4a07c1d6f351d9252d6445cd2\n\n# tcId = 274\n# Tag changed to all zero\nkey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nmsg = \nresult = invalid\ntag = 00000000000000000000000000000000\n\n# tcId = 275\n# Tag changed to all zero\nkey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nmsg = 0001020304050607\nresult = invalid\ntag = 00000000000000000000000000000000\n\n# tcId = 276\n# Tag changed to all zero\nkey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nmsg = 000102030405060708090a0b0c0d0e0f\nresult = invalid\ntag = 00000000000000000000000000000000\n\n# tcId = 277\n# tag changed to all 1\nkey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nmsg = \nresult = invalid\ntag = ffffffffffffffffffffffffffffffff\n\n# tcId = 278\n# tag changed to all 1\nkey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nmsg = 0001020304050607\nresult = invalid\ntag = ffffffffffffffffffffffffffffffff\n\n# tcId = 279\n# tag changed to all 1\nkey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nmsg = 000102030405060708090a0b0c0d0e0f\nresult = invalid\ntag = ffffffffffffffffffffffffffffffff\n\n# tcId = 280\n# msbs changed in tag\nkey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nmsg = \nresult = invalid\ntag = eb702213584b20909f8009f2f611377b\n\n# tcId = 281\n# msbs changed in tag\nkey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nmsg = 0001020304050607\nresult = invalid\ntag = 5689f1fcbace78226aa08ba9fdaa4c6c\n\n# tcId = 282\n# msbs changed in tag\nkey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nmsg = 000102030405060708090a0b0c0d0e0f\nresult = invalid\ntag = d96ebfbbdf0362104a62ed2da93b23ad\n\n# tcId = 283\n# lsbs changed in tag\nkey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nmsg = \nresult = invalid\ntag = 6af1a392d9caa1111e0188737790b6fa\n\n# tcId = 284\n# lsbs changed in tag\nkey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nmsg = 0001020304050607\nresult = invalid\ntag = d708707d3b4ff9a3eb210a287c2bcded\n\n# tcId = 285\n# lsbs changed in tag\nkey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nmsg",
     " = 000102030405060708090a0b0c0d0e0f\nresult = invalid\ntag = 58ef3e3a5e82e391cbe36cac28baa22c\n\n[keySize = 0]\n[tagSize = 128]\n\n# tcId = 286\n# invalid key size\nkey = \nmsg = 00b9449326d39416\nresult = invalid\ntag = \n\n[keySize = 8]\n[tagSize = 128]\n\n# tcId = 287\n# invalid key size\nkey = 0f\nmsg = 4538b79a1397e2aa\nresult = invalid\ntag = \n\n[keySize = 64]\n[tagSize = 128]\n\n# tcId = 288\n# invalid key size\nkey = a88e385af7185148\nmsg = dc63b7ef08096e4f\nresult = invalid\ntag = \n\n[keySize = 160]\n[tagSize = 128]\n\n# tcId = 289\n# invalid key size\nkey = 003a228008d390b645929df73a2b2bdd8298918d\nmsg = ad1d3c3122ab7ac6\nresult = invalid\ntag = \n\n[keySize = 320]\n[tagSize = 128]\n\n# tcId = 290\n# invalid key size\nkey = 94baaac150e2645ae1ec1939c7bcefb73f6edb146fae02289b6c6326ff39bc265d612bef2727fa72\nmsg = e3f75a886c4a5591\nresult = invalid\ntag = \n\n",
 };
-static const size_t kLen58 = 42168;
+static const size_t kLen57 = 42168;
 
-static const char *kData58[] = {
+static const char *kData57[] = {
     "# Imported from Wycheproof's aes_gcm_siv_test.json.\n# This file is generated by convert_wycheproof.go. Do not edit by hand.\n#\n# Algorithm: AES-GCM\n# Generator version: 0.4.12\n\n[ivSize = 96]\n[keySize = 128]\n[tagSize = 128]\n\n# tcId = 1\n# draft-irtf-cfrg-gcmsiv-06\naad = \nct = \niv = 030000000000000000000000\nkey = 01000000000000000000000000000000\nmsg = \nresult = valid\ntag = dc20e2d83f25705bb49e439eca56de25\n\n# tcId = 2\n# draft-irtf-cfrg-gcmsiv-06\naad = \nct = b5d839330ac7b786\niv = 030000000000000000000000\nkey = 01000000000000000000000000000000\nmsg = 0100000000000000\nresult = valid\ntag = 578782fff6013b815b287c22493a364c\n\n# tcId = 3\n# draft-irtf-cfrg-gcmsiv-06\naad = \nct = 7323ea61d05932260047d942\niv = 030000000000000000000000\nkey = 01000000000000000000000000000000\nmsg = 010000000000000000000000\nresult = valid\ntag = a4978db357391a0bc4fdec8b0d106639\n\n# tcId = 4\n# draft-irtf-cfrg-gcmsiv-06\naad = \nct = 743f7c8077ab25f8624e2e948579cf77\niv = 030000000000000000000000\nkey = 01000000000000000000000000000000\nmsg = 01000000000000000000000000000000\nresult = valid\ntag = 303aaf90f6fe21199c6068577437a0c4\n\n# tcId = 5\n# draft-irtf-cfrg-gcmsiv-06\naad = \nct = 84e07e62ba83a6585417245d7ec413a9fe427d6315c09b57ce45f2e3936a9445\niv = 030000000000000000000000\nkey = 01000000000000000000000000000000\nmsg = 0100000000000000000000000000000002000000000000000000000000000000\nresult = valid\ntag = 1a8e45dcd4578c667cd86847bf6155ff\n\n# tcId = 6\n# draft-irtf-cfrg-gcmsiv-06\naad = \nct = 3fd24ce1f5a67b75bf2351f181a475c7b800a5b4d3dcf70106b1eea82fa1d64df42bf7226122fa92e17a40eeaac1201b\niv = 030000000000000000000000\nkey = 01000000000000000000000000000000\nmsg = 010000000000000000000000000000000200000000000000000000000000000003000000000000000000000000000000\nresult = valid\ntag = 5e6e311dbf395d35b0fe39c2714388f8\n\n# tcId = 7\n# draft-irtf-cfrg-gcmsiv-06\naad = \nct = 2433668f1058190f6d43e360f4f35cd8e475127cfca7028ea8ab5c20f7ab2af02516a2bdcbc08d521be37ff28c152bba36697f25b4cd169c6590d1dd39566d3f\niv = 030000000000000000000000\nkey = 01000000000000000000000000000000\nmsg = 01000000000000000000000000000000020000000000000000000000000000000300000000000000000000000000000004000000000000000000000000000000\nresult = valid\ntag = 8a263dd317aa88d56bdf3936dba75bb8\n\n# tcId = 8\n# draft-irtf-cfrg-gcmsiv-06\naad = 01\nct = 1e6daba35669f427\niv = 030000000000000000000000\nkey = 01000000000000000000000000000000\nmsg = 0200000000000000\nresult = valid\ntag = 3b0a1a2560969cdf790d99759abd1508\n\n# tcId = 9\n# draft-irtf-cfrg-gcmsiv-06\naad = 01\nct = 296c7889fd99f41917f44620\niv = 030000000000000000000000\nkey = 01000000000000000000000000000000\nmsg = 020000000000000000000000\nresult = valid\ntag = 08299c5102745aaa3a0c469fad9e075a\n\n# tcId = 10\n# draft-irtf-cfrg-gcmsiv-06\naad = 01\nct = e2b0c5da79a901c1745f700525cb335b\niv = 030000000000000000000000\nkey = 01000000000000000000000000000000\nmsg = 02000000000000000000000000000000\nresult = valid\ntag = 8f8936ec039e4e4bb97ebd8c4457441f\n\n# tcId = 11\n# draft-irtf-cfrg-gcmsiv-06\naad = 01\nct = 620048ef3c1e73e57e02bb8562c416a319e73e4caac8e96a1ecb2933145a1d71\niv = 030000000000000000000000\nkey = 01000000000000000000000000000000\nmsg = 0200000000000000000000000000000003000000000000000000000000000000\nresult = valid\ntag = e6af6a7f87287da059a71684ed3498e1\n\n# tcId = 12\n# draft-irtf-cfrg-gcmsiv-06\naad = 01\nct = 50c8303ea93925d64090d07bd109dfd9515a5a33431019c17d93465999a8b0053201d723120a8562b838cdff25bf9d1e\niv = 030000000000000000000000\nkey = 01000000000000000000000000000000\nmsg = 020000000000000000000000000000000300000000000000000000000000000004000000000000000000000000000000\nresult = valid\ntag = 6a8cc3865f76897c2e4b245cf31c51f2\n\n# tcId = 13\n# draft-irtf-cfrg-gcmsiv-06\naad = 01\nct = 2f5c64059db55ee0fb847ed513003746aca4e61c711b5de2e7a77ffd02da42feec601910d3467bb8b36ebbaebce5fba30d36c95f48a3e7980f0e7ac299332a80\niv = 030000000000000000000000\nkey = 01000000000000000000000000000000\nmsg = 02000000000000000000000000000000030000000000000000000000000000000400000000000000000000000000000005000000000000000000000000000000\nresult = valid\ntag = cdc46ae475563de037001ef84ae21744\n\n# tcId = 14\n# draft-irtf-cfrg-gcmsiv-06\naad = 010000000000000000000000\nct = a8fe3e87\niv = 030000000000000000000000\nkey = 01000000000000000000000000000000\nmsg = 02000000\nresult = valid\ntag = 07eb1f84fb28f8cb73de8e99e2f48a14\n\n# tcId = 15\n# draft-irtf-cfrg-gcmsiv-06\naad = 010000000000000000000000000000000200\nct = 6bb0fecf5ded9b77f902c7d5da236a4391dd0297\niv = 030000000000000000000000\nkey = 01000000000000000000000000000000\nmsg = 0300000000000000000000000000000004000000\nresult = valid\ntag = 24afc9805e976f451e6d87f6fe106514\n\n# tcId = 16\n# draft-irtf-cfrg-gcmsiv-06\naad = 0100000000000000000000000000000002000000\nct = 44d0aaf6fb2f1f34add5e8064e83e12a2ada\niv = 030000000000000000000000\nkey = 01000000000000000000000000000000\nmsg = 030000000000000000000000000000000400\nresult = valid\ntag = bff9b2ef00fb47920cc72a0c0f13b9fd\n\n# tcId = 17\n# draft-irtf-cfrg-gcmsiv-06\naad = \nct = \niv = f46e44bb3da0015c94f70887\nkey = e66021d5eb8e4f4066d4adb9c33560e4\nmsg = \nresult = valid\ntag = a4194b79071b01a87d65f706e3949578\n\n# tcId = 18\n# draft-irtf-cfrg-gcmsiv-06\naad = 46bb91c3c5\nct = af60eb\niv = bae8e37fc83441b16034566b\nkey = 36864200e0eaf5284d884a0e77d31646\nmsg = 7a806c\nresult = valid\ntag = 711bd85bc1e4d3e0a462e074eea428a8\n\n# tcId = 19\n# draft-irtf-cfrg-gcmsiv-06\naad = fc880c94a95198874296\nct = bb93a3e34d3c\niv = afc0577e34699b9e671fdd4f\nkey = aedb64a6c590bc84d1a5e269e4b47801\nmsg = bdc66f146545\nresult = valid\ntag = d6a9c45545cfc11f03ad743dba20f966\n\n# tcId = 20\n# draft-irtf-cfrg-gcmsiv-06\naad = 046787f3ea22c127aaf195d1894728\nct = 4f37281f7ad12949d0\niv = 275d1ab32f6d1f0434d8848c\nkey = d5cc1fd161320b6920ce07787f86743b\nmsg = 1177441f195495860f\nresult = valid\ntag = 1d02fd0cd174c84fc5dae2f60f52fd2b\n\n# tcId = 21\n# draft-irtf-cfrg-gcmsiv-06\naad = c9882e5386fd9f92ec489c8fde2be2cf97e74e93\nct = f54673c5ddf710c745641c8b\niv = 9e9ad8780c8d63d0ab4149c0\nkey = b3fed1473c528b8426a582995929a149\nmsg = 9f572c614b4745914474e7c7\nresult = valid\ntag = c1dc2f871fb7561da1286e655e24b7b0\n\n# tcId = 22\n# draft-irtf-cfrg-gcmsiv-06\naad = 2950a70d5a1db2316fd568378da107b52b0da55210cc1c1b0a\nct = c9ff545e07b88a015f05b274540aa1\niv = ac80e6f61455bfac8308a2d4\nkey = 2d4ed87da44102952ef94b02b805249b\nmsg = 0d8c8451178082355c9e940fea2f58\nresult = valid\ntag = 83b3449b9f39552de99dc214a1190b0b\n\n# tcId = 23\n# draft-irtf-cfrg-gcmsiv-06\naad = 1860f762ebfbd08284e421702de0de18baa9c9596291b08466f37de21c7f\nct = 6298b296e24e8cc35dce0bed484b7f30d580\niv = ae06556fb6aa7890bebc18fe\nkey = bde3b2f204d1e9f8b06bc47f9745b3d1\nmsg = 6b3db4da3d57aa94842b9803a96e07fb6de7\nresult = valid\ntag = 3e377094f04709f64d7b985310a4db84\n\n# tcId = 24\n# draft-irtf-cfrg-gcmsiv-06\naad = 7576f7028ec6eb5ea7e298342a94d4b202b370ef9768ec6561c4fe6b7e7296fa859c21\nct = 391cc328d484a4f46406181bcd62efd9b3ee197d05\niv = 6245709fb18853f68d833640\nkey = f901cfe8a69615a93fdf7a98cad48179\nmsg = e42a3c02c25b64869e146d7b233987bddfc240871d\nresult = valid\ntag = 2d15506c84a9edd65e13e9d24a2a6e70\n\n# tcId = 25\naad = \nct = \niv = 438a547a94ea88dce46c6c85\nkey = bedcfb5a011ebc84600fcb296c15af0d\nmsg = \nresult = valid\ntag = 596d0538e48526be1c991e40cc031073\n\n# tcId = 26\naad = \nct = 4f\niv = b30c084727ad1c592ac21d12\nkey = 384ea416ac3c2f51a76e7d8226346d4e\nmsg = 35\nresult = valid\ntag = 8b2b805fc0885e2b470d9dbe6cb15ed3\n\n# tcId = 27\naad = \nct = 04c7a55f97846e54\niv = b5e006ded553110e6dc56529\nkey = cae31cd9f55526eb038241fc44cac1e5\nmsg = d10989f2c52e94ad\nresult = valid\ntag = 48168ff846356c33032c719b518f18a8\n\n# tcId = 28\naad = \nct = fd9521041b0397a15b0070b93f48a9\niv = ecb0c42f7000ef0e6f95f24d\nkey = dd6197cd63c963919cf0c273ef6b28bf\nmsg = 4dcc1485365866e25ac3f2ca6aba97\nresult = valid\ntag = 09df91414578f7faf757d04ee26ab901\n\n# tcId = 29\naad = \nct = 6eb905287ddfafc32f6b1c10046c089f\niv = 0e1666f2dc652f7708fb8f0d\nkey = ffdf4228361ea1f8165852136b3480f7\nmsg = 25b12e28ac0ef6ead0226a3b2288c800\nresult = valid\ntag = 4ff9f939a77c34b0cb1ee75fcb0dd29a\n\n# tcId = 30\naad = \nct = 6f62bd09d4f36f73e289ab6dd114727fe3\niv = 965ff6643116ac1443a2dec7\nkey = c15ed227dd2e237ecd087eaaaad19ea4\nmsg = fee62fde973fe025ad6b322dcdf3c63fc7\nresult = valid\ntag = ea727c084db2bc948de0928edddd7fcf\n\n# tcId = 31\naad = \nct = 80133a4bea7311f0d3c9835144c37c4ef0ef20",
     "c8f2e36be1\niv = fbbc04fd6e025b7193eb57f6\nkey = a8ee11b26d7ceb7f17eaa1e4b83a2cf6\nmsg = c08f085e6a9e0ef3636280c11ecfadf0c1e72919ffc17eaf\nresult = valid\ntag = b92f47c1af6713e14fbdf60efebb50c6\n\n# tcId = 32\naad = \nct = 778b308e4ca17607df36c0b94695bc64603173b814701a9f69147b42478a0b1f\niv = a2dbe708db51c68ef02994a6\nkey = 7519588f30f7f08ff98e1beee6a2a783\nmsg = 1851956319256ebb0f9ccaf325a24abfc5c3e90b055e57cdc0c7ab2165ae03b1\nresult = valid\ntag = b75c98952c0aa11958a55c9c2ecf33f5\n\n# tcId = 33\naad = 30\nct = 173ba6370171be47dbb6163a63a3b725\niv = 4bad10c6d84fd43fd13ad36f\nkey = a5b5b6bae45b741fe4663890098f326a\nmsg = 127b150080ec0bc7704e26f4ab11abb6\nresult = valid\ntag = 53aefed6e971d5a1f435f0730a6dd0fd\n\n# tcId = 34\naad = 743e\nct = 959f0ff12481dedc4302ad7a904f9486\niv = 2186a3091237adae83540e24\nkey = 0cecb9f512932d68e2c7c0bc4bd621c8\nmsg = 437aeb94d842283ba57bb758e3d229f0\nresult = valid\ntag = 0215be2ab9b0672a7b82893891057c9c\n\n# tcId = 35\naad = 25591707c004f506f4b51e85e29f6a\nct = 8ae3a16a237f1358ac8cfeb5f4cc2818\niv = 0c908e58cddad69dea1a32c3\nkey = 55e04c122780be52ed9328928039008c\nmsg = 26eb70672eef03667b34cc7d0df05872\nresult = valid\ntag = 28f5aa8a34a9f7c01c17759d142b1bae\n\n# tcId = 36\naad = c07092d799dac2b4c05fbddd04743c34\nct = d5220f6a49d1e4c10d38c77c8156ebd0\niv = c30968c967e53505621628db\nkey = 5f0a1b5f8f8673d566ec7f54e7dca4f2\nmsg = f6538476daf04524cf134309dd84e187\nresult = valid\ntag = 80b50f526286dad22d40984636f0e9ce\n\n# tcId = 37\naad = 3ea12d80f40f34f812479d2ecc13d2d6df\nct = 3e771b9376e1d1cde3d9b73349c958bc\niv = a51c37f467893c1608e56274\nkey = 671a70e883fb0611dffd0b1dd9b8cca2\nmsg = 3baf3edf04dc0c97aae081cdeb08021d\nresult = valid\ntag = ebd3ea678a1e87839a4356584ea89bac\n\n# tcId = 38\naad = 5189ea6f39b2a78c0202fdff146c5cc6bdc7491d4786f80c6c6aef65634c05da\nct = 05b568a589d0a77a8ee9c6f06415c6b6\niv = 52c20979cdaaade573dba650\nkey = 63f03172505d90e94900125cb8a4b0dd\nmsg = 602c98997ee03fd11ce00e92de193977\nresult = valid\ntag = 91ba5089dffb7538199c441728d5f84a\n\n# tcId = 39\n# Testing for ctr overflow\naad = 395f4091b410c373073bcdc79e02d3af\nct = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\niv = 010101010101010101010101\nkey = 00112233445566778899aabbccddeeff\nmsg = 43488548d88e6f774bcd2d52c18fbcc933a4e9a9613ff3edbe959ec59522adc098b3133b8d17b9e9dad631ad33752c95\nresult = valid\ntag = 00000000000000000000000000000000\n# The counter for AES-GCM-SIV is reduced modulo 2**32. This test vector was\n# constructed to test for correct wrapping of the counter.\n\n# tcId = 40\n# Testing for ctr overflow\naad = 616b2dff4d665e5f7ab890723dd981b1\nct = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\niv = 000000000000000000000000\nkey = 00112233445566778899aabbccddeeff\nmsg = f012c6a7eb0e8af5bc45e015e7680a693dc709b95383f6a94babec1bc36e4be3cf4f55a31a94f11c6c3f90eed99682bc\nresult = valid\ntag = ffffffffffffffffffffffffffffffff\n# The counter for AES-GCM-SIV is reduced modulo 2**32. This test vector was\n# constructed to test for correct wrapping of the counter.\n\n# tcId = 41\n# Testing for ctr overflow\naad = 387a8997605fd04ae8951c4759087864\nct = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\niv = 030303030303030303030303\nkey = 00112233445566778899aabbccddeeff\nmsg = 71ceee58179d6fb968521e9594dbf98cc0040f6aa38fe873c32a9b122d6cbfd51aa4778b3f4f37be7348690d97e2468b\nresult = valid\ntag = fefffffffefffffffefffffffeffffff\n# The counter for AES-GCM-SIV is reduced modulo 2**32. This test vector was\n# constructed to test for correct wrapping of the counter.\n\n# tcId = 42\n# Testing for ctr overflow\naad = 6783b0d5e9d8a2a7274065797097d1ae\nct = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\niv = 060606060606060606060606\nkey = 00112233445566778899aabbccddeeff\nmsg = 2e14f9e9a09ea204557367898a80dcad117af3666bea25762b70633a9f3614fbe631ba617c371fd5566d5e613496e69f\nresult = valid\ntag = ffffff7f00112233445566778899aabb\n# The counter for AES-GCM-SIV is reduced modulo 2**32. This test vector was\n# constructed to test for correct wrapping of the counter.\n\n# tcId = 43\n# Testing for ctr overflow\naad = 2933810c146f4f7dd146dd43f35199c6\nct = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\niv = 010101010101010101010101\nkey = 00112233445566778899aabbccddeeff\nmsg = 27fac75879c9d87cd52a0793137ba792f6f145148158eb538f2081e09cd0315986a7025045ecbb2ca1bb18a17bfcd567\nresult = valid\ntag = ffffffffffffff7f0011223344556677\n# The counter for AES-GCM-SIV is reduced modulo 2**32. This test vector was\n# constructed to test for correct wrapping of the counter.\n\n# tcId = 44\n# Flipped bit 0 in tag\naad = 27dd62060507dae87c4f93f391ba15f9\nct = \niv = 000000000000000000000000\nkey = 00112233445566778899aabbccddeeff\nmsg = \nresult = invalid\ntag = 0987e35e40981a2730c1740c7201731f\n\n# tcId = 45\n# Flipped bit 0 in tag\naad = 9ea3371e258288d5a01b15384e2c99ee\nct = 00000000000000000000000000000000\niv = 000000000000000000000000\nkey = 00112233445566778899aabbccddeeff\nmsg = 03c0e39b77bd62d32568f4c86c90bfdb\nresult = invalid\ntag = 13a1883272188b4c8d2727178198fe95\n\n# tcId = 46\n# Flipped bit 0 in tag\naad = ce24e3ec0fe7b8550d621b71fdb5d0eb\nct = 0000000000000000\niv = 000000000000000000000000\nkey = 00112233445566778899aabbccddeeff\nmsg = 63995888995b338c\nresult = invalid\ntag = 00000000000000000000000000000000\n\n# tcId = 47\n# Flipped bit 7 in tag\naad = 1471f354b359c235117febba854a823b\nct = 00000000000000000000000000000000\niv = 000000000000000000000000\nkey = 00112233445566778899aabbccddeeff\nmsg = 03c0e39b77bd62d32568f4c86c90bfdb\nresult = invalid\ntag = 13a1883272188b4c8d2727178198fe95\n\n# tcId = 48\n# Flipped bit 7 in tag\naad = 11f820294fc9d13f1895d2fb5509913b\nct = 0000000000000000\niv = 000000000000000000000000\nkey = 00112233445566778899aabbccddeeff\nmsg = 63995888995b338c\nresult = invalid\ntag = 00000000000000000000000000000000\n\n# tcId = 49\n# Flipped bit 8 in tag\naad = 45e7257b814f09de44177b27b914822f\nct = 00000000000000000000000000000000\niv = 000000000000000000000000\nkey = 00112233445566778899aabbccddeeff\nmsg = 03c0e39b77bd62d32568f4c86c90bfdb\nresult = invalid\ntag = 13a1883272188b4c8d2727178198fe95\n\n# tcId = 50\n# Flipped bit 8 in tag\naad = 4c49780b5438c4a7ea9795b9856fdae1\nct = 0000000000000000\niv = 000000000000000000000000\nkey = 00112233445566778899aabbccddeeff\nmsg = 63995888995b338c\nresult = invalid\ntag = 00000000000000000000000000000000\n\n# tcId = 51\n# Flipped bit 8 in tag\naad = ecc2f2f4142837a34f9cd1fa030a5d7f\nct = ffffffffffffffff\niv = 000000000000000000000000\nkey = 00112233445566778899aabbccddeeff\nmsg = 0fed395814f1750a\nresult = invalid\ntag = ffffffffffffffffffffffffffffffff\n\n# tcId = 52\n# Flipped bit 31 in tag\naad = 69c7f5605da8e0684990b087411f8cf5\nct = 0000000000000000\niv = 000000000000000000000000\nkey = 00112233445566778899aabbccddeeff\nmsg = 63995888995b338c\nresult = invalid\ntag = 00000000000000000000000000000000\n\n# tcId = 53\n# Flipped bit 31 in tag\naad = 20b346be60e7e97588bf504ce707ce0b\nct = ffffffffffffffff\niv = 000000000000000000000000\nkey = 00112233445566778899aabbccddeeff\nmsg = 0fed395814f1750a\nresult = invalid\ntag = ffffffffffffffffffffffffffffffff\n\n# tcId = 54\n# Flipped bit 63 in tag\naad = 19b298f3a061a73cb774da927ce11ca2\nct = 0000000000000000\niv = 000000000000000000000000\nkey = 00112233445566778899aabbccddeeff\nmsg = 63995888995b338c\nresult = invalid\ntag = 00000000000000000000000000000000\n\n# tcId = 55\n# Flipped bit 63 in tag\naad = bff8c631e61c18a050a523ad4a750a20\nct = ffffffffffffffff\niv = 000000000000000000000000\nkey = 00112233445566778899aabbccddeeff\nmsg = 0fed395814f1750a\nresult = invalid\ntag = ffffffffffffffffffffffffffffffff\n\n# tcId = 56\n# Flipped bit 64 in tag\naad = 7b6171302b689c926852163e310f08d4\nct = 00000000000000000000000000000000\niv = 000000000000000000000000\nkey = 00112233445566778899aabbccddeeff\nmsg = 03c0e39b77bd62d32568f4c86c90bfdb\nresult = invalid\ntag = 13a1883272188b4c8d2727178198fe95\n\n# tcId = 57\n# Flipped bit 97 in tag\naad = 555036128fa18ecadd090cb772ac0bf3\nct = \niv = 000000000000000000000000\nkey = 00112233445566778899aabbccddeeff\nmsg = \nresult = invalid\ntag = 0987e35e40981a2730c1740c7201731f\n\n# tcId = 58\n# Flipped ",
     "bit 97 in tag\naad = a5b43b8e1dbb2bfbda1b625fee4064a7\nct = 0000000000000000\niv = 000000000000000000000000\nkey = 00112233445566778899aabbccddeeff\nmsg = 63995888995b338c\nresult = invalid\ntag = 00000000000000000000000000000000\n\n# tcId = 59\n# Flipped bit 120 in tag\naad = ae47cc5d7681dd480c23469c5519b647\nct = \niv = 000000000000000000000000\nkey = 00112233445566778899aabbccddeeff\nmsg = \nresult = invalid\ntag = 0987e35e40981a2730c1740c7201731f\n\n# tcId = 60\n# Flipped bit 120 in tag\naad = d53dd677184702eaa660f1349195fc04\nct = 00000000000000000000000000000000\niv = 000000000000000000000000\nkey = 00112233445566778899aabbccddeeff\nmsg = 03c0e39b77bd62d32568f4c86c90bfdb\nresult = invalid\ntag = 13a1883272188b4c8d2727178198fe95\n\n# tcId = 61\n# Flipped bit 120 in tag\naad = dc78584e4599dd4b2fb333db2f9ccb95\nct = ffffffffffffffff\niv = 000000000000000000000000\nkey = 00112233445566778899aabbccddeeff\nmsg = 0fed395814f1750a\nresult = invalid\ntag = ffffffffffffffffffffffffffffffff\n\n# tcId = 62\n# Flipped bit 121 in tag\naad = 0bfd9271e79153a8afdb7f3d96fe446f\nct = \niv = 000000000000000000000000\nkey = 00112233445566778899aabbccddeeff\nmsg = \nresult = invalid\ntag = 0987e35e40981a2730c1740c7201731f\n\n# tcId = 63\n# Flipped bit 121 in tag\naad = 1e0537a95b7200134d0b440657d50fd1\nct = 0000000000000000\niv = 000000000000000000000000\nkey = 00112233445566778899aabbccddeeff\nmsg = 63995888995b338c\nresult = invalid\ntag = 00000000000000000000000000000000\n\n# tcId = 64\n# Flipped bit 121 in tag\naad = 7633155df35857258d23b0651d60847c\nct = ffffffffffffffff\niv = 000000000000000000000000\nkey = 00112233445566778899aabbccddeeff\nmsg = 0fed395814f1750a\nresult = invalid\ntag = ffffffffffffffffffffffffffffffff\n\n# tcId = 65\n# Flipped bit 126 in tag\naad = ab0a064b473de43598adf81ee297d856\nct = ffffffffffffffff\niv = 000000000000000000000000\nkey = 00112233445566778899aabbccddeeff\nmsg = 0fed395814f1750a\nresult = invalid\ntag = ffffffffffffffffffffffffffffffff\n\n# tcId = 66\n# Flipped bit 127 in tag\naad = f62bdc3f4fcb699ee12f6e87dcc704cb\nct = \niv = 000000000000000000000000\nkey = 00112233445566778899aabbccddeeff\nmsg = \nresult = invalid\ntag = 0987e35e40981a2730c1740c7201731f\n\n# tcId = 67\n# Flipped bit 127 in tag\naad = 1320051031807b8f44e9d2cb1ec6aa92\nct = 00000000000000000000000000000000\niv = 000000000000000000000000\nkey = 00112233445566778899aabbccddeeff\nmsg = 03c0e39b77bd62d32568f4c86c90bfdb\nresult = invalid\ntag = 13a1883272188b4c8d2727178198fe95\n\n# tcId = 68\n# Flipped bit 127 in tag\naad = 329b813d3ae2225d3e15f97a28037bcc\nct = 0000000000000000\niv = 000000000000000000000000\nkey = 00112233445566778899aabbccddeeff\nmsg = 63995888995b338c\nresult = invalid\ntag = 00000000000000000000000000000000\n\n# tcId = 69\n# Flipped bit 0..127 in tag\naad = edc723bedd0078696acdea005c74b841\nct = 0000000000000000\niv = 000000000000000000000000\nkey = 00112233445566778899aabbccddeeff\nmsg = 63995888995b338c\nresult = invalid\ntag = 00000000000000000000000000000000\n\n[ivSize = 96]\n[keySize = 256]\n[tagSize = 128]\n\n# tcId = 70\n# draft-irtf-cfrg-gcmsiv-06\naad = \nct = \niv = 030000000000000000000000\nkey = 0100000000000000000000000000000000000000000000000000000000000000\nmsg = \nresult = valid\ntag = 07f5f4169bbf55a8400cd47ea6fd400f\n\n# tcId = 71\n# draft-irtf-cfrg-gcmsiv-06\naad = \nct = c2ef328e5c71c83b\niv = 030000000000000000000000\nkey = 0100000000000000000000000000000000000000000000000000000000000000\nmsg = 0100000000000000\nresult = valid\ntag = 843122130f7364b761e0b97427e3df28\n\n# tcId = 72\n# draft-irtf-cfrg-gcmsiv-06\naad = \nct = 9aab2aeb3faa0a34aea8e2b1\niv = 030000000000000000000000\nkey = 0100000000000000000000000000000000000000000000000000000000000000\nmsg = 010000000000000000000000\nresult = valid\ntag = 8ca50da9ae6559e48fd10f6e5c9ca17e\n\n# tcId = 73\n# draft-irtf-cfrg-gcmsiv-06\naad = \nct = 85a01b63025ba19b7fd3ddfc033b3e76\niv = 030000000000000000000000\nkey = 0100000000000000000000000000000000000000000000000000000000000000\nmsg = 01000000000000000000000000000000\nresult = valid\ntag = c9eac6fa700942702e90862383c6c366\n\n# tcId = 74\n# draft-irtf-cfrg-gcmsiv-06\naad = \nct = 4a6a9db4c8c6549201b9edb53006cba821ec9cf850948a7c86c68ac7539d027f\niv = 030000000000000000000000\nkey = 0100000000000000000000000000000000000000000000000000000000000000\nmsg = 0100000000000000000000000000000002000000000000000000000000000000\nresult = valid\ntag = e819e63abcd020b006a976397632eb5d\n\n# tcId = 75\n# draft-irtf-cfrg-gcmsiv-06\naad = \nct = c00d121893a9fa603f48ccc1ca3c57ce7499245ea0046db16c53c7c66fe717e39cf6c748837b61f6ee3adcee17534ed5\niv = 030000000000000000000000\nkey = 0100000000000000000000000000000000000000000000000000000000000000\nmsg = 010000000000000000000000000000000200000000000000000000000000000003000000000000000000000000000000\nresult = valid\ntag = 790bc96880a99ba804bd12c0e6a22cc4\n\n# tcId = 76\n# draft-irtf-cfrg-gcmsiv-06\naad = \nct = c2d5160a1f8683834910acdafc41fbb1632d4a353e8b905ec9a5499ac34f96c7e1049eb080883891a4db8caaa1f99dd004d80487540735234e3744512c6f90ce\niv = 030000000000000000000000\nkey = 0100000000000000000000000000000000000000000000000000000000000000\nmsg = 01000000000000000000000000000000020000000000000000000000000000000300000000000000000000000000000004000000000000000000000000000000\nresult = valid\ntag = 112864c269fc0d9d88c61fa47e39aa08\n\n# tcId = 77\n# draft-irtf-cfrg-gcmsiv-06\naad = 01\nct = 1de22967237a8132\niv = 030000000000000000000000\nkey = 0100000000000000000000000000000000000000000000000000000000000000\nmsg = 0200000000000000\nresult = valid\ntag = 91213f267e3b452f02d01ae33e4ec854\n\n# tcId = 78\n# draft-irtf-cfrg-gcmsiv-06\naad = 01\nct = 163d6f9cc1b346cd453a2e4c\niv = 030000000000000000000000\nkey = 0100000000000000000000000000000000000000000000000000000000000000\nmsg = 020000000000000000000000\nresult = valid\ntag = c1a4a19ae800941ccdc57cc8413c277f\n\n# tcId = 79\n# draft-irtf-cfrg-gcmsiv-06\naad = 01\nct = c91545823cc24f17dbb0e9e807d5ec17\niv = 030000000000000000000000\nkey = 0100000000000000000000000000000000000000000000000000000000000000\nmsg = 02000000000000000000000000000000\nresult = valid\ntag = b292d28ff61189e8e49f3875ef91aff7\n\n# tcId = 80\n# draft-irtf-cfrg-gcmsiv-06\naad = 01\nct = 07dad364bfc2b9da89116d7bef6daaaf6f255510aa654f920ac81b94e8bad365\niv = 030000000000000000000000\nkey = 0100000000000000000000000000000000000000000000000000000000000000\nmsg = 0200000000000000000000000000000003000000000000000000000000000000\nresult = valid\ntag = aea1bad12702e1965604374aab96dbbc\n\n# tcId = 81\n# draft-irtf-cfrg-gcmsiv-06\naad = 01\nct = c67a1f0f567a5198aa1fcc8e3f21314336f7f51ca8b1af61feac35a86416fa47fbca3b5f749cdf564527f2314f42fe25\niv = 030000000000000000000000\nkey = 0100000000000000000000000000000000000000000000000000000000000000\nmsg = 020000000000000000000000000000000300000000000000000000000000000004000000000000000000000000000000\nresult = valid\ntag = 03332742b228c647173616cfd44c54eb\n\n# tcId = 82\n# draft-irtf-cfrg-gcmsiv-06\naad = 01\nct = 67fd45e126bfb9a79930c43aad2d36967d3f0e4d217c1e551f59727870beefc98cb933a8fce9de887b1e40799988db1fc3f91880ed405b2dd298318858467c89\niv = 030000000000000000000000\nkey = 0100000000000000000000000000000000000000000000000000000000000000\nmsg = 02000000000000000000000000000000030000000000000000000000000000000400000000000000000000000000000005000000000000000000000000000000\nresult = valid\ntag = 5bde0285037c5de81e5b570a049b62a0\n\n# tcId = 83\n# draft-irtf-cfrg-gcmsiv-06\naad = 010000000000000000000000\nct = 22b3f4cd\niv = 030000000000000000000000\nkey = 0100000000000000000000000000000000000000000000000000000000000000\nmsg = 02000000\nresult = valid\ntag = 1835e517741dfddccfa07fa4661b74cf\n\n# tcId = 84\n# draft-irtf-cfrg-gcmsiv-06\naad = 010000000000000000000000000000000200\nct = 43dd0163cdb48f9fe3212bf61b201976067f342b\niv = 030000000000000000000000\nkey = 0100000000000000000000000000000000000000000000000000000000000000\nmsg = 0300000000000000000000000000000004000000\nresult = valid\ntag = b879ad976d8242acc188ab59cabfe307\n\n# tcId = 85\n# draft-irtf-cfrg-gcmsiv-06\naad = 0100000000000000000000000000000002000000\nct = 462401724b5ce6588d5a54aae5375513a075\niv = 030000000000000000000000\nkey = 0100000000000000000000000000000000000000000000000000000000000000\nmsg = 030000000000000000000000000000000400\nresult = valid\ntag = cfcdf5042112aa29685c912fc2056543\n\n# tcId = 86\n# draft-irtf-cfrg-gcmsiv-06\naad = \nct = \niv =",
@@ -2855,9 +2836,9 @@
     "r AES-GCM-SIV is reduced modulo 2**32. This test vector was\n# constructed to test for correct wrapping of the counter.\n\n# tcId = 113\n# Testing for ctr overflow\naad = 0814a95481bf915a4097949e3525c7e7\nct = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\niv = 000000000000000000000000\nkey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nmsg = 6492a73880dac7f36743715b0fc7063d3e46a25044310bba5849ed88bfcb54b0adbe3978040bda849906e1aa09d1a8e3\nresult = valid\ntag = ffffff7f00112233445566778899aabb\n# The counter for AES-GCM-SIV is reduced modulo 2**32. This test vector was\n# constructed to test for correct wrapping of the counter.\n\n# tcId = 114\n# Testing for ctr overflow\naad = b691ef42f2ab8d1b4a581bb08394b13a\nct = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\niv = 010101010101010101010101\nkey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nmsg = 7848d9e872f40bca1b82a4e7185fb75193b3496cc1dc2a72b86ed156ab8389e71687ed25eb6485e66561fa8c39853368\nresult = valid\ntag = ffffffffffffff7f0011223344556677\n# The counter for AES-GCM-SIV is reduced modulo 2**32. This test vector was\n# constructed to test for correct wrapping of the counter.\n\n# tcId = 115\n# Flipped bit 0 in tag\naad = e144878b0bbbf01b75231277e1e0d114\nct = 00000000000000000000000000000000\niv = 000000000000000000000000\nkey = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff\nmsg = f663044a4e7dd822aba0b7de2d869981\nresult = invalid\ntag = 13a1883272188b4c8d2727178198fe95\n\n# tcId = 116\n# Flipped bit 0 in tag\naad = 0289eaa93eb084107d2088435ef2a0cd\nct = ffffffffffffffff\niv = 000000000000000000000000\nkey = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff\nmsg = 49861b1fb6bcf8e4\nresult = invalid\ntag = ffffffffffffffffffffffffffffffff\n\n# tcId = 117\n# Flipped bit 1 in tag\naad = f3bd6013669b7d9371727fcb1aafea75\nct = ffffffffffffffff\niv = 000000000000000000000000\nkey = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff\nmsg = 49861b1fb6bcf8e4\nresult = invalid\ntag = ffffffffffffffffffffffffffffffff\n\n# tcId = 118\n# Flipped bit 7 in tag\naad = 922e91b2c5016e4303c737d1608ca25f\nct = \niv = 000000000000000000000000\nkey = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff\nmsg = \nresult = invalid\ntag = 0987e35e40981a2730c1740c7201731f\n\n# tcId = 119\n# Flipped bit 7 in tag\naad = 7195dd0addce5dd7014bfddb2f23206f\nct = 0000000000000000\niv = 000000000000000000000000\nkey = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff\nmsg = 759dfbbb8a251ccc\nresult = invalid\ntag = 00000000000000000000000000000000\n\n# tcId = 120\n# Flipped bit 7 in tag\naad = 32fc2a53e9678f1fc6d63081c36c6f2c\nct = ffffffffffffffff\niv = 000000000000000000000000\nkey = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff\nmsg = 49861b1fb6bcf8e4\nresult = invalid\ntag = ffffffffffffffffffffffffffffffff\n\n# tcId = 121\n# Flipped bit 8 in tag\naad = c55ba71ee250216f8ecfe822d712dd38\nct = \niv = 000000000000000000000000\nkey = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff\nmsg = \nresult = invalid\ntag = 0987e35e40981a2730c1740c7201731f\n\n# tcId = 122\n# Flipped bit 8 in tag\naad = 5546acf865fc305fbd7ff1092cb9c2c3\nct = 0000000000000000\niv = 000000000000000000000000\nkey = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff\nmsg = 759dfbbb8a251ccc\nresult = invalid\ntag = 00000000000000000000000000000000\n\n# tcId = 123\n# Flipped bit 31 in tag\naad = 6b060eebe1843b409a4dfd0be8f86a2b\nct = 00000000000000000000000000000000\niv = 000000000000000000000000\nkey = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff\nmsg = f663044a4e7dd822aba0b7de2d869981\nresult = invalid\ntag = 13a1883272188b4c8d2727178198fe95\n\n# tcId = 124\n# Flipped bit 31 in tag\naad = c4adb92f1a60eb2faff88675f62a7276\nct = 0000000000000000\niv = 000000000000000000000000\nkey = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff\nmsg = 759dfbbb8a251ccc\nresult = invalid\ntag = 00000000000000000000000000000000\n\n# tcId = 125\n# Flipped bit 32 in tag\naad = 70c5a8591f52f869c6415a6d7000e253\nct = 00000000000000000000000000000000\niv = 000000000000000000000000\nkey = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff\nmsg = f663044a4e7dd822aba0b7de2d869981\nresult = invalid\ntag = 13a1883272188b4c8d2727178198fe95\n\n# tcId = 126\n# Flipped bit 63 in tag\naad = b5fe79f182cb9f2945208e29513928d1\nct = \niv = 000000000000000000000000\nkey = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff\nmsg = \nresult = invalid\ntag = 0987e35e40981a2730c1740c7201731f\n\n# tcId = 127\n# Flipped bit 63 in tag\naad = c1dbf87e4a586b040c53f6dd9063b4cd\nct = ffffffffffffffff\niv = 000000000000000000000000\nkey = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff\nmsg = 49861b1fb6bcf8e4\nresult = invalid\ntag = ffffffffffffffffffffffffffffffff\n\n# tcId = 128\n# Flipped bit 64 in tag\naad = 845466e603ca85a224693d150ae13ba3\nct = 0000000000000000\niv = 000000000000000000000000\nkey = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff\nmsg = 759dfbbb8a251ccc\nresult = invalid\ntag = 00000000000000000000000000000000\n\n# tcId = 129\n# Flipped bit 97 in tag\naad = 18cb9f5eede6224fa3fcd525cf9f958b\nct = 00000000000000000000000000000000\niv = 000000000000000000000000\nkey = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff\nmsg = f663044a4e7dd822aba0b7de2d869981\nresult = invalid\ntag = 13a1883272188b4c8d2727178198fe95\n\n# tcId = 130\n# Flipped bit 97 in tag\naad = 8c4fbca37d2e361856b9f80adf455fa0\nct = 0000000000000000\niv = 000000000000000000000000\nkey = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff\nmsg = 759dfbbb8a251ccc\nresult = invalid\ntag = 00000000000000000000000000000000\n\n# tcId = 131\n# Flipped bit 97 in tag\naad = bc517fe140abf2b42eb1cafe8c0715a9\nct = ffffffffffffffff\niv = 000000000000000000000000\nkey = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff\nmsg = 49861b1fb6bcf8e4\nresult = invalid\ntag = ffffffffffffffffffffffffffffffff\n\n# tcId = 132\n# Flipped bit 120 in tag\naad = 617e1c5ef62ed35cf678e670f116ff2f\nct = \niv = 000000000000000000000000\nkey = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff\nmsg = \nresult = invalid\ntag = 0987e35e40981a2730c1740c7201731f\n\n# tcId = 133\n# Flipped bit 120 in tag\naad = e71802b7a37e8ef1f001ef0c52c636f2\nct = 00000000000000000000000000000000\niv = 000000000000000000000000\nkey = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff\nmsg = f663044a4e7dd822aba0b7de2d869981\nresult = invalid\ntag = 13a1883272188b4c8d2727178198fe95\n\n# tcId = 134\n# Flipped bit 120 in tag\naad = be647e37f154d4a8edca5a29ca221cc5\nct = 0000000000000000\niv = 000000000000000000000000\nkey = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff\nmsg = 759dfbbb8a251ccc\nresult = invalid\ntag = 00000000000000000000000000000000\n\n# tcId = 135\n# Flipped bit 121 in tag\naad = b3caa01f49c7cbc56c7c92547257957e\nct = 00000000000000000000000000000000\niv = 000000000000000000000000\nkey = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff\nmsg = f663044a4e7dd822aba0b7de2d869981\nresult = invalid\ntag = 13a1883272188b4c8d2727178198fe95\n\n# tcId = 136\n# Flipped bit 121 in tag\naad = ab0347a2aec4cc4c366583062442ba07\nct = 0000000000000000\niv = 000000000000000000000000\nkey = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff\nmsg = 759dfbbb8a251ccc\nresult = invalid\ntag = 00000000000000000000000000000000\n\n# tcId = 137\n# Flipped bit 126 in tag\naad = 62573ef39a27f77b37fb7bfc84e46cee\nct = \niv = 000000000000000000000000\nkey = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff\nmsg = \nresult = invalid\ntag = 0987e35e40981a2730c1740c7201731f\n\n# tcId = 138\n# Flipped bit 126 in tag\naad = 28e3cadfb16834e824642e965588c200\nct = 0000000000000000\niv = 000000000000000000000000\nkey = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff\nmsg = 759dfbbb8a251ccc\nresult = invalid\ntag = 00000000000000000000000000000000\n\n# tcId = 139\n# Flipped bit 126 in tag\naad = 7edd2fc15bed224a46dc8608e1766080\nct = ffffffffffffffff\niv = 000000000000000000000000\nkey = 00112233445566778899aabbccddeeff00112233445566778899aabbccdd",
     "eeff\nmsg = 49861b1fb6bcf8e4\nresult = invalid\ntag = ffffffffffffffffffffffffffffffff\n\n# tcId = 140\n# Flipped bit 127 in tag\naad = 7e0e03104e2c0ff20ba4c35742180c5b\nct = \niv = 000000000000000000000000\nkey = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff\nmsg = \nresult = invalid\ntag = 0987e35e40981a2730c1740c7201731f\n\n# tcId = 141\n# Flipped bit 127 in tag\naad = 9a24dc75c5ddd3bab57ff532eb86d224\nct = 00000000000000000000000000000000\niv = 000000000000000000000000\nkey = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff\nmsg = f663044a4e7dd822aba0b7de2d869981\nresult = invalid\ntag = 13a1883272188b4c8d2727178198fe95\n\n# tcId = 142\n# Flipped bit 127 in tag\naad = 3196aec499c15bc043b6866ba0df6e6b\nct = ffffffffffffffff\niv = 000000000000000000000000\nkey = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff\nmsg = 49861b1fb6bcf8e4\nresult = invalid\ntag = ffffffffffffffffffffffffffffffff\n\n# tcId = 143\n# Flipped bit 0..127 in tag\naad = 55a2987aa94bf46ad1b6d253a44c1622\nct = ffffffffffffffff\niv = 000000000000000000000000\nkey = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff\nmsg = 49861b1fb6bcf8e4\nresult = invalid\ntag = ffffffffffffffffffffffffffffffff\n\n",
 };
-static const size_t kLen59 = 66052;
+static const size_t kLen58 = 66052;
 
-static const char *kData59[] = {
+static const char *kData58[] = {
     "# Imported from Wycheproof's aes_gcm_test.json.\n# This file is generated by convert_wycheproof.go. Do not edit by hand.\n#\n# Algorithm: AES-GCM\n# Generator version: 0.4.12\n\n[ivSize = 96]\n[keySize = 128]\n[tagSize = 128]\n\n# tcId = 1\naad = \nct = 26073cc1d851beff176384dc9896d5ff\niv = 028318abc1824029138141a2\nkey = 5b9604fe14eadba931b0ccf34843dab9\nmsg = 001d0c231287c1182784554ca3a21908\nresult = valid\ntag = 0a3ea7a5487cb5f7d70fb6c58d038554\n\n# tcId = 2\naad = 00112233445566778899aabbccddeeff\nct = 49d8b9783e911913d87094d1f63cc765\niv = 921d2507fa8007b7bd067d34\nkey = 5b9604fe14eadba931b0ccf34843dab9\nmsg = 001d0c231287c1182784554ca3a21908\nresult = valid\ntag = 1e348ba07cca2cf04c618cb4d43a5b92\n\n# tcId = 3\naad = aac39231129872a2\nct = eea945f3d0f98cc0fbab472a0cf24e87\niv = 0432bc49ac34412081288127\nkey = aa023d0478dcb2b2312498293d9a9129\nmsg = 2035af313d1346ab00154fea78322105\nresult = valid\ntag = 4bb9b4812519dadf9e1232016d068133\n\n# tcId = 4\naad = \nct = 54\niv = b30c084727ad1c592ac21d12\nkey = 384ea416ac3c2f51a76e7d8226346d4e\nmsg = 35\nresult = valid\ntag = 7c1e4ae88bb27e5638343cb9fd3f6337\n\n# tcId = 5\naad = \nct = a036ead03193903f\niv = b5e006ded553110e6dc56529\nkey = cae31cd9f55526eb038241fc44cac1e5\nmsg = d10989f2c52e94ad\nresult = valid\ntag = 3b626940e0e9f0cbea8e18c437fd6011\n\n# tcId = 6\naad = \nct = 8a9992388e735f80ee18f4a63c10ad\niv = ecb0c42f7000ef0e6f95f24d\nkey = dd6197cd63c963919cf0c273ef6b28bf\nmsg = 4dcc1485365866e25ac3f2ca6aba97\nresult = valid\ntag = 1486a91cccf92c9a5b00f7b0e034891c\n\n# tcId = 7\naad = \nct = f7bd379d130477176b8bb3cb23dbbbaa\niv = 0e1666f2dc652f7708fb8f0d\nkey = ffdf4228361ea1f8165852136b3480f7\nmsg = 25b12e28ac0ef6ead0226a3b2288c800\nresult = valid\ntag = 1ee6513ce30c7873f59dd4350a588f42\n\n# tcId = 8\naad = \nct = 0de51fe4f7f2d1f0f917569f5c6d1b009c\niv = 965ff6643116ac1443a2dec7\nkey = c15ed227dd2e237ecd087eaaaad19ea4\nmsg = fee62fde973fe025ad6b322dcdf3c63fc7\nresult = valid\ntag = 6cd8521422c0177e83ef1b7a845d97db\n\n# tcId = 9\naad = \nct = 7cd9f4e4f365704fff3b9900aa93ba54b672bac554275650\niv = fbbc04fd6e025b7193eb57f6\nkey = a8ee11b26d7ceb7f17eaa1e4b83a2cf6\nmsg = c08f085e6a9e0ef3636280c11ecfadf0c1e72919ffc17eaf\nresult = valid\ntag = f4eb193241226db017b32ec38ca47217\n\n# tcId = 10\naad = c3\nct = f58d453212c2c8a436e9283672f579f119122978\niv = 32bcb9b569e3b852d37c766a\nkey = 28ff3def08179311e2734c6d1c4e2871\nmsg = dfc61a20df8505b53e3cd59f25770d5018add3d6\nresult = valid\ntag = 5901131d0760c8715901d881fdfd3bc0\n\n# tcId = 11\naad = 834afdc5c737186b\nct = bf864616c2347509ca9b10446379b9bdbb3b8f64\niv = 9c3a4263d983456658aad4b1\nkey = e63a43216c08867210e248859eb5e99c\nmsg = b14da56b0462dc05b871fc815273ff4810f92f4b\nresult = valid\ntag = a97d25b490390b53c5db91f6ee2a15b8\n\n# tcId = 12\naad = 4020855c66ac4595058395f367201c4c\nct = a6f2ef3c7ef74a126dd2d5f6673964e27d5b34b6\niv = 33e90658416e7c1a7c005f11\nkey = 38449890234eb8afab0bbf82e2385454\nmsg = f762776bf83163b323ca63a6b3adeac1e1357262\nresult = valid\ntag = b8bbdc4f5014bc752c8b4e9b87f650a3\n\n# tcId = 13\naad = 76eb5f147250fa3c12bff0a6e3934a0b16860cf11646773b\nct = bd64802cfebaeb487d3a8f76ce943a37b3472dd5\niv = 9f0d85b605711f34cd2a35ba\nkey = 6a68671dfe323d419894381f85eb63fd\nmsg = 0fc67899c3f1bbe196d90f1eca3797389230aa37\nresult = valid\ntag = fce9a5b530c7d7af718be1ec0ae9ed4d\n\n# tcId = 14\n# special case\naad = \nct = f62d84d649e56bc8cfedc5d74a51e2f7\niv = 000000000000000000000000\nkey = 00112233445566778899aabbccddeeff\nmsg = ebd4a3e10cf6d41c50aeae007563b072\nresult = valid\ntag = ffffffffffffffffffffffffffffffff\n\n# tcId = 15\n# special case\naad = \nct = 431f31e6840931fd95f94bf88296ff69\niv = ffffffffffffffffffffffff\nkey = 00112233445566778899aabbccddeeff\nmsg = d593c4d8224f1b100c35e4f6c4006543\nresult = valid\ntag = 00000000000000000000000000000000\n\n# tcId = 16\n# Flipped bit 0 in tag\naad = \nct = eb156d081ed6b6b55f4612f021d87b39\niv = 505152535455565758595a5b\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = 202122232425262728292a2b2c2d2e2f\nresult = invalid\ntag = d9847dbc326a06e988c77ad3863e6083\n\n# tcId = 17\n# Flipped bit 1 in tag\naad = \nct = eb156d081ed6b6b55f4612f021d87b39\niv = 505152535455565758595a5b\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = 202122232425262728292a2b2c2d2e2f\nresult = invalid\ntag = da847dbc326a06e988c77ad3863e6083\n\n# tcId = 18\n# Flipped bit 7 in tag\naad = \nct = eb156d081ed6b6b55f4612f021d87b39\niv = 505152535455565758595a5b\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = 202122232425262728292a2b2c2d2e2f\nresult = invalid\ntag = 58847dbc326a06e988c77ad3863e6083\n\n# tcId = 19\n# Flipped bit 8 in tag\naad = \nct = eb156d081ed6b6b55f4612f021d87b39\niv = 505152535455565758595a5b\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = 202122232425262728292a2b2c2d2e2f\nresult = invalid\ntag = d8857dbc326a06e988c77ad3863e6083\n\n# tcId = 20\n# Flipped bit 31 in tag\naad = \nct = eb156d081ed6b6b55f4612f021d87b39\niv = 505152535455565758595a5b\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = 202122232425262728292a2b2c2d2e2f\nresult = invalid\ntag = d8847d3c326a06e988c77ad3863e6083\n\n# tcId = 21\n# Flipped bit 32 in tag\naad = \nct = eb156d081ed6b6b55f4612f021d87b39\niv = 505152535455565758595a5b\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = 202122232425262728292a2b2c2d2e2f\nresult = invalid\ntag = d8847dbc336a06e988c77ad3863e6083\n\n# tcId = 22\n# Flipped bit 33 in tag\naad = \nct = eb156d081ed6b6b55f4612f021d87b39\niv = 505152535455565758595a5b\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = 202122232425262728292a2b2c2d2e2f\nresult = invalid\ntag = d8847dbc306a06e988c77ad3863e6083\n\n# tcId = 23\n# Flipped bit 63 in tag\naad = \nct = eb156d081ed6b6b55f4612f021d87b39\niv = 505152535455565758595a5b\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = 202122232425262728292a2b2c2d2e2f\nresult = invalid\ntag = d8847dbc326a066988c77ad3863e6083\n\n# tcId = 24\n# Flipped bit 64 in tag\naad = \nct = eb156d081ed6b6b55f4612f021d87b39\niv = 505152535455565758595a5b\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = 202122232425262728292a2b2c2d2e2f\nresult = invalid\ntag = d8847dbc326a06e989c77ad3863e6083\n\n# tcId = 25\n# Flipped bit 71 in tag\naad = \nct = eb156d081ed6b6b55f4612f021d87b39\niv = 505152535455565758595a5b\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = 202122232425262728292a2b2c2d2e2f\nresult = invalid\ntag = d8847dbc326a06e908c77ad3863e6083\n\n# tcId = 26\n# Flipped bit 77 in tag\naad = \nct = eb156d081ed6b6b55f4612f021d87b39\niv = 505152535455565758595a5b\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = 202122232425262728292a2b2c2d2e2f\nresult = invalid\ntag = d8847dbc326a06e988e77ad3863e6083\n\n# tcId = 27\n# Flipped bit 80 in tag\naad = \nct = eb156d081ed6b6b55f4612f021d87b39\niv = 505152535455565758595a5b\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = 202122232425262728292a2b2c2d2e2f\nresult = invalid\ntag = d8847dbc326a06e988c77bd3863e6083\n\n# tcId = 28\n# Flipped bit 96 in tag\naad = \nct = eb156d081ed6b6b55f4612f021d87b39\niv = 505152535455565758595a5b\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = 202122232425262728292a2b2c2d2e2f\nresult = invalid\ntag = d8847dbc326a06e988c77ad3873e6083\n\n# tcId = 29\n# Flipped bit 97 in tag\naad = \nct = eb156d081ed6b6b55f4612f021d87b39\niv = 505152535455565758595a5b\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = 202122232425262728292a2b2c2d2e2f\nresult = invalid\ntag = d8847dbc326a06e988c77ad3843e6083\n\n# tcId = 30\n# Flipped bit 103 in tag\naad = \nct = eb156d081ed6b6b55f4612f021d87b39\niv = 505152535455565758595a5b\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = 202122232425262728292a2b2c2d2e2f\nresult = invalid\ntag = d8847dbc326a06e988c77ad3063e6083\n\n# tcId = 31\n# Flipped bit 120 in tag\naad = \nct = eb156d081ed6b6b55f4612f021d87b39\niv = 505152535455565758595a5b\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = 202122232425262728292a2b2c2d2e2f\nresult = invalid\ntag = d8847dbc326a06e988c77ad3863e6082\n\n# tcId = 32\n# Flipped bit 121 in tag\naad = \nct = eb156d081ed6b6b55f4612f021d87b39\niv = 505152535455565758595a5b\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = 202122232425262728292a2b2c2d2e2f\nresult = invalid\ntag = d8847dbc326a06e988c77ad3863e6081\n\n# tcId = 33\n# Flipped bit 126 in tag\naad = \nct = eb156d081ed6b6b55f4612f021d87b39\niv = 505152535455565758595a5b\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = 202122232425262728292a2b2c2d2e2f\nresult = invalid\ntag = d8847dbc326a06e988c77ad3863e60c3\n\n# tcId = 34\n# Flipped bit 127 in tag\naad = \nct = eb156d081ed6b6b55f4612f02",
     "1d87b39\niv = 505152535455565758595a5b\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = 202122232425262728292a2b2c2d2e2f\nresult = invalid\ntag = d8847dbc326a06e988c77ad3863e6003\n\n# tcId = 35\n# Flipped bits 0 and 64 in tag\naad = \nct = eb156d081ed6b6b55f4612f021d87b39\niv = 505152535455565758595a5b\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = 202122232425262728292a2b2c2d2e2f\nresult = invalid\ntag = d9847dbc326a06e989c77ad3863e6083\n\n# tcId = 36\n# Flipped bits 31 and 63 in tag\naad = \nct = eb156d081ed6b6b55f4612f021d87b39\niv = 505152535455565758595a5b\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = 202122232425262728292a2b2c2d2e2f\nresult = invalid\ntag = d8847d3c326a066988c77ad3863e6083\n\n# tcId = 37\n# Flipped bits 63 and 127 in tag\naad = \nct = eb156d081ed6b6b55f4612f021d87b39\niv = 505152535455565758595a5b\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = 202122232425262728292a2b2c2d2e2f\nresult = invalid\ntag = d8847dbc326a066988c77ad3863e6003\n\n# tcId = 38\n# all bits of tag flipped\naad = \nct = eb156d081ed6b6b55f4612f021d87b39\niv = 505152535455565758595a5b\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = 202122232425262728292a2b2c2d2e2f\nresult = invalid\ntag = 277b8243cd95f9167738852c79c19f7c\n\n# tcId = 39\n# Tag changed to all zero\naad = \nct = eb156d081ed6b6b55f4612f021d87b39\niv = 505152535455565758595a5b\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = 202122232425262728292a2b2c2d2e2f\nresult = invalid\ntag = 00000000000000000000000000000000\n\n# tcId = 40\n# tag changed to all 1\naad = \nct = eb156d081ed6b6b55f4612f021d87b39\niv = 505152535455565758595a5b\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = 202122232425262728292a2b2c2d2e2f\nresult = invalid\ntag = ffffffffffffffffffffffffffffffff\n\n# tcId = 41\n# msbs changed in tag\naad = \nct = eb156d081ed6b6b55f4612f021d87b39\niv = 505152535455565758595a5b\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = 202122232425262728292a2b2c2d2e2f\nresult = invalid\ntag = 5804fd3cb2ea86690847fa5306bee003\n\n# tcId = 42\n# lsbs changed in tag\naad = \nct = eb156d081ed6b6b55f4612f021d87b39\niv = 505152535455565758595a5b\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = 202122232425262728292a2b2c2d2e2f\nresult = invalid\ntag = d9857cbd336b07e889c67bd2873f6182\n\n[ivSize = 64]\n[keySize = 128]\n[tagSize = 128]\n\n# tcId = 43\naad = aac39231129872a2\nct = 64c36bb3b732034e3a7d04efc5197785\niv = 0432bc49ac344120\nkey = aa023d0478dcb2b2312498293d9a9129\nmsg = 2035af313d1346ab00154fea78322105\nresult = valid\ntag = b7d0dd70b00d65b97cfd080ff4b819d1\n\n# tcId = 44\n# unusual IV size\naad = \nct = 9a078a04d14938918e004358\niv = 68cbeafe8f9e8a66\nkey = 25dd4d6cad5a4604957847c8c6d3fc4e\nmsg = 5c347835b3fa61c2ce253e5a\nresult = valid\ntag = 5452843e32c13c3e35ed8230fe3446c0\n\n[ivSize = 128]\n[keySize = 128]\n[tagSize = 128]\n\n# tcId = 45\naad = 1a0293d8f90219058902139013908190bc490890d3ff12a3\nct = 64069c2d58690561f27ee199e6b479b6369eec688672bde9\niv = 3254202d854734812398127a3d134421\nkey = 2034a82547276c83dd3212a813572bce\nmsg = 02efd2e5782312827ed5d230189a2a342b277ce048462193\nresult = valid\ntag = 9b7abadd6e69c1d9ec925786534f5075\n\n# tcId = 46\naad = \nct = fd\niv = 9477849d6ccdfca112d92e53fae4a7ca\nkey = 209e6dbf2ad26a105445fc0207cd9e9a\nmsg = 01\nresult = valid\ntag = 032df7bba5d8ea1a14f16f70bd0e14ec\n\n# tcId = 47\naad = \nct = 2f333087bdca58219f9bfc273e45cc\niv = 5171524568e81d97e8c4de4ba56c10a0\nkey = a549442e35154032d07c8666006aa6a2\nmsg = 1182e93596cac5608946400bc73f3a\nresult = valid\ntag = e06d1ef473132957ad37eaef29733ca0\n\n# tcId = 48\naad = \nct = a780bd01c80885156c88a973264c8ee5\niv = 1275115499ae722268515bf0c164b49c\nkey = cfb4c26f126f6a0acb8e4e220f6c56cd\nmsg = 09dfd7f080275257cf97e76f966b1ad9\nresult = valid\ntag = 2adeffa682c8d8a81fada7d9fcdd2ee2\n\n# tcId = 49\naad = \nct = 7e47e10fe3c6fbfa381770eaf5d48d1482e71e0c44dff1e30ca6f95d92052084\niv = 95c1dd8c0f1705ece68937901f7add7b\nkey = 0b11ef3a08c02970f74281c860691c75\nmsg = f693d4edd825dbb0618d91113128880dbebb23e25d00ed1f077d870be9cc7536\nresult = valid\ntag = d01444fa5d9c499629d174ff3927a1ac\n\n# tcId = 50\n# J0:000102030405060708090a0b0c0d0e0f\naad = \nct = 00078d109d92143fcd5df56721b884fac64ac7762cc09eea2a3c68e92a17bdb575f87bda18be564e\niv = f95fde4a751913202aeeee32a0b55753\nkey = 00112233445566778899aabbccddeeff\nmsg = 00000000000000000000000000000000000000000000000000000000000000000000000000000000\nresult = valid\ntag = 152a65045fe674f97627427af5be22da\n# The counter for AES-GCM is reduced modulo 2**32. This test vector was\n# constructed to test for correct wrapping of the counter.\n\n# tcId = 51\n# J0:00000000000000000000000000000000\naad = \nct = 84d4c9c08b4f482861e3a9c6c35bc4d91df927374513bfd49f436bd73f325285daef4ff7e13d46a6\niv = 7b95b8c356810a84711d68150a1b7750\nkey = 00112233445566778899aabbccddeeff\nmsg = 00000000000000000000000000000000000000000000000000000000000000000000000000000000\nresult = valid\ntag = 213a3cb93855d18e69337eee66aeec07\n# The counter for AES-GCM is reduced modulo 2**32. This test vector was\n# constructed to test for correct wrapping of the counter.\n\n# tcId = 52\n# J0:ffffffffffffffffffffffffffffffff\naad = \nct = 948ca37a8e6649e88aeffb1c598f3607007702417ea0e0bc3c60ad5a949886de968cf53ea6462aed\niv = 1a552e67cdc4dc1a33b824874ebf0bed\nkey = 00112233445566778899aabbccddeeff\nmsg = 00000000000000000000000000000000000000000000000000000000000000000000000000000000\nresult = valid\ntag = 99b381bfa2af9751c39d1b6e86d1be6a\n# The counter for AES-GCM is reduced modulo 2**32. This test vector was\n# constructed to test for correct wrapping of the counter.\n\n# tcId = 53\n# J0:fffffffffffffffffffffffffffffffe\naad = \nct = 64b19314c31af45accdf7e3c4db79f0d948ca37a8e6649e88aeffb1c598f3607007702417ea0e0bc\niv = dd9d0b4a0c3d681524bffca31d907661\nkey = 00112233445566778899aabbccddeeff\nmsg = 00000000000000000000000000000000000000000000000000000000000000000000000000000000\nresult = valid\ntag = 5281efc7f13ac8e14ccf5dca7bfbfdd1\n# The counter for AES-GCM is reduced modulo 2**32. This test vector was\n# constructed to test for correct wrapping of the counter.\n\n# tcId = 54\n# J0:fffffffffffffffffffffffffffffffd\naad = \nct = 2bb69c3e5d1f91815c6b87a0d5bbea7164b19314c31af45accdf7e3c4db79f0d948ca37a8e6649e8\niv = 57c5643c4e37b4041db794cfe8e1f0f4\nkey = 00112233445566778899aabbccddeeff\nmsg = 00000000000000000000000000000000000000000000000000000000000000000000000000000000\nresult = valid\ntag = a3ea2c09ee4f8c8a12f45cddf9aeff81\n# The counter for AES-GCM is reduced modulo 2**32. This test vector was\n# constructed to test for correct wrapping of the counter.\n\n# tcId = 55\n# J0:000102030405060708090a0bffffffff\naad = \nct = 127af9b39ecdfc57bb11a2847c7c2d3d8f938f40f877e0c4af37d0fe9af033052bd537c4ae978f60\niv = 99821c2dd5daecded07300f577f7aff1\nkey = 00112233445566778899aabbccddeeff\nmsg = 00000000000000000000000000000000000000000000000000000000000000000000000000000000\nresult = valid\ntag = 07eb2fe4a958f8434d40684899507c7c\n# The counter for AES-GCM is reduced modulo 2**32. This test vector was\n# constructed to test for correct wrapping of the counter.\n\n# tcId = 56\n# J0:000102030405060708090a0bfffffffe\naad = \nct = 0cf6ae47156b14dce03c8a07a2e172b1127af9b39ecdfc57bb11a2847c7c2d3d8f938f40f877e0c4\niv = 5e4a3900142358d1c774d8d124d8d27d\nkey = 00112233445566778899aabbccddeeff\nmsg = 00000000000000000000000000000000000000000000000000000000000000000000000000000000\nresult = valid\ntag = f145c2dcaf339eede427be934357eac0\n# The counter for AES-GCM is reduced modulo 2**32. This test vector was\n# constructed to test for correct wrapping of the counter.\n\n# tcId = 57\n# J0:000102030405060708090a0bfffffffd\naad = \nct = f0c6ffc18bd46df5569185a9afd169eb0cf6ae47156b14dce03c8a07a2e172b1127af9b39ecdfc57\niv = d4125676562984c0fe7cb0bdd1a954e8\nkey = 00112233445566778899aabbccddeeff\nmsg = 00000000000000000000000000000000000000000000000000000000000000000000000000000000\nresult = valid\ntag = facd0bfe8701b7b4a2ba96d98af52bd9\n# The counter for AES-GCM is reduced modulo 2**32. This test vector was\n# constructed to test for correct wrapping of the counter.\n\n# tcId = 58\n# J0:000102030405060708090a0b7fffffff\naad = \nct = d6928e094c06e0a7c4db42184cf7529e95de88b767edebe9b343000be3dab47ea08b744293eed698\niv = b97ec62a5e5900ccf9e4be332e336091\nkey = 00112233445566778899aabbccddeeff\nmsg = 00000000000000000000000000000000000000000000000000000000000000000000000000000000\nresult = valid\ntag =",
     " a03e729dcfd7a03155655fece8affd7e\n# The counter for AES-GCM is reduced modulo 2**32. This test vector was\n# constructed to test for correct wrapping of the counter.\n\n# tcId = 59\n# J0:000102030405060708090a0b7ffffffe\naad = \nct = d82ce58771bf6487116bf8e96421877ed6928e094c06e0a7c4db42184cf7529e95de88b767edebe9\niv = 7eb6e3079fa0b4c3eee366177d1c1d1d\nkey = 00112233445566778899aabbccddeeff\nmsg = 00000000000000000000000000000000000000000000000000000000000000000000000000000000\nresult = valid\ntag = 1e43926828bc9a1614c7b1639096c195\n# The counter for AES-GCM is reduced modulo 2**32. This test vector was\n# constructed to test for correct wrapping of the counter.\n\n# tcId = 60\n# J0:000102030405060708090a0bffff7fff\naad = \nct = a197a37a5d79697078536bc27fe46cd8d475526d9044aa94f088a054f8e380c64f79414795c61480\niv = 0314fcd10fdd675d3c612962c931f635\nkey = 00112233445566778899aabbccddeeff\nmsg = 00000000000000000000000000000000000000000000000000000000000000000000000000000000\nresult = valid\ntag = f08baddf0b5285c91fc06a67fe4708ca\n# The counter for AES-GCM is reduced modulo 2**32. This test vector was\n# constructed to test for correct wrapping of the counter.\n\n# tcId = 61\n# J0:000102030405060708090a0bffff7ffe\naad = \nct = 149fde9abbd3a43c2548575e0db9fb84a197a37a5d79697078536bc27fe46cd8d475526d9044aa94\niv = c4dcd9fcce24d3522b66f1469a1e8bb9\nkey = 00112233445566778899aabbccddeeff\nmsg = 00000000000000000000000000000000000000000000000000000000000000000000000000000000\nresult = valid\ntag = 62a4b6875c288345d6a454399eac1afa\n# The counter for AES-GCM is reduced modulo 2**32. This test vector was\n# constructed to test for correct wrapping of the counter.\n\n# tcId = 62\n# special case\naad = \nct = 45a3f89d02918bfd0c8161658ccc9795\niv = 00000000000000000000000000000000\nkey = 00112233445566778899aabbccddeeff\nmsg = bec6fa05c1718b9b84c47345bbed7dcb\nresult = valid\ntag = 00000000000000000000000000000000\n\n# tcId = 63\n# special case\naad = \nct = 1cd5a06214235ceb044d4bad7b047312\niv = ffffffffffffffffffffffffffffffff\nkey = 00112233445566778899aabbccddeeff\nmsg = 4d82639c39d3f3490ee903dd0be7afcf\nresult = valid\ntag = ffffffffffffffffffffffffffffffff\n\n[ivSize = 96]\n[keySize = 256]\n[tagSize = 128]\n\n# tcId = 64\naad = 00000000ffffffff\nct = e27abdd2d2a53d2f136b\niv = 00112233445566778899aabb\nkey = 92ace3e348cd821092cd921aa3546374299ab46209691bc28b8752d17f123c20\nmsg = 00010203040506070809\nresult = valid\ntag = 9a4a2579529301bcfb71c78d4060f52c\n\n# tcId = 65\naad = aabbccddeeff\nct = \niv = 00112233445566778899aabb\nkey = 29d3a44f8723dc640239100c365423a312934ac80239212ac3df3421a2098123\nmsg = \nresult = valid\ntag = 2a7d77fa526b8250cb296078926b5020\n\n# tcId = 66\naad = \nct = 06\niv = 99e23ec48985bccdeeab60f1\nkey = cc56b680552eb75008f5484b4cb803fa5063ebd6eab91f6ab6aef4916a766273\nmsg = 2a\nresult = valid\ntag = 633c1e9703ef744ffffb40edf9d14355\n\n# tcId = 67\naad = \nct = cf332a12fdee800b\niv = 4f07afedfdc3b6c2361823d3\nkey = 51e4bf2bad92b7aff1a4bc05550ba81df4b96fabf41c12c7b00e60e48db7e152\nmsg = be3308f72a2c6aed\nresult = valid\ntag = 602e8d7c4799d62c140c9bb834876b09\n\n# tcId = 68\naad = \nct = 43fc101bff4b32bfadd3daf57a590e\niv = 68ab7fdbf61901dad461d23c\nkey = 67119627bd988eda906219e08c0d0d779a07d208ce8a4fe0709af755eeec6dcb\nmsg = 51f8c1f731ea14acdb210a6d973e07\nresult = valid\ntag = ec04aacb7148a8b8be44cb7eaf4efa69\n\n# tcId = 69\naad = \nct = f58c16690122d75356907fd96b570fca\niv = 2fcb1b38a99e71b84740ad9b\nkey = 59d4eafb4de0cfc7d3db99a8f54b15d7b39f0acc8da69763b019c1699f87674a\nmsg = 549b365af913f3b081131ccb6b825588\nresult = valid\ntag = 28752c20153092818faba2a334640d6e\n\n# tcId = 70\naad = \nct = 73a6b6f45f6ccc5131e07f2caa1f2e2f56\niv = 45aaa3e5d16d2d42dc03445d\nkey = 3b2458d8176e1621c0cc24c0c0e24c1e80d72f7ee9149a4b166176629616d011\nmsg = 3ff1514b1c503915918f0c0c31094a6e1f\nresult = valid\ntag = 2d7379ec1db5952d4e95d30c340b1b1d\n\n# tcId = 71\naad = \nct = 0843fff52d934fc7a071ea62c0bd351ce85678cde3ea2c9e\niv = e6b1adf2fd58a8762c65f31b\nkey = 0212a8de5007ed87b33f1a7090b6114f9e08cefd9607f2c276bdcfdbc5ce9cd7\nmsg = 10f1ecf9c60584665d9ae5efe279e7f7377eea6916d2b111\nresult = valid\ntag = 7355fde599006715053813ce696237a8\n\n# tcId = 72\naad = c0\nct = eb5500e3825952866d911253f8de860c00831c81\niv = 98bc2c7438d5cd7665d76f6e\nkey = b279f57e19c8f53f2f963f5f2519fdb7c1779be2ca2b3ae8e1128b7d6c627fc4\nmsg = fcc515b294408c8645c9183e3f4ecee5127846d1\nresult = valid\ntag = ecb660e1fb0541ec41e8d68a64141b3a\n\n# tcId = 73\naad = 956846a209e087ed\nct = feca44952447015b5df1f456df8ca4bb4eee2ce2\niv = 376187894605a8d45e30de51\nkey = cdccfe3f46d782ef47df4e72f0c02d9c7f774def970d23486f11a57f54247f17\nmsg = e28e0e9f9d22463ac0e42639b530f42102fded75\nresult = valid\ntag = 082e91924deeb77880e1b1c84f9b8d30\n\n# tcId = 74\naad = ab2ac7c44c60bdf8228c7884adb20184\nct = 43dda832e942e286da314daa99bef5071d9d2c78\niv = 5a86a50a0e8a179c734b996d\nkey = f32364b1d339d82e4f132d8f4a0ec1ff7e746517fa07ef1a7f422f4e25a48194\nmsg = 43891bccb522b1e72a6b53cf31c074e9d6c2df8e\nresult = valid\ntag = c3922583476ced575404ddb85dd8cd44\n\n# tcId = 75\naad = 972ab4e06390caae8f99dd6e2187be6c7ff2c08a24be16ef\nct = a929ee7e67c7a2f91bbcec6389a3caf43ab49305\niv = bc2a7757d0ce2d8b1f14ccd9\nkey = ff0089ee870a4a39f645b0a5da774f7a5911e9696fc9cad646452c2aa8595a12\nmsg = 748b28031621d95ee61812b4b4f47d04c6fc2ff3\nresult = valid\ntag = ebec6774b955e789591c822dab739e12\n\n# tcId = 76\n# special case\naad = \nct = 23293e9b07ca7d1b0cae7cc489a973b3\niv = 000000000000000000000000\nkey = 00112233445566778899aabbccddeeff102132435465768798a9bacbdcedfe0f\nmsg = 561008fa07a68f5c61285cd013464eaf\nresult = valid\ntag = ffffffffffffffffffffffffffffffff\n\n# tcId = 77\n# special case\naad = \nct = 7cb6fc7c6abc009efe9551a99f36a421\niv = ffffffffffffffffffffffff\nkey = 00112233445566778899aabbccddeeff102132435465768798a9bacbdcedfe0f\nmsg = c6152244cea1978d3e0bc274cf8c0b3b\nresult = valid\ntag = 00000000000000000000000000000000\n\n# tcId = 78\n# Flipped bit 0 in tag\naad = \nct = b2061457c0759fc1749f174ee1ccadfa\niv = 505152535455565758595a5b\nkey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nmsg = 202122232425262728292a2b2c2d2e2f\nresult = invalid\ntag = 9de8fef6d8ab1bf1bf887232eab590dd\n\n# tcId = 79\n# Flipped bit 1 in tag\naad = \nct = b2061457c0759fc1749f174ee1ccadfa\niv = 505152535455565758595a5b\nkey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nmsg = 202122232425262728292a2b2c2d2e2f\nresult = invalid\ntag = 9ee8fef6d8ab1bf1bf887232eab590dd\n\n# tcId = 80\n# Flipped bit 7 in tag\naad = \nct = b2061457c0759fc1749f174ee1ccadfa\niv = 505152535455565758595a5b\nkey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nmsg = 202122232425262728292a2b2c2d2e2f\nresult = invalid\ntag = 1ce8fef6d8ab1bf1bf887232eab590dd\n\n# tcId = 81\n# Flipped bit 8 in tag\naad = \nct = b2061457c0759fc1749f174ee1ccadfa\niv = 505152535455565758595a5b\nkey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nmsg = 202122232425262728292a2b2c2d2e2f\nresult = invalid\ntag = 9ce9fef6d8ab1bf1bf887232eab590dd\n\n# tcId = 82\n# Flipped bit 31 in tag\naad = \nct = b2061457c0759fc1749f174ee1ccadfa\niv = 505152535455565758595a5b\nkey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nmsg = 202122232425262728292a2b2c2d2e2f\nresult = invalid\ntag = 9ce8fe76d8ab1bf1bf887232eab590dd\n\n# tcId = 83\n# Flipped bit 32 in tag\naad = \nct = b2061457c0759fc1749f174ee1ccadfa\niv = 505152535455565758595a5b\nkey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nmsg = 202122232425262728292a2b2c2d2e2f\nresult = invalid\ntag = 9ce8fef6d9ab1bf1bf887232eab590dd\n\n# tcId = 84\n# Flipped bit 33 in tag\naad = \nct = b2061457c0759fc1749f174ee1ccadfa\niv = 505152535455565758595a5b\nkey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nmsg = 202122232425262728292a2b2c2d2e2f\nresult = invalid\ntag = 9ce8fef6daab1bf1bf887232eab590dd\n\n# tcId = 85\n# Flipped bit 63 in tag\naad = \nct = b2061457c0759fc1749f174ee1ccadfa\niv = 505152535455565758595a5b\nkey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nmsg = 202122232425262728292a2b2c2d2e2f\nresult = invalid\ntag = 9ce8fef6d8ab1b71bf887232eab590dd\n\n# tcId = 86\n# Flipped bit 64 in tag\naad = \nct = b2061457c0759fc1749f174ee1ccadfa\niv = 505152535455565758595a5b\nkey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nmsg = 202122",
@@ -2868,9 +2849,9 @@
     "23eadde1\nkey = e98b0669a645eb14cd06df6968fc5f10edc9f54feed264e3d410cdc61b72ef51\nmsg = f384b3ed7b274641f5db60cf\nresult = valid\ntag = 36b15bab6923b17218fe1c24048e2391\n\n[ivSize = 160]\n[keySize = 256]\n[tagSize = 128]\n\n# tcId = 187\n# unusual IV size\naad = \nct = c1d76233e8c5042e92bf8d32\niv = 0f9d6ed7eef362dfa4a7dfa5c0f74c5b27bd4ebf\nkey = 849b3e6b8cdd85bdcfb8eb701aa5522ae2340fbe5214e389622cef76979225c4\nmsg = 8c5564e53051c0de273199b4\nresult = valid\ntag = 7cf036d235d3b2dd349a8c804b65144a\n\n[ivSize = 0]\n[keySize = 128]\n[tagSize = 128]\n\n# tcId = 188\n# 0 size IV is not valid\naad = \nct = \niv = \nkey = 8f3f52e3c75c58f5cb261f518f4ad30a\nmsg = \nresult = invalid\ntag = cf71978ffcc778f3c85ac9c31b6fe191\n# AES-GCM does not allow an IV of length 0. Encrypting with such an IV leaks the\n# authentication key. Hence using an IV of length 0 is insecure even if the key\n# itself is only used for a single encryption.\n\n# tcId = 189\n# 0 size IV is not valid\naad = \nct = 00a29f0a5e2e7490279d1faf8b881c7b\niv = \nkey = 2a4bf90e56b70fdd8649d775c089de3b\nmsg = 324ced6cd15ecc5b3741541e22c18ad9\nresult = invalid\ntag = a2c7e8d7a19b884f742dfec3e76c75ee\n# AES-GCM does not allow an IV of length 0. Encrypting with such an IV leaks the\n# authentication key. Hence using an IV of length 0 is insecure even if the key\n# itself is only used for a single encryption.\n\n[ivSize = 0]\n[keySize = 192]\n[tagSize = 128]\n\n# tcId = 190\n# 0 size IV is not valid\naad = \nct = \niv = \nkey = 0b18d21337035c7baa08211b702fa780ac7c09be8f9ed11f\nmsg = \nresult = invalid\ntag = ca69a2eb3a096ea36b1015d5dffff532\n# AES-GCM does not allow an IV of length 0. Encrypting with such an IV leaks the\n# authentication key. Hence using an IV of length 0 is insecure even if the key\n# itself is only used for a single encryption.\n\n# tcId = 191\n# 0 size IV is not valid\naad = \nct = 509b0658d09f7a5bb9db43b70c8387f7\niv = \nkey = ba76d594a6df915bb7ab7e6d1a8d024b2796336c1b8328a9\nmsg = d62f302742d61d823ea991b93430d589\nresult = invalid\ntag = 2c9488d53a0b2b5308c2757dfac7219f\n# AES-GCM does not allow an IV of length 0. Encrypting with such an IV leaks the\n# authentication key. Hence using an IV of length 0 is insecure even if the key\n# itself is only used for a single encryption.\n\n[ivSize = 0]\n[keySize = 256]\n[tagSize = 128]\n\n# tcId = 192\n# 0 size IV is not valid\naad = \nct = \niv = \nkey = 3f8ca47b9a940582644e8ecf9c2d44e8138377a8379c5c11aafe7fec19856cf1\nmsg = \nresult = invalid\ntag = 1726aa695fbaa21a1db88455c670a4b0\n# AES-GCM does not allow an IV of length 0. Encrypting with such an IV leaks the\n# authentication key. Hence using an IV of length 0 is insecure even if the key\n# itself is only used for a single encryption.\n\n# tcId = 193\n# 0 size IV is not valid\naad = \nct = 7772ea358901f571d3d35c19497639d9\niv = \nkey = 7660d10966c6503903a552dde2a809ede9da490e5e5cc3e349da999671809883\nmsg = c314235341debfafa1526bb61044a7f1\nresult = invalid\ntag = 8fe0520ad744a11f0ccfd228454363fa\n# AES-GCM does not allow an IV of length 0. Encrypting with such an IV leaks the\n# authentication key. Hence using an IV of length 0 is insecure even if the key\n# itself is only used for a single encryption.\n\n[ivSize = 8]\n[keySize = 128]\n[tagSize = 128]\n\n# tcId = 194\n# small IV sizes\naad = \nct = \niv = 80\nkey = 59a284f50aedd8d3e2a91637d3815579\nmsg = \nresult = acceptable\ntag = af498f701d2470695f6e7c8327a2398b\n\n# tcId = 195\n# small IV sizes\naad = \nct = 0a24612a9d1cbe967dbfe804bf8440e5\niv = 9d\nkey = fec58aa8cf06bfe05de829f27ec77693\nmsg = f2d99a9f893378e0757d27c2e3a3101b\nresult = acceptable\ntag = 96e6fd2cdc707e3ee0a1c90d34c9c36c\n\n[ivSize = 16]\n[keySize = 128]\n[tagSize = 128]\n\n# tcId = 196\n# small IV sizes\naad = \nct = \niv = 0f2f\nkey = 88a972cce9eaf5a7813ce8149d0c1d0e\nmsg = \nresult = acceptable\ntag = 4ccf1efb4da05b4ae4452aea42f5424b\n\n# tcId = 197\n# small IV sizes\naad = \nct = ba3e7f8b2999995c7fc4006ca4f475ff\niv = 8760\nkey = b43967ee933e4632bd6562ba1201bf83\nmsg = 5a6ad6db70591d1e520b0122f05021a0\nresult = acceptable\ntag = 98f47a5279cebbcac214515710f6cd8a\n\n[ivSize = 32]\n[keySize = 128]\n[tagSize = 128]\n\n# tcId = 198\n# small IV sizes\naad = \nct = \niv = cc851957\nkey = 4e9a97d3ed54c7b54610793ab05052e1\nmsg = \nresult = acceptable\ntag = e574b355bda2980e047e584feb1676ca\n\n# tcId = 199\n# small IV sizes\naad = \nct = 1b84baea9df1e65bee7b49e4a8cda1ec\niv = 7b5faeb2\nkey = d83c1d7a97c43f182409a4aa5609c1b1\nmsg = c8f07ba1d65554a9bd40390c30c5529c\nresult = acceptable\ntag = 5c0bb79d8240041edce0f94bd4bb384f\n\n[ivSize = 48]\n[keySize = 128]\n[tagSize = 128]\n\n# tcId = 200\n# small IV sizes\naad = \nct = \niv = 4ad80c2854fb\nkey = c6a705677affb49e276d9511caa46145\nmsg = \nresult = acceptable\ntag = 1e2ed72af590cafb8647d185865f5463\n\n# tcId = 201\n# small IV sizes\naad = \nct = 18291aa8dc7b07448aa8f71bb8e380bf\niv = d1dafc8de3e3\nkey = eba7699b56cc0aa2f66a2a5be9944413\nmsg = d021e53d9098a2df3d6b903cdad0cd9c\nresult = acceptable\ntag = 9c0e22e5c41b1039ff5661ffaefa8e0f\n\n[ivSize = 8]\n[keySize = 192]\n[tagSize = 128]\n\n# tcId = 202\n# small IV sizes\naad = \nct = \niv = cb\nkey = c70ce38e84e5f53ed41c3f0d2ca493412ad32cb04c6e2efa\nmsg = \nresult = acceptable\ntag = 08d96edb5e22874cd10cb2256ca04bc6\n\n# tcId = 203\n# small IV sizes\naad = \nct = 6c5e796ba9a3ddc64f401e68d135101d\niv = 0f\nkey = 74c816b83dfd287210a3e2c6da8d3053bbfbd9b156d3fdd8\nmsg = f2b7b2c9b312cf2af78f003df15c8e19\nresult = acceptable\ntag = 96a132ed43924e98feb888ff682bdaef\n\n[ivSize = 16]\n[keySize = 192]\n[tagSize = 128]\n\n# tcId = 204\n# small IV sizes\naad = \nct = \niv = 75e5\nkey = cbf45ba488932aea1a10e5862f92e4a7e277bda9f34af6d0\nmsg = \nresult = acceptable\ntag = 1f0d23070fcd748e25bf6454f5c9136e\n\n# tcId = 205\n# small IV sizes\naad = \nct = 550b48a43e821fd76f49f0f1a897aead\niv = 8989\nkey = e1c0446f11ae6aa4fa254f9a846fc6e13e45e537e47f2042\nmsg = 3a2f5ad0eb216e546e0bcaa377b6cbc7\nresult = acceptable\ntag = f6e0a979481f9957ddad0f21a777a73a\n\n[ivSize = 32]\n[keySize = 192]\n[tagSize = 128]\n\n# tcId = 206\n# small IV sizes\naad = \nct = \niv = 68d7fc38\nkey = 567563bf4cf154902275a53bc57cd6dd7b370d27011bdac8\nmsg = \nresult = acceptable\ntag = 1475563e3212f3b5e40062569afd71e3\n\n# tcId = 207\n# small IV sizes\naad = \nct = 309133e76159fe8a41b20843486511ab\niv = bb9d2aa3\nkey = 834d0bb601170865a78139428a1503695a6a291ebd747cd1\nmsg = 6f79e18b4acd5a03d3a5f7e1a8d0f183\nresult = acceptable\ntag = 03ab26993b701910a2e8ecccd2ba9e52\n\n[ivSize = 48]\n[keySize = 192]\n[tagSize = 128]\n\n# tcId = 208\n# small IV sizes\naad = \nct = \niv = a984bdcdcae2\nkey = 99fb18f5ba430bb9ea942968ecb799b43406e1af4b6425a1\nmsg = \nresult = acceptable\ntag = d7b9a6b58a97982916e83219fbf71b1e\n\n# tcId = 209\n# small IV sizes\naad = \nct = e08261e46eaf90d978ea8f7889bccd4f\niv = 52aa01e0d0d6\nkey = b77b242aa0d51c92fda013e0cb0ef2437399ace5d3f507e4\nmsg = 4ba541a9914729216153801340ab1779\nresult = acceptable\ntag = c052a55df3926a50990a532efe3d80ec\n\n[ivSize = 8]\n[keySize = 256]\n[tagSize = 128]\n\n# tcId = 210\n# small IV sizes\naad = \nct = \niv = a9\nkey = 8f9a38c1014966e4d9ae736139c5e79b99345874f42d4c7d2c81aa6797c417c0\nmsg = \nresult = acceptable\ntag = 2a268bf3a75fd7b00ba230b904bbb014\n\n# tcId = 211\n# small IV sizes\naad = \nct = 7bea30ecc2f73f8e121263b37966954c\niv = b3\nkey = 144cd8279229e8bb2de99d24e615306663913fe9177fcd270fafec493d43bca1\nmsg = 976229f5538f9636476d69f0c328e29d\nresult = acceptable\ntag = 8bbad4adc54b37a2b2f0f6e8617548c9\n\n[ivSize = 16]\n[keySize = 256]\n[tagSize = 128]\n\n# tcId = 212\n# small IV sizes\naad = \nct = \niv = c332\nkey = 7d31861f9d3536e14016a3216b1042e0d2f7d4614314268b6f834ec7f38bbb65\nmsg = \nresult = acceptable\ntag = 1d978a693120c11f6d51a3ed88cd4ace\n\n# tcId = 213\n# small IV sizes\naad = \nct = 9c39f5b110361e9a770cc5e8b0f444bb\niv = da6c\nkey = 22b35fe9623ee11f8b60b6d22db3765b666ed972fa7ccd92b45f22deee02cab1\nmsg = 5341c78e4ce5bf8fbc3e077d1990dd5d\nresult = acceptable\ntag = b63ff43c12073ec5572b1be70f17e231\n\n[ivSize = 32]\n[keySize = 256]\n[tagSize = 128]\n\n# tcId = 214\n# small IV sizes\naad = \nct = \niv = 6b30145e\nkey = c224e0bba3d7a99165f7996b67a0fce3e12f2c01179b197b69b7e628bca92096\nmsg = \nresult = acceptable\ntag = ae6f7c9a29f0d8204ca50b14a1e0dcf2\n\n# tcId = 215\n# small IV sizes\naad = \nct = f73f72f976a296ba3ca94bc6eb08cd46\niv = 5110604c\nkey = 093eb12343537ee8e91c1f715b862603f8daf9d4e1d7d67212a9d68e5aac9358\nmsg = 33efb58c91e8c70271870ec00fe2e202\nresult = acceptable\ntag = b824c33c13f289429659aa017c6",
     "32f71\n\n[ivSize = 48]\n[keySize = 256]\n[tagSize = 128]\n\n# tcId = 216\n# small IV sizes\naad = \nct = \niv = d4d857510888\nkey = 98e6f8ab673e804e865e32403a6551bf807a959343c60d34559360bc295ecb5b\nmsg = \nresult = acceptable\ntag = 3db16725fafc828d414ab61c16a6c38f\n\n# tcId = 217\n# small IV sizes\naad = \nct = ed463f4f43336af3f4d7e08770201145\niv = 1bdcd44b663e\nkey = 0bd0e8e7781166e1d876dec8fad34ba95b032a27cac0551595116091005947b7\nmsg = 91222263b12cf5616a049cbe29ab9b5b\nresult = acceptable\ntag = c8fc39906aca0c64e14a43ff750abd8a\n\n",
 };
-static const size_t kLen60 = 65557;
+static const size_t kLen59 = 65557;
 
-static const char *kData60[] = {
+static const char *kData59[] = {
     "# Imported from Wycheproof's chacha20_poly1305_test.json.\n# This file is generated by convert_wycheproof.go. Do not edit by hand.\n#\n# Algorithm: CHACHA20-POLY1305\n# Generator version: 0.4.12\n\n[ivSize = 96]\n[keySize = 256]\n[tagSize = 128]\n\n# tcId = 1\n# rfc7539\naad = 50515253c0c1c2c3c4c5c6c7\nct = d31a8d34648e60db7b86afbc53ef7ec2a4aded51296e08fea9e2b5a736ee62d63dbea45e8ca9671282fafb69da92728b1a71de0a9e060b2905d6a5b67ecd3b3692ddbd7f2d778b8c9803aee328091b58fab324e4fad675945585808b4831d7bc3ff4def08e4b7a9de576d26586cec64b6116\niv = 070000004041424344454647\nkey = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f\nmsg = 4c616469657320616e642047656e746c656d656e206f662074686520636c617373206f66202739393a204966204920636f756c64206f6666657220796f75206f6e6c79206f6e652074697020666f7220746865206675747572652c2073756e73637265656e20776f756c642062652069742e\nresult = valid\ntag = 1ae10b594f09e26a7e902ecbd0600691\n\n# tcId = 2\naad = \nct = \niv = 4da5bf8dfd5852c1ea12379d\nkey = 80ba3192c803ce965ea371d5ff073cf0f43b6a2ab576b208426e11409c09b9b0\nmsg = \nresult = valid\ntag = 76acb342cf3166a5b63c0c0ea1383c8d\n\n# tcId = 3\naad = bd506764f2d2c410\nct = \niv = a92ef0ac991dd516a3c6f689\nkey = 7a4cd759172e02eb204db2c3f5c746227df584fc1345196391dbb9577a250742\nmsg = \nresult = valid\ntag = 906fa6284b52f87b7359cbaa7563c709\n\n# tcId = 4\naad = \nct = 3a\niv = 99e23ec48985bccdeeab60f1\nkey = cc56b680552eb75008f5484b4cb803fa5063ebd6eab91f6ab6aef4916a766273\nmsg = 2a\nresult = valid\ntag = cac27dec0968801e9f6eded69d807522\n\n# tcId = 5\naad = 91ca6c592cbcca53\nct = c4\niv = ab0dca716ee051d2782f4403\nkey = 46f0254965f769d52bdb4a70b443199f8ef207520d1220c55e4b70f0fda620ee\nmsg = 51\nresult = valid\ntag = 168310ca45b1f7c66cad4e99e43f72b9\n\n# tcId = 6\naad = \nct = 4d13\niv = 461af122e9f2e0347e03f2db\nkey = 2f7f7e4f592bb389194989743507bf3ee9cbde1786b6695fe6c025fd9ba4c100\nmsg = 5c60\nresult = valid\ntag = 91e8b61efb39c122195453077b22e5e2\n\n# tcId = 7\naad = 88364fc8060518bf\nct = b60d\niv = 61546ba5f1720590b6040ac6\nkey = c8833dce5ea9f248aa2030eacfe72bffe69a620caf793344e5718fe0d7ab1a58\nmsg = ddf2\nresult = valid\ntag = ead0fd4697ec2e5558237719d02437a2\n\n# tcId = 8\naad = \nct = 5dfe3440dbb3c3\niv = 3c4e654d663fa4596dc55bb7\nkey = 55568158d3a6483f1f7021eab69b703f614251cadc1af5d34a374fdbfc5adac7\nmsg = ab85e9c1571731\nresult = valid\ntag = ed7a434e2602d394281e0afa9fb7aa42\n\n# tcId = 9\naad = 84e46be8c0919053\nct = 4bd47212941ce3\niv = 58389375c69ee398de948396\nkey = e3c09e7fab1aefb516da6a33022a1dd4eb272c80d540c5da52a730f34d840d7f\nmsg = 4ee5cda20d4290\nresult = valid\ntag = 185f1408ee7fbf18f5abad6e2253a1ba\n\n# tcId = 10\naad = \nct = 8e9439a56eeec817\niv = 4f07afedfdc3b6c2361823d3\nkey = 51e4bf2bad92b7aff1a4bc05550ba81df4b96fabf41c12c7b00e60e48db7e152\nmsg = be3308f72a2c6aed\nresult = valid\ntag = fbe8a6ed8fabb1937539dd6c00e90021\n\n# tcId = 11\naad = 66c0ae70076cb14d\nct = b9b910433af052b0\niv = b4ea666ee119563366484a78\nkey = 1131c1418577a054de7a4ac551950f1a053f9ae46e5b75fe4abd5608d7cddadd\nmsg = a4c9c2801b71f7df\nresult = valid\ntag = 4530f51aeee024e0a445a6328fa67a18\n\n# tcId = 12\naad = \nct = ff7dc203b26c467a6b50db33\niv = 9a59fce26df0005e07538656\nkey = 99b62bd5afbe3fb015bde93f0abf483957a1c3eb3ca59cb50b39f7f8a9cc51be\nmsg = 42baae5978feaf5c368d14e0\nresult = valid\ntag = 578c0f2758c2e14e36d4fc106dcb29b4\n\n# tcId = 13\naad = a506e1a5c69093f9\nct = 9f8816de0994e938d9e53f95\niv = 58dbd4ad2c4ad35dd906e9ce\nkey = 85f35b6282cff440bc1020c8136ff27031110fa63ec16f1e825118b006b91257\nmsg = fdc85b94a4b2a6b759b1a0da\nresult = valid\ntag = d086fc6c9d8fa915fd8423a7cf05072f\n\n# tcId = 14\naad = \nct = 0b29638e1fbdd6df53970be2210042\niv = 68ab7fdbf61901dad461d23c\nkey = 67119627bd988eda906219e08c0d0d779a07d208ce8a4fe0709af755eeec6dcb\nmsg = 51f8c1f731ea14acdb210a6d973e07\nresult = valid\ntag = 2a9134087d67a46e79178d0a93f5e1d2\n\n# tcId = 15\naad = 6453a53384632212\nct = 32db66c4a3819d81557455e5980fed\niv = d95b3243afaef714c5035b6a\nkey = e6f1118d41e4b43fb58221b7ed79673834e0d8ac5c4fa60bbc8bc4893a58894d\nmsg = 97469da667d6110f9cbda1d1a20673\nresult = valid\ntag = feae30dec94e6ad3a9eea06a0d703917\n\n# tcId = 16\naad = \nct = e9110e9f56ab3ca483500ceabab67a13\niv = 2fcb1b38a99e71b84740ad9b\nkey = 59d4eafb4de0cfc7d3db99a8f54b15d7b39f0acc8da69763b019c1699f87674a\nmsg = 549b365af913f3b081131ccb6b825588\nresult = valid\ntag = 836ccabf15a6a22a51c1071cfa68fa0c\n\n# tcId = 17\naad = 034585621af8d7ff\nct = e4b113cb775945f3d3a8ae9ec141c00c\niv = 118a6964c2d3e380071f5266\nkey = b907a45075513fe8a8019edee3f2591487b2a030b03c6e1d771c862571d2ea1e\nmsg = 55a465644f5b650928cbee7c063214d6\nresult = valid\ntag = 7c43f16ce096d0dc27c95849dc383b7d\n\n# tcId = 18\naad = \nct = 02cc3acb5ee1fcdd12a03bb857976474d3\niv = 45aaa3e5d16d2d42dc03445d\nkey = 3b2458d8176e1621c0cc24c0c0e24c1e80d72f7ee9149a4b166176629616d011\nmsg = 3ff1514b1c503915918f0c0c31094a6e1f\nresult = valid\ntag = d83b7463a2c3800fe958c28eaa290813\n\n# tcId = 19\naad = 9aaf299eeea78f79\nct = 35766488d2bc7c2b8d17cbbb9abfad9e6d\niv = f0384fb876121410633d993d\nkey = f60c6a1b625725f76c7037b48fe3577fa7f7b87b1bd5a982176d182306ffb870\nmsg = 63858ca3e2ce69887b578a3c167b421c9c\nresult = valid\ntag = 1f391e657b2738dda08448cba2811ceb\n\n# tcId = 20\naad = \nct = 42f26c56cb4be21d9d8d0c80fc99dde00d75f38074bfe764\niv = e6b1adf2fd58a8762c65f31b\nkey = 0212a8de5007ed87b33f1a7090b6114f9e08cefd9607f2c276bdcfdbc5ce9cd7\nmsg = 10f1ecf9c60584665d9ae5efe279e7f7377eea6916d2b111\nresult = valid\ntag = 54aa7e13d48fff7d7557039457040a3a\n\n# tcId = 21\naad = 3e8bc5ade182ff08\nct = 123032437b4bfd6920e8f7e7e0087ae4889ebe7a0ad0e900\niv = 6b282ebecc541bcd7834ed55\nkey = c5bc09565646e7edda954f1f739223dada20b95c44ab033d0fae4b0283d18be3\nmsg = 9222f9018e54fd6de1200806a9ee8e4cc904d29f25cba193\nresult = valid\ntag = 3cf68f179550da63d3b96c2d55411865\n\n# tcId = 22\naad = \nct = 45c7d6b53acad4abb68876a6e96a48fb59524d2c92c9d8a189c9fd2db91746\niv = 04a9be03508a5f31371a6fd2\nkey = 2eb51c469aa8eb9e6c54a8349bae50a20f0e382711bba1152c424f03b6671d71\nmsg = b053999286a2824f42cc8c203ab24e2c97a685adcc2ad32662558e55a5c729\nresult = valid\ntag = 566d3ca10e311b695f3eae1551652493\n\n# tcId = 23\naad = 374618a06ea98a48\nct = 46a80c4187024720084627580080dde5a3f4a11093a7076ed6f3d326bc7b70\niv = 470a339ecb3219b8b81a1f8b\nkey = 7f5b74c07ed1b40fd14358fe2ff2a740c116c7706510e6a437f19ea49911cec4\nmsg = f45206abc25552b2abc9ab7fa243035fedaaddc3b2293956f1ea6e7156e7eb\nresult = valid\ntag = 534d4aa2835a52e72d14df0e4f47f25f\n\n# tcId = 24\naad = \nct = ea29afa49d36e8760f5fe19723b9811ed5d519934a440f5081ac430b953b0e21\niv = 72cfd90ef3026ca22b7e6e6a\nkey = e1731d5854e1b70cb3ffe8b786a2b3ebf0994370954757b9dc8c7bc5354634a3\nmsg = b9c554cbc36ac18ae897df7beecac1dbeb4eafa156bb60ce2e5d48f05715e678\nresult = valid\ntag = 222541af46b86533c6b68d2ff108a7ea\n\n# tcId = 25\naad = 2333e5ce0f93b059\nct = 6dad637897544d8bf6be9507ed4d1bb2e954bc427e5de729daf50762846ff2f4\niv = 262880d475f3dac5340dd1b8\nkey = 27d860631b0485a410702fea61bc873f3442260caded4abde25b786a2d97f145\nmsg = 6b2604996cd30c14a13a5257ed6cffd3bc5e29d6b97eb1799eb335e281ea451e\nresult = valid\ntag = 7b997d93c982189d7095dc794c746232\n\n# tcId = 26\naad = \nct = fba78ae4f9d808a62e3da40be2cb7700c3613d9eb2c529c652e76a432c658d27095f0eb8f940c324981ea935e507f9\niv = e74a515e7e2102b90bef55d2\nkey = cf0d40a4644e5f51815165d5301b22631f4544c49a1878e3a0a5e8e1aae0f264\nmsg = 973d0c753826bae466cf9abb3493152e9de7819e2bd0c71171346b4d2cebf8041aa3cedc0dfd7b467e26228bc86c9a\nresult = valid\ntag = 8f046956db3a512908bd7afc8f2ab0a9\n\n# tcId = 27\naad = b3e4064683b02d84\nct = a1ffed80761829ecce242e0e88b138049016bca018da2b6e19986b3e318cae8d806198fb4c527cc39350ebddeac573\niv = d4d807341683825b31cd4d95\nkey = 6cbfd71c645d184cf5d23c402bdb0d25ec54898c8a0273d42eb5be109fdcb2ac\nmsg = a98995504df16f748bfb7785ff91eeb3b660ea9ed3450c3d5e7b0e79ef653659a9978d75542ef91c456762215640b9\nresult = valid\ntag = c4cbf0befda0b70242c640d7cd02d7a3\n\n# tcId = 28\naad = \nct = 9a4ef22b181677b5755c08f747c0f8d8e8d4c18a9cc2405c12bb51bb1872c8e8b877678bec442cfcbb0ff464a64b74332cf072898c7e0eddf6232ea6e27efe50\niv = d61040a313ed492823cc065b\nkey = 5b1d1035c0b17ee0b0444767f80a25b8c1b741f4b50a4d3052226baa1c6fb701\nmsg = d096803181beef9e008ff85d5ddc38ddacf0f09ee5f7e07f1e4079cb64d0dc8f5e6711cd4921a7887de76e2678fdc67618f1185586bfea9d4c685d50e4bb9a82\nresult = valid\ntag = 9ff3427a0f32fa566d9ca0a78aefc013\n\n# tcId = 29\naad = 7193f623663321a2\nct = 5fbbdecc",
     "34be201614f636031eeb42f1cace3c79a12cffd871ee8e73820c829749f1abb4294367849fb6c2aa56bda8a3078f723d7c1c852024b017b58973fb1e\niv = d31c21aba175b70de4ebb19c\nkey = 97d635c4f47574d9998a90875da1d3a284b755b2d39297a5725235190e10a97e\nmsg = 94ee166d6d6ecf8832437136b4ae805d428864359586d9193a25016293edba443c58e07e7b7195ec5bd84582a9d56c8d4a108c7d7ce34e6c6f8ea1bec0567317\nresult = valid\ntag = 09263da7b4cb921452f97dca40f580ec\n\n# tcId = 30\naad = \nct = d0102f6c258bf49742cec34cf2d0fedf23d105fb4c84cf98515e1bc9a64f8ad5be8f0721bde50645d00083c3a263a31053b760245f52ae2866a5ec83b19f61be1d30d5c5d9fecc4cbbe08fd385813a2aa39a00ff9c10f7f23702add1e4b2ffa31c\niv = 17c86a8abbb7e003acde2799\nkey = fe6e55bdaed1f7284ca5fc0f8c5f2b8df56dc0f49e8ca66a41995e783351f901\nmsg = b429eb80fb8fe8baeda0c85b9c333458e7c2992e558475069d12d45c22217564121588032297eff56783742a5fc22d7410ffb29d66098661d76f126c3c27689e43b37267cac5a3a6d3ab49e391da29cd3054a5692e2807e4c3ea46c8761d50f592\nresult = valid\ntag = 41865fc71de12b19612127ce49993bb0\n\n# tcId = 31\naad = a11c40b603767330\nct = 7545391b51de01d5c53dfaca777909063e58edee4bb1227e7110ac4d2620c2aec2f848f56deeb037a8dced75afa8a6c890e2dee42f950bb33d9e2424d08a505d899563973ed38870f3de6ee2adc7fe072c366c14e2cf7ca62fb3d36bee11685461\niv = 46362f45d6379e63e5229460\nkey = aabc063474e65c4c3e9bdc480dea97b45110c8618846ff6b15bdd2a4a5682c4e\nmsg = ceb534ce50dc23ff638ace3ef63ab2cc2973eeada80785fc165d06c2f5100ff5e8ab2882c475afcd05ccd49f2e7d8f55ef3a72e3dc51d6852b8e6b9e7aece57be6556b0b6d9413e33fc5fc24a9a205ad59574bb39d944a92dc47970d84a6ad3176\nresult = valid\ntag = b70d44ef8c66c5c7bbf10dcadd7facf6\n\n# tcId = 32\naad = 02\nct = 7e72f5a185af16a611921b438f749f0b\niv = 87345f1055fd9e2102d50656\nkey = 7d00b48095adfa3272050607b264185002ba99957c498be022770f2ce2f3143c\nmsg = e5ccaa441bc814688f8f6e8f28b500b2\nresult = valid\ntag = 1242c670732334029adfe1c5001651e4\n\n# tcId = 33\naad = b648\nct = 85f29a719557cdd14d1f8fffab6d9e60\niv = 87a3163ec0598ad95b3aa713\nkey = 6432717f1db85e41ac7836bce25185a080d5762b9e2b18444b6ec72c3bd8e4dc\nmsg = 02cde168fba3f544bbd0332f7adeada8\nresult = valid\ntag = 732ca32becd515a1ed353f542e999858\n\n# tcId = 34\naad = bd4cd02fc7502bbdbdf6c9a3cbe8f0\nct = c1b295936d56fadac03e5f742bff73a1\niv = 6f573aa86baa492ba46596df\nkey = 8e34cf73d245a1082a920b86364eb896c4946467bcb3d58929fcb36690e6394f\nmsg = 16ddd23ff53f3d23c06334487040eb47\nresult = valid\ntag = 39c457dbab66382babb3b55800cda5b8\n\n# tcId = 35\naad = 89cce9fb47441d07e0245a66fe8b778b\nct = c84c9bb7c61c1bcb17772a1c500c5095\niv = 1a6518f02ede1da6809266d9\nkey = cb5575f5c7c45c91cf320b139fb594237560d0a3e6f865a67d4f633f2c08f016\nmsg = 623b7850c321e2cf0c6fbcc8dfd1aff2\nresult = valid\ntag = dbadf7a5138ca03459a2cd65831e092f\n\n# tcId = 36\naad = d19f2d989095f7ab03a5fde84416e00c0e\nct = 94bc80621ed1e71b1fd2b5c3a15e3568\niv = 564dee49ab00d240fc1068c3\nkey = a5569e729a69b24ba6e0ff15c4627897436824c941e9d00b2e93fddc4ba77657\nmsg = 87b3a4d7b26d8d3203a0de1d64ef82e3\nresult = valid\ntag = 333511861796978401598b963722f5b3\n\n# tcId = 37\naad = 5e6470facd99c1d81e37cd44015fe19480a2a4d3352a4ff560c0640fdbda\nct = 299b5d3f3d03c087209a16e285143111\niv = df8713e87ec3dbcfad14d53e\nkey = 56207465b4e48e6d04630f4a42f35cfc163ab289c22a2b4784f6f9290330bee0\nmsg = e601b38557797da2f8a4106a089d1da6\nresult = valid\ntag = 4b454ed198de117e83ec49fa8d8508d6\n\n# tcId = 38\naad = ba446f6f9a0ced22450feb10737d9007fd69abc19b1d4d9049a5551e86ec2b37\nct = 605bbf90aeb974f6602bc778056f0dca\niv = 8df4b15a888c33286a7b7651\nkey = 3937986af86dafc1ba0c4672d8abc46c207062682d9c264ab06d6c5807205130\nmsg = dc9e9eaf11e314182df6a4eba17aec9c\nresult = valid\ntag = 38ea23d99054b46b42ffe004129d2204\n\n# tcId = 39\naad = d41a828d5e71829247021905402ea257dccbc3b80fcd5675056b68bb59e62e8873\nct = 7b7ce0d824809a70de32562ccf2c2bbd\niv = be40e5f1a11817a0a8fa8949\nkey = 36372abcdb78e0279646ac3d176b9674e9154eecf0d5469c651ec7e16b4c1199\nmsg = 81ce84ede9b35859cc8c49a8f6be7dc6\nresult = valid\ntag = 15d44a00ce0d19b4231f921e22bc0a43\n\n# tcId = 40\naad = 3f2dd49bbf09d69a78a3d80ea2566614fc379474196c1aae84583da73d7ff85c6f42ca42056a9792cc1b9fb3c7d261\nct = ca82bff3e2f310ccc976672c4415e69b\niv = 84c87dae4eee27730ec35d12\nkey = 9f1479ed097d7fe529c11f2f5add9aaff4a1ca0b68997a2cb7f79749bd90aaf4\nmsg = a66747c89e857af3a18e2c79500087ed\nresult = valid\ntag = 57638c62a5d85ded774f913c813ea032\n\n# tcId = 41\naad = 00000000000000000000000000000000\nct = 0000000000000000000000000000000000000000000000000000000000000000\niv = 000000000000000001ee3200\nkey = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f\nmsg = 256d40888094178355d304846443fee8df99470303fb3b7b80e030beebd329be\nresult = valid\ntag = e6d3d7324a1cbba777bbb0ecdda37807\n\n# tcId = 42\naad = 00000000000000000000000000000000\nct = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\niv = 000000000000000001ee3200\nkey = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f\nmsg = 256d40888094178355d304846443fee8df99470303fb3b7b80e030beebd329bee3bcdb5b1edefcfe8bcda1b6a15c8c2b0869ffd2ec5e26e553b7b227fe87fdbd\nresult = valid\ntag = 062de6795f274fd2a305d76980bc9cce\n\n# tcId = 43\naad = 00000000000000000000000000000000\nct = 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\niv = 000000000000000001ee3200\nkey = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f\nmsg = 256d40888094178355d304846443fee8df99470303fb3b7b80e030beebd329bee3bcdb5b1edefcfe8bcda1b6a15c8c2b0869ffd2ec5e26e553b7b227fe87fdbd7ada44424269bffa5527f270acf68502b74c5ae2e60c0580981a4938459392c49bb2f284b646efc7f3f0b1361dc348ed77d30bc57692ed38fbac0188380488c7\nresult = valid\ntag = d8b47902baaeafb34203051529af282e\n\n# tcId = 44\naad = ffffffffffffffffffffffffffffffff\nct = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\niv = 000000000000000001ee3200\nkey = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f\nmsg = da92bf777f6be87caa2cfb7b9bbc01172066b8fcfc04c4847f1fcf41142cd641\nresult = valid\ntag = b3891c849cb52c27747edfcf31213bb6\n\n# tcId = 45\naad = ffffffffffffffffffffffffffffffff\nct = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\niv = 000000000000000001ee3200\nkey = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f\nmsg = da92bf777f6be87caa2cfb7b9bbc01172066b8fcfc04c4847f1fcf41142cd6411c4324a4e121030174325e495ea373d4f796002d13a1d91aac484dd801780242\nresult = valid\ntag = f0c12d26ef03029b62c008da27c5dc68\n\n# tcId = 46\naad = ffffffffffffffffffffffffffffffff\nct = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\niv = 000000000000000001ee3200\nkey = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f\nmsg = da92bf777f6be87caa2cfb7b9bbc01172066b8fcfc04c4847f1fcf41142cd6411c4324a4e121030174325e495ea373d4f796002d13a1d91aac484dd8017802428525bbbdbd964005aad80d8f53097afd48b3a51d19f3fa7f67e5b6c7ba6c6d3b644d0d7b49b910380c0f4ec9e23cb712882cf43a896d12c70453fe77c7fb7738\nresult = valid\ntag = ee65783001c25691fa28d0f5f1c1d762\n\n# tcId = 47\naad = 00000080000000800000008000000080\nct = 0000008000000080000000800000008000000080000000800000008000000080\niv = 000000000000000001ee3200\nkey = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f\nmsg = 256d40088094170355d304046443fe68df99478303fb3bfb80e0303eebd3293e\nresult = valid\ntag = 79ba7a29f5a7bb75797af87a610129a4\n\n# tcId = 48\naad = 00000080000000800000008000000080\nct = 00000080000000800000008000000080000000800000008000000080000000800000008000000080000000800000008000000080000000800000008000000080\niv = 000000000000000001ee3200\nkey = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f\nmsg = 256d40088094170355d304046443fe68df99478303fb3bfb80e0303eebd3293ee3bcdbdb1edefc7e8bcda136a15c8cab0869ff52ec5e266553b7b2a7fe87fd3d\nresult = valid\ntag = 36b1743819e1b9ba1551e8ed922a959a\n\n# tcId = 49\naad = 0000",
     "0080000000800000008000000080\nct = 0000008000000080000000800000008000000080000000800000008000000080000000800000008000000080000000800000008000000080000000800000008000000080000000800000008000000080000000800000008000000080000000800000008000000080000000800000008000000080000000800000008000000080\niv = 000000000000000001ee3200\nkey = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f\nmsg = 256d40088094170355d304046443fe68df99478303fb3bfb80e0303eebd3293ee3bcdbdb1edefc7e8bcda136a15c8cab0869ff52ec5e266553b7b2a7fe87fd3d7ada44c24269bf7a5527f2f0acf68582b74c5a62e60c0500981a49b8459392449bb2f204b646ef47f3f0b1b61dc3486d77d30b457692edb8fbac010838048847\nresult = valid\ntag = feac4955554e806f3a1902e24432c08a\n\n# tcId = 50\naad = ffffff7fffffff7fffffff7fffffff7f\nct = ffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7f\niv = 000000000000000001ee3200\nkey = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f\nmsg = da92bff77f6be8fcaa2cfbfb9bbc01972066b87cfc04c4047f1fcfc1142cd6c1\nresult = valid\ntag = 20a3798df1292c5972bf9741aec38a19\n\n# tcId = 51\naad = ffffff7fffffff7fffffff7fffffff7f\nct = ffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7f\niv = 000000000000000001ee3200\nkey = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f\nmsg = da92bff77f6be8fcaa2cfbfb9bbc01972066b87cfc04c4047f1fcfc1142cd6c11c432424e121038174325ec95ea37354f79600ad13a1d99aac484d58017802c2\nresult = valid\ntag = c03d9f67354a97b2f074f7551557e49c\n\n# tcId = 52\naad = ffffff7fffffff7fffffff7fffffff7f\nct = ffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7f\niv = 000000000000000001ee3200\nkey = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f\nmsg = da92bff77f6be8fcaa2cfbfb9bbc01972066b87cfc04c4047f1fcfc1142cd6c11c432424e121038174325ec95ea37354f79600ad13a1d99aac484d58017802c28525bb3dbd964085aad80d0f53097a7d48b3a59d19f3faff67e5b647ba6c6dbb644d0dfb49b910b80c0f4e49e23cb792882cf4ba896d12470453fef7c7fb77b8\nresult = valid\ntag = c86da8dd652286d50213d328d63e4006\n\n# tcId = 53\naad = 7fffffff7fffffff7fffffff7fffffff\nct = 7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff\niv = 000000000000000001ee3200\nkey = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f\nmsg = 5a92bf77ff6be87c2a2cfb7b1bbc0117a066b8fc7c04c484ff1fcf41942cd641\nresult = valid\ntag = bede9083ceb36ddfe5fa811f95471c67\n\n# tcId = 54\naad = 7fffffff7fffffff7fffffff7fffffff\nct = 7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff\niv = 000000000000000001ee3200\nkey = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f\nmsg = 5a92bf77ff6be87c2a2cfb7b1bbc0117a066b8fc7c04c484ff1fcf41942cd6419c4324a461210301f4325e49dea373d47796002d93a1d91a2c484dd881780242\nresult = valid\ntag = 300874bb0692b689dead9ae15b067390\n\n# tcId = 55\naad = 7fffffff7fffffff7fffffff7fffffff\nct = 7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff\niv = 000000000000000001ee3200\nkey = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f\nmsg = 5a92bf77ff6be87c2a2cfb7b1bbc0117a066b8fc7c04c484ff1fcf41942cd6419c4324a461210301f4325e49dea373d47796002d93a1d91a2c484dd8817802420525bbbd3d9640052ad80d8fd3097afdc8b3a51d99f3fa7fe7e5b6c73a6c6d3be44d0d7bc9b910388c0f4ec9623cb712082cf43a096d12c78453fe7747fb7738\nresult = valid\ntag = 99cad85f45ca40942d0d4d5e950ade22\n\n# tcId = 56\naad = 00000000ffffffff00000000ffffffff\nct = 00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff\niv = 000000000000000001ee3200\nkey = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f\nmsg = 256d40887f6be87c55d304849bbc0117df994703fc04c48480e030be142cd641\nresult = valid\ntag = 8bbe145272e7c2d9a1891a3ab0983d9d\n\n# tcId = 57\naad = 00000000ffffffff00000000ffffffff\nct = 00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff\niv = 000000000000000001ee3200\nkey = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f\nmsg = 256d40887f6be87c55d304849bbc0117df994703fc04c48480e030be142cd641e3bcdb5be12103018bcda1b65ea373d40869ffd213a1d91a53b7b22701780242\nresult = valid\ntag = 3b41861913a8f6de7f61e225631bc382\n\n# tcId = 58\naad = 00000000ffffffff00000000ffffffff\nct = 00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff\niv = 000000000000000001ee3200\nkey = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f\nmsg = 256d40887f6be87c55d304849bbc0117df994703fc04c48480e030be142cd641e3bcdb5be12103018bcda1b65ea373d40869ffd213a1d91a53b7b227017802427ada4442bd9640055527f27053097afdb74c5ae219f3fa7f981a4938ba6c6d3b9bb2f28449b91038f3f0b136e23cb71277d30bc5896d12c7fbac0188c7fb7738\nresult = valid\ntag = 8428bcf023ec6bf31fd9efb203ff0871\n\n# tcId = 59\naad = ffffffff00000000ffffffff00000000\nct = ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000\niv = 000000000000000001ee3200\nkey = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f\nmsg = da92bf7780941783aa2cfb7b6443fee82066b8fc03fb3b7b7f1fcf41ebd329be\nresult = valid\ntag = 139fdf6474ea24f549b075825f2c7620\n\n# tcId = 60\naad = ffffffff00000000ffffffff00000000\nct = ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000\niv = 000000000000000001ee3200\nkey = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f\nmsg = da92bf7780941783aa2cfb7b6443fee82066b8fc03fb3b7b7f1fcf41ebd329be1c4324a41edefcfe74325e49a15c8c2bf796002dec5e26e5ac484dd8fe87fdbd\nresult = valid\ntag = bbad8d863b835a8e8664fd1d4566b6b4\n\n# tcId = 61\naad = ffffffff00000000ffffffff00000000\nct = ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000\niv = 000000000000000001ee3200\nkey = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f\nmsg = da92bf7780941783aa2cfb7b6443fee82066b8fc03fb3b7b7f1fcf41ebd329be1c4324a41edefcfe74325e49a15c8c2bf796002dec5e26e5ac484dd8fe87fdbd8525bbbd4269bffaaad80d8facf6850248b3a51de60c058067e5b6c7459392c4644d0d7bb646efc70c0f4ec91dc348ed882cf43a7692ed380453fe77380488c7\nresult = valid\ntag = 42f2354297849a511d53e5571772f71f\n\n# tcId = 62\n# Flipped bit 0 in tag expected tag:a3e3fdf9fba6861b5ad2607f40b7f447\naad = 616164\nct = \niv = 000102030405060708090a0b\nkey = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff\nmsg = \nresult = invalid\ntag = a2e3fdf9fba6861b5ad2607f40b7f447\n\n# tcId = 63\n# Flipped bit 1 in tag expected tag:a3e3fdf9fba6861b5ad2607f40b7f447\naad = 616164\nct = \niv = 000102030405060708090a0b\nkey = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff\nmsg = \nresult = invalid\ntag = a1e3fdf9fba6861b5ad2607f40b7f447\n\n# tcId = 64\n# Flipped bit 7 in tag expected tag:a3e3fdf9fba6861b5ad2607f40b7f447\naad = 616164\nct = \niv = 000102030405060708090a0b\nkey = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff\nmsg = \nresult = invalid\ntag = 23e3fdf9fba6861b5ad2607f40b7f447\n\n# tcId = 65\n# Flipped bit 8 in tag expected tag:a3e3fdf9fba6861b5ad2607f40b7f447\naad = 616164\nct = \niv = 000102030405060708090a0b\nkey = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff\nmsg = \nresult = invalid\ntag = a3e2fdf9fba6861b5ad2607f40b7f447\n\n# tcId = 66\n# Flipped bit 31 in tag expected tag:a3e3fdf9fba6861b5ad2607f40b7f447\naad = 616164\nct = \niv = 000102030405060708090a0b\nkey = 00112233445566778899aabbccddeeff00112233445566778899aabbccdde",
@@ -2881,9 +2862,9 @@
     "fffffffffffffffffffffffffffff2b0b973f745b28aae937f59f18eac701\niv = 0000000000000000064c2d52\nkey = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f\nmsg = fe9428d079351f665cd001354319875cc001edc5da442e719bce9abe273af144b47aed35cb5a2fcaa0346efb9365546448025f41fa4e336c786957a2a7c4930a6c2d9096524fa1b2b023b8b28822277300266ea1e43644a34d8dd1dc93f2fa13\nresult = valid\ntag = d68ce174079add028dd05cf814630488\n\n# tcId = 136\n# edge case intermediate sums in poly1305\naad = ffffffff\nct = b57867453f66f4daf9e474691f9c8515d3ffffffffffffffffffffffffffffff01101359851ad324a0dae88dc2430202d3ffffffffffffffffffffffffffffff01101359851ad324a0dae88dc2430202\niv = 0000000000000000064c2d52\nkey = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f\nmsg = b513b06ab9ac14435acb8aa3a37afdb6543d35f613e6d9093d38e975c38fe3b861950193b1bf0311ff117989aed9a999b0f6378171eae4396ea15dc240d1abf4b9c27c3028aa8d69ef06afc0b59eda8e\nresult = valid\ntag = aa48a3887d4b059699c2fdf9c6787e0a\n\n# tcId = 137\n# edge case intermediate sums in poly1305\naad = ffffffff\nct = ffffffffffffffffffffffffffffffff5333c3e1f8d78eacca0707526cad018cafffffffffffffffffffffffffffffff3049702414b599502624fdfe29313204afffffffffffffffffffffffffffffff3049702414b599502624fdfe29313204\niv = 0000000000000000064c2d52\nkey = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f\nmsg = ff9428d079351f665cd001354319875cd4f109e814cea85a08c011d850dd1dcbcf7aed35cb5a2fcaa0346efb936554645340b85a9aa08296b77a5fc3961f660f172d9096524fa1b2b023b8b2882227731b6489ba84d8f559829ed9bda2290f16\nresult = valid\ntag = b936a817f2211af129e2cf160fd42bcb\n\n# tcId = 138\n# edge case intermediate sums in poly1305\naad = ffffffff\nct = ffffffffffffffffffffffffffffffff588ea80ac1583f434a806813ae2a4a9eb6ffffffffffffffffffffffffffffff998d381adb2359ddbae786537d37b900b6ffffffffffffffffffffffffffffff998d381adb2359ddbae786537d37b900\niv = 0000000000000000064c2d52\nkey = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f\nmsg = ff9428d079351f665cd001354319875cdf4c62032d4119b588477e99925a56d9d67aed35cb5a2fcaa0346efb93655464fa84f0645536421b2bb9246ec219ed0b0e2d9096524fa1b2b023b8b288222773b2a0c1844b4e35d41e5da210f62f8412\nresult = valid\ntag = 9f7ac4351f6b91e63097a713115d05be\n\n# tcId = 139\n# edge case intermediate sums in poly1305\naad = ffffffff\nct = ffffffffffffffffffffffffffffffff943ac00981d89d2c14febfa5fb9cba1297ffffffffffffffffffffffffffffff00417083a7aa8d13f2fbb5dfc255a80497ffffffffffffffffffffffffffffff00417083a7aa8d13f2fbb5dfc255a804\niv = 0000000000000000064c2d52\nkey = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f\nmsg = ff9428d079351f665cd001354319875c13f80a006dc1bbdad639a92fc7eca655f77aed35cb5a2fcaa0346efb936554646348b8fd29bf96d563a517e27d7bfc0f2f2d9096524fa1b2b023b8b2882227732b6c891d37c7e11a5641919c494d9516\nresult = valid\ntag = 9a18a828070269f44700d009e7171cc9\n\n# tcId = 140\n# edge case intermediate sums in poly1305\naad = ffffffff\nct = ffffffffffffffffffffffffffffffff0527514c6e8876ce3bf49794595dda2d9cffffffffffffffffffffffffffffffd57800b44c65d9a331f28d6ee8b7dc019cffffffffffffffffffffffffffffffd57800b44c65d9a331f28d6ee8b7dc01\niv = 0000000000000000064c2d52\nkey = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f\nmsg = ff9428d079351f665cd001354319875c82e59b4582915038f933811e652dc66afc7aed35cb5a2fcaa0346efb93655464b671c8cac270c265a0ac2f535799880a242d9096524fa1b2b023b8b288222773fe55f92adc08b5aa9548a92d63afe113\nresult = valid\ntag = b436a82b93d555f74300d0199ba718ce\n\n# tcId = 141\n# edge case intermediate sums in poly1305\naad = ffffffff\nct = ffffffffffffffffffffffffffffffff7613e28e5b384f7063ea6f83b71dfa48a0ffffffffffffffffffffffffffffffc4ce90e77df311376de8650dc2a90d04a0ffffffffffffffffffffffffffffffc4ce90e77df311376de8650dc2a90d04\niv = 0000000000000000064c2d52\nkey = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f\nmsg = ff9428d079351f665cd001354319875cf1d12887b7216986a12d79098b6de60fc07aed35cb5a2fcaa0346efb93655464a7c75899f3e60af1fcb6c7307d87590f182d9096524fa1b2b023b8b288222773efe36979ed9e7d3ec952414e49b13016\nresult = valid\ntag = ce54a82e1fa942fa3f00d0294f3715d3\n\n# tcId = 142\n# edge case intermediate sums in poly1305\naad = ffffffff\nct = cb9a0db18d63d7ead7c960d6b286745fb3ffffffffffffffffffffffffffffffdebab4a1584250bffc2fc84d95decf04b3ffffffffffffffffffffffffffffffdebab4a1584250bffc2fc84d95decf04\niv = 0000000000000000064c2d52\nkey = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f\nmsg = cbf1da9e0ba9377374e69e1c0e600cfc343d35f613e6d9093d38e975c38fe3b8be3fa66b6ce7808aa3e45949f944649fd0f6378171eae4396ea15dc240d1abf46668dbc8f5f20ef2b3f38f00e2031788\nresult = valid\ntag = 2383ab0b799205699b510aa709bf31f1\n\n# tcId = 143\n# edge case intermediate sums in poly1305\naad = ffffffff\nct = 8f4c51bb42233a7276a2c0912a88f3cbc5ffffffffffffffffffffffffffffff66d6f56905d45806f30828a993869a03c5ffffffffffffffffffffffffffffff66d6f56905d45806f30828a993869a03\niv = 0000000000000000064c2d52\nkey = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f\nmsg = 8f278694c4e9daebd58d3e5b966e8b68423d35f613e6d9093d38e975c38fe3b80653e7a331718833acc3b9adff1c3198a6f6378171eae4396ea15dc240d1abf4de049a00a864064bbcd46fe4e45b428f\nresult = valid\ntag = 8bfbab17a9e0b8748b510ae7d9fd2305\n\n# tcId = 144\n# edge case intermediate sums in poly1305\naad = ffffffff\nct = d5ffffffffffffffffffffffffffffff1de01d03a4fb692b0f135717da3c93039cffffffffffffffffffffffffffffff14bc017957dcfa2cc0dbb81df583cb019cffffffffffffffffffffffffffffff14bc017957dcfa2cc0dbb81df583cb01\niv = 0000000000000000064c2d52\nkey = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f\nmsg = d59428d079351f665cd001354319875c9a22d70a48e24fddcdd4419de64c8f44fc7aed35cb5a2fcaa0346efb9365546477b5c907d9c9e1ea51851a204aad9f0a242d9096524fa1b2b023b8b2882227733f91f8e7c7b1962564619c5e7e9bf613\nresult = valid\ntag = 49bc6e9fc51c4d503036644d842773d2\n\n# tcId = 145\n# edge case intermediate sums in poly1305\naad = ffffffff\nct = dbfffffffffffffffffffffffffffffff217ae3349b6b5bb4e092fa6ff9ec700a0ffffffffffffffffffffffffffffff031292ac886a33c0fbd190bcce75fc03a0ffffffffffffffffffffffffffffff031292ac886a33c0fbd190bcce75fc03\niv = 0000000000000000064c2d52\nkey = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f\nmsg = db9428d079351f665cd001354319875c75d5643aa5af934d8cce392cc3eedb47c07aed35cb5a2fcaa0346efb93655464601b5ad2067f28066a8f3281715ba808182d9096524fa1b2b023b8b288222773283f6b3218075fc95f6bb4ff456dc111\nresult = valid\ntag = 63da6ea251f039532c36645d38b76fd7\n\n# tcId = 146\n# edge case intermediate sums in poly1305\naad = ffffffff\nct = 93ffffffffffffffffffffffffffffffe58af369ae0fc2f5290b7c7f659c9704f7ffffffffffffffffffffffffffffffbbc10b84948b5c8c2f0c72113ea9bd04f7ffffffffffffffffffffffffffffffbbc10b84948b5c8c2f0c72113ea9bd04\niv = 0000000000000000064c2d52\nkey = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f\nmsg = 939428d079351f665cd001354319875c624839604216e403ebcc6af559ec8b43977aed35cb5a2fcaa0346efb93655464d8c8c3fa1a9e474abe52d02c8187e90f4f2d9096524fa1b2b023b8b28822277390ecf21a04e630858bb65652b5b18016\nresult = valid\ntag = 73eb2724b5c405f04d00d0f15840a1c1\n\n[ivSize = 64]\n[keySize = 256]\n[tagSize = 128]\n\n# tcId = 147\n# invalid nonce size\naad = \nct = \niv = 5f5f5f5f5f5f5f5f\nkey = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f\nmsg = \nresult = invalid\ntag = \n\n[ivSize = 80]\n[keySize = 256]\n[tagSize = 128]\n\n# tcId = 148\n# invalid nonce size\naad = \nct = \niv = 5f5f5f5f5f5f5f5f5f5f\nkey = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f\nmsg = \nresult = invalid\ntag = \n\n[ivSize = 88]\n[keySize = 256]\n[tagSize = 128]\n\n# tcId = 149\n# invalid nonce size\naad = \nct = \niv = 5f5f5f5f5f5f5f5f5f5f5f\nkey = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f\nmsg = \nresult = invalid\ntag = \n\n[ivSize = 112]\n[keySize = 256]\n[tagSize = 128]\n\n# tcId = 150\n# invalid nonce size\naad = \nct = \niv = 5f5f5f5f5f5f5f5f5f5f5f5f5f5f\nkey = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f\nmsg = \nresult = invalid\ntag = \n\n[ivSize = 128]\n[keySize = 256]\n[tagSize = 128]\n\n# tcId = 151\n# invalid nonce size\naad = \nct = \niv = 5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f\nkey = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f\nmsg = \nresu",
     "lt = invalid\ntag = \n\n",
 };
-static const size_t kLen61 = 299955;
+static const size_t kLen60 = 299955;
 
-static const char *kData61[] = {
+static const char *kData60[] = {
     "# Imported from Wycheproof's dsa_test.json.\n# This file is generated by convert_wycheproof.go. Do not edit by hand.\n#\n# Algorithm: DSA\n# Generator version: 0.4.12\n\n[key.g = 0835aa8c358bbf01a1846d1206323fabe408b0e98789fcc6239da14d4b3f86c276a8f48aa85a59507e620ad1bc745f0f1cbf63ec98c229c2610d77c634d1642e404354771655b2d5662f7a45227178ce3430af0f6b3bb94b52f7f51e97bad659b1ba0684e208be624c28d82fb1162f18dd9dce45216461654cf3374624d15a8d]\n[key.keySize = 1024]\n[key.p = 0b34ce9c1e78294d3258473842005d2a48c8c566cfca8f84c0606f2529b59a6d38aae071b53bb2167eaa4fc3b01fe176e787e481b6037aac62cbc3d089799536a869fa8cdfea1e8b1fd2d1cd3a30350859a2cd6b3ec2f9bfbb68bb11b4bbe2adaa18d64a93639543ae5e16293e311c0cf8c8d6e180df05d08c2fd2d93d570751f]\n[key.q = 0b90b38ba0a50a43ec6898d3f9b68049777f489b1]\n[key.type = DSAPublicKey]\n[key.y = 173931dda31eff32f24b383091bf77eacdc6efd557624911d8e9b9debf0f256d0cffac5567b33f6eaae9d3275bbed7ef9f5f94c4003c959e49a1ed3f58c31b21baccc0ed8840b46145f121b8906d072129bae01f071947997e8ef760d2d9ea21d08a5eb7e89390b21a85664713c549e25feda6e9e6c31970866bdfbc8fa981f6]\n[keyDer = 308201b63082012b06072a8648ce3804013082011e02818100b34ce9c1e78294d3258473842005d2a48c8c566cfca8f84c0606f2529b59a6d38aae071b53bb2167eaa4fc3b01fe176e787e481b6037aac62cbc3d089799536a869fa8cdfea1e8b1fd2d1cd3a30350859a2cd6b3ec2f9bfbb68bb11b4bbe2adaa18d64a93639543ae5e16293e311c0cf8c8d6e180df05d08c2fd2d93d570751f021500b90b38ba0a50a43ec6898d3f9b68049777f489b10281800835aa8c358bbf01a1846d1206323fabe408b0e98789fcc6239da14d4b3f86c276a8f48aa85a59507e620ad1bc745f0f1cbf63ec98c229c2610d77c634d1642e404354771655b2d5662f7a45227178ce3430af0f6b3bb94b52f7f51e97bad659b1ba0684e208be624c28d82fb1162f18dd9dce45216461654cf3374624d15a8d03818400028180173931dda31eff32f24b383091bf77eacdc6efd557624911d8e9b9debf0f256d0cffac5567b33f6eaae9d3275bbed7ef9f5f94c4003c959e49a1ed3f58c31b21baccc0ed8840b46145f121b8906d072129bae01f071947997e8ef760d2d9ea21d08a5eb7e89390b21a85664713c549e25feda6e9e6c31970866bdfbc8fa981f6]\n[sha = SHA-1]\n\n# tcId = 1\n# Legacy:ASN encoding of r misses leading 0\nmsg = 313233343030\nresult = acceptable\nsig = 302c0214aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b\n# ASN encoded integers with a leading hex-digit in the range 8 .. F are\n# negative. If the first hex-digit of a positive integer is 8 .. F then a\n# leading 0 must be added. Some libraries forgot to do this an therefore\n# generated invalid DSA signatures. Some providers, accept such legacy\n# signatures for compatibility.\n\n# tcId = 2\n# valid\nmsg = 313233343030\nresult = valid\nsig = 302d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 3\n# long form encoding of length\nmsg = 313233343030\nresult = invalid\nsig = 30812d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 4\n# long form encoding of length\nmsg = 313233343030\nresult = invalid\nsig = 302e02811500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 5\n# long form encoding of length\nmsg = 313233343030\nresult = invalid\nsig = 302e021500aa6a258fbf7d90e15614676d377df8b10e38db4a028114496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 6\n# length contains leading 0\nmsg = 313233343030\nresult = invalid\nsig = 3082002d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 7\n# length contains leading 0\nmsg = 313233343030\nresult = invalid\nsig = 302f0282001500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 8\n# length contains leading 0\nmsg = 313233343030\nresult = invalid\nsig = 302f021500aa6a258fbf7d90e15614676d377df8b10e38db4a02820014496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 9\n# wrong length\nmsg = 313233343030\nresult = invalid\nsig = 302e021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 10\n# wrong length\nmsg = 313233343030\nresult = invalid\nsig = 302c021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 11\n# wrong length\nmsg = 313233343030\nresult = invalid\nsig = 302d021600aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 12\n# wrong length\nmsg = 313233343030\nresult = invalid\nsig = 302d021400aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 13\n# wrong length\nmsg = 313233343030\nresult = invalid\nsig = 302d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0215496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 14\n# wrong length\nmsg = 313233343030\nresult = invalid\nsig = 302d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0213496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 15\n# uint32 overflow in length\nmsg = 313233343030\nresult = invalid\nsig = 3085010000002d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 16\n# uint32 overflow in length\nmsg = 313233343030\nresult = invalid\nsig = 30320285010000001500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 17\n# uint32 overflow in length\nmsg = 313233343030\nresult = invalid\nsig = 3032021500aa6a258fbf7d90e15614676d377df8b10e38db4a02850100000014496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 18\n# uint64 overflow in length\nmsg = 313233343030\nresult = invalid\nsig = 308901000000000000002d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 19\n# uint64 overflow in length\nmsg = 313233343030\nresult = invalid\nsig = 3036028901000000000000001500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 20\n# uint64 overflow in length\nmsg = 313233343030\nresult = invalid\nsig = 3036021500aa6a258fbf7d90e15614676d377df8b10e38db4a0289010000000000000014496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 21\n# length = 2**31 - 1\nmsg = 313233343030\nresult = invalid\nsig = 30847fffffff021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 22\n# length = 2**31 - 1\nmsg = 313233343030\nresult = invalid\nsig = 303102847fffffff00aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 23\n# length = 2**31 - 1\nmsg = 313233343030\nresult = invalid\nsig = 3031021500aa6a258fbf7d90e15614676d377df8b10e38db4a02847fffffff496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 24\n# length = 2**32 - 1\nmsg = 313233343030\nresult = invalid\nsig = 3084ffffffff021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 25\n# length = 2**32 - 1\nmsg = 313233343030\nresult = invalid\nsig = 30310284ffffffff00aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 26\n# length = 2**32 - 1\nmsg = 313233343030\nresult = invalid\nsig = 3031021500aa6a258fbf7d90e15614676d377df8b10e38db4a0284ffffffff496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 27\n# length = 2**40 - 1\nmsg = 313233343030\nresult = invalid\nsig = 3085ffffffffff021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 28\n# length = 2**40 - 1\nmsg = 313233343030\nresult = invalid\nsig = 30320285ffffffffff00aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 29\n# length = 2**40 - 1\nmsg = 313233343030\nresult = invalid\nsig = 3032021500aa6a258fbf7d90e15614676d377df8b10e38db4a0285ffffffffff496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 30\n# length = 2**64 - 1\nmsg = 313233343030\nresult = invalid\nsig = 3088ffffffffffffffff021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 31\n# length = 2**64 - 1\nmsg = 313233343030\nresult = invalid\nsig = 30350288ffffffffffffffff00aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 32\n# length = 2**64 - 1\nmsg = 313233343030\nresult = invalid\nsig = 3035021500aa6a258fbf7d90e15614676d377df8b10e38db4a0288ffffffffffffffff496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 33\n# incorrect length\nmsg = 313233343030\nresult = invalid\nsig = 30ff021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5",
     "f67d3532d1f991203bc3523b964c3b\n\n# tcId = 34\n# incorrect length\nmsg = 313233343030\nresult = invalid\nsig = 302d02ff00aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 35\n# incorrect length\nmsg = 313233343030\nresult = invalid\nsig = 302d021500aa6a258fbf7d90e15614676d377df8b10e38db4a02ff496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 36\n# indefinite length without termination\nmsg = 313233343030\nresult = invalid\nsig = 3080021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 37\n# indefinite length without termination\nmsg = 313233343030\nresult = invalid\nsig = 302d028000aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 38\n# indefinite length without termination\nmsg = 313233343030\nresult = invalid\nsig = 302d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0280496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 39\n# removing sequence\nmsg = 313233343030\nresult = invalid\nsig = \n\n# tcId = 40\n# lonely sequence tag\nmsg = 313233343030\nresult = invalid\nsig = 30\n\n# tcId = 41\n# appending 0's to sequence\nmsg = 313233343030\nresult = invalid\nsig = 302f021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b0000\n\n# tcId = 42\n# prepending 0's to sequence\nmsg = 313233343030\nresult = invalid\nsig = 302f0000021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 43\n# appending unused 0's to sequence\nmsg = 313233343030\nresult = invalid\nsig = 302d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b0000\n\n# tcId = 44\n# appending null value to sequence\nmsg = 313233343030\nresult = invalid\nsig = 302f021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b0500\n\n# tcId = 45\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 3032498177302d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 46\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 30312500302d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 47\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 302f302d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b0004deadbeef\n\n# tcId = 48\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 3032221a498177021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 49\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 303122192500021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 50\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 30352217021500aa6a258fbf7d90e15614676d377df8b10e38db4a0004deadbeef0214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 51\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 3032021500aa6a258fbf7d90e15614676d377df8b10e38db4a22194981770214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 52\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 3031021500aa6a258fbf7d90e15614676d377df8b10e38db4a221825000214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 53\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 3035021500aa6a258fbf7d90e15614676d377df8b10e38db4a22160214496d5220b5f67d3532d1f991203bc3523b964c3b0004deadbeef\n\n# tcId = 54\n# including undefined tags\nmsg = 313233343030\nresult = invalid\nsig = 3035aa00bb00cd00302d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 55\n# including undefined tags\nmsg = 313233343030\nresult = invalid\nsig = 3033aa02aabb302d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 56\n# including undefined tags\nmsg = 313233343030\nresult = invalid\nsig = 3035221daa00bb00cd00021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 57\n# including undefined tags\nmsg = 313233343030\nresult = invalid\nsig = 3033221baa02aabb021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 58\n# including undefined tags\nmsg = 313233343030\nresult = invalid\nsig = 3035021500aa6a258fbf7d90e15614676d377df8b10e38db4a221caa00bb00cd000214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 59\n# including undefined tags\nmsg = 313233343030\nresult = invalid\nsig = 3033021500aa6a258fbf7d90e15614676d377df8b10e38db4a221aaa02aabb0214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 60\n# truncated length of sequence\nmsg = 313233343030\nresult = invalid\nsig = 3081\n\n# tcId = 61\n# using composition with indefinite length\nmsg = 313233343030\nresult = invalid\nsig = 3080302d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b0000\n\n# tcId = 62\n# using composition with indefinite length\nmsg = 313233343030\nresult = invalid\nsig = 30312280021500aa6a258fbf7d90e15614676d377df8b10e38db4a00000214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 63\n# using composition with indefinite length\nmsg = 313233343030\nresult = invalid\nsig = 3031021500aa6a258fbf7d90e15614676d377df8b10e38db4a22800214496d5220b5f67d3532d1f991203bc3523b964c3b0000\n\n# tcId = 64\n# using composition with wrong tag\nmsg = 313233343030\nresult = invalid\nsig = 3080312d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b0000\n\n# tcId = 65\n# using composition with wrong tag\nmsg = 313233343030\nresult = invalid\nsig = 30312280031500aa6a258fbf7d90e15614676d377df8b10e38db4a00000214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 66\n# using composition with wrong tag\nmsg = 313233343030\nresult = invalid\nsig = 3031021500aa6a258fbf7d90e15614676d377df8b10e38db4a22800314496d5220b5f67d3532d1f991203bc3523b964c3b0000\n\n# tcId = 67\n# Replacing sequence with NULL\nmsg = 313233343030\nresult = invalid\nsig = 0500\n\n# tcId = 68\n# changing tag value of sequence\nmsg = 313233343030\nresult = invalid\nsig = 2e2d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 69\n# changing tag value of sequence\nmsg = 313233343030\nresult = invalid\nsig = 2f2d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 70\n# changing tag value of sequence\nmsg = 313233343030\nresult = invalid\nsig = 312d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 71\n# changing tag value of sequence\nmsg = 313233343030\nresult = invalid\nsig = 322d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 72\n# changing tag value of sequence\nmsg = 313233343030\nresult = invalid\nsig = ff2d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 73\n# dropping value of sequence\nmsg = 313233343030\nresult = invalid\nsig = 3000\n\n# tcId = 74\n# using composition for sequence\nmsg = 313233343030\nresult = invalid\nsig = 3031300102302c1500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 75\n# truncate sequence\nmsg = 313233343030\nresult = invalid\nsig = 302c021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c\n\n# tcId = 76\n# truncate sequence\nmsg = 313233343030\nresult = invalid\nsig = 302c1500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 77\n# indefinite length\nmsg = 313233343030\nresult = invalid\nsig = 3080021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b0000\n\n# tcId = 78\n# indefinite length with truncated delimiter\nmsg = 313233343030\nresult = invalid\nsig = 3080021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b00\n\n# tcId = 79\n# indefinite length with additional element\nmsg = 313233343030\nresult = invalid\nsig = 3080021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b05000000\n\n# tcId = 80\n# indefinite length with truncated element\nmsg = 313233343030\nresult = invalid\nsig = 3080021500",
     "aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b060811220000\n\n# tcId = 81\n# indefinite length with garbage\nmsg = 313233343030\nresult = invalid\nsig = 3080021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b0000fe02beef\n\n# tcId = 82\n# indefinite length with nonempty EOC\nmsg = 313233343030\nresult = invalid\nsig = 3080021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b0002beef\n\n# tcId = 83\n# prepend empty sequence\nmsg = 313233343030\nresult = invalid\nsig = 302f3000021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 84\n# append empty sequence\nmsg = 313233343030\nresult = invalid\nsig = 302f021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b3000\n\n# tcId = 85\n# sequence of sequence\nmsg = 313233343030\nresult = invalid\nsig = 302f302d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 86\n# truncated sequence\nmsg = 313233343030\nresult = invalid\nsig = 3017021500aa6a258fbf7d90e15614676d377df8b10e38db4a\n\n# tcId = 87\n# repeat element in sequence\nmsg = 313233343030\nresult = invalid\nsig = 3043021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b0214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 88\n# removing integer\nmsg = 313233343030\nresult = invalid\nsig = 30160214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 89\n# lonely integer tag\nmsg = 313233343030\nresult = invalid\nsig = 3017020214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 90\n# lonely integer tag\nmsg = 313233343030\nresult = invalid\nsig = 3018021500aa6a258fbf7d90e15614676d377df8b10e38db4a02\n\n# tcId = 91\n# appending 0's to integer\nmsg = 313233343030\nresult = invalid\nsig = 302f021700aa6a258fbf7d90e15614676d377df8b10e38db4a00000214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 92\n# appending 0's to integer\nmsg = 313233343030\nresult = invalid\nsig = 302f021500aa6a258fbf7d90e15614676d377df8b10e38db4a0216496d5220b5f67d3532d1f991203bc3523b964c3b0000\n\n# tcId = 93\n# prepending 0's to integer\nmsg = 313233343030\nresult = invalid\nsig = 302f0217000000aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 94\n# prepending 0's to integer\nmsg = 313233343030\nresult = invalid\nsig = 302f021500aa6a258fbf7d90e15614676d377df8b10e38db4a02160000496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 95\n# appending unused 0's to integer\nmsg = 313233343030\nresult = invalid\nsig = 302f021500aa6a258fbf7d90e15614676d377df8b10e38db4a00000214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 96\n# appending null value to integer\nmsg = 313233343030\nresult = invalid\nsig = 302f021700aa6a258fbf7d90e15614676d377df8b10e38db4a05000214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 97\n# appending null value to integer\nmsg = 313233343030\nresult = invalid\nsig = 302f021500aa6a258fbf7d90e15614676d377df8b10e38db4a0216496d5220b5f67d3532d1f991203bc3523b964c3b0500\n\n# tcId = 98\n# truncated length of integer\nmsg = 313233343030\nresult = invalid\nsig = 301802810214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 99\n# truncated length of integer\nmsg = 313233343030\nresult = invalid\nsig = 3019021500aa6a258fbf7d90e15614676d377df8b10e38db4a0281\n\n# tcId = 100\n# Replacing integer with NULL\nmsg = 313233343030\nresult = invalid\nsig = 301805000214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 101\n# Replacing integer with NULL\nmsg = 313233343030\nresult = invalid\nsig = 3019021500aa6a258fbf7d90e15614676d377df8b10e38db4a0500\n\n# tcId = 102\n# changing tag value of integer\nmsg = 313233343030\nresult = invalid\nsig = 302d001500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 103\n# changing tag value of integer\nmsg = 313233343030\nresult = invalid\nsig = 302d011500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 104\n# changing tag value of integer\nmsg = 313233343030\nresult = invalid\nsig = 302d031500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 105\n# changing tag value of integer\nmsg = 313233343030\nresult = invalid\nsig = 302d041500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 106\n# changing tag value of integer\nmsg = 313233343030\nresult = invalid\nsig = 302dff1500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 107\n# changing tag value of integer\nmsg = 313233343030\nresult = invalid\nsig = 302d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0014496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 108\n# changing tag value of integer\nmsg = 313233343030\nresult = invalid\nsig = 302d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0114496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 109\n# changing tag value of integer\nmsg = 313233343030\nresult = invalid\nsig = 302d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0314496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 110\n# changing tag value of integer\nmsg = 313233343030\nresult = invalid\nsig = 302d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0414496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 111\n# changing tag value of integer\nmsg = 313233343030\nresult = invalid\nsig = 302d021500aa6a258fbf7d90e15614676d377df8b10e38db4aff14496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 112\n# dropping value of integer\nmsg = 313233343030\nresult = invalid\nsig = 301802000214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 113\n# dropping value of integer\nmsg = 313233343030\nresult = invalid\nsig = 3019021500aa6a258fbf7d90e15614676d377df8b10e38db4a0200\n\n# tcId = 114\n# using composition for integer\nmsg = 313233343030\nresult = invalid\nsig = 303122190201000214aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 115\n# using composition for integer\nmsg = 313233343030\nresult = invalid\nsig = 3031021500aa6a258fbf7d90e15614676d377df8b10e38db4a221802014902136d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 116\n# modify first byte of integer\nmsg = 313233343030\nresult = invalid\nsig = 302d021502aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 117\n# modify first byte of integer\nmsg = 313233343030\nresult = invalid\nsig = 302d021500aa6a258fbf7d90e15614676d377df8b10e38db4a02144b6d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 118\n# modify last byte of integer\nmsg = 313233343030\nresult = invalid\nsig = 302d021500aa6a258fbf7d90e15614676d377df8b10e38dbca0214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 119\n# modify last byte of integer\nmsg = 313233343030\nresult = invalid\nsig = 302d021500aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964cbb\n\n# tcId = 120\n# truncate integer\nmsg = 313233343030\nresult = invalid\nsig = 302c021400aa6a258fbf7d90e15614676d377df8b10e38db0214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 121\n# truncate integer\nmsg = 313233343030\nresult = invalid\nsig = 302c0214aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 122\n# truncate integer\nmsg = 313233343030\nresult = invalid\nsig = 302c021500aa6a258fbf7d90e15614676d377df8b10e38db4a0213496d5220b5f67d3532d1f991203bc3523b964c\n\n# tcId = 123\n# truncate integer\nmsg = 313233343030\nresult = invalid\nsig = 302c021500aa6a258fbf7d90e15614676d377df8b10e38db4a02136d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 124\n# leading ff in integer\nmsg = 313233343030\nresult = invalid\nsig = 302e0216ff00aa6a258fbf7d90e15614676d377df8b10e38db4a0214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 125\n# leading ff in integer\nmsg = 313233343030\nresult = invalid\nsig = 302e021500aa6a258fbf7d90e15614676d377df8b10e38db4a0215ff496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 126\n# infinity\nmsg = 313233343030\nresult = invalid\nsig = 30190901800214496d5220b5f67d3532d1f991203bc3523b964c3b\n\n# tcId = 127\n# infinity\nmsg = 313233343030\nresult = invalid\nsig = 301a021500aa6a258fbf7d90e15614676d377df8b10e38db4a090180\n\n# tcId = 128\n# replacing integer with zero\nmsg = 313233343030\nresult = invalid\nsig = 30190201000214496d522",
@@ -2922,9 +2903,9 @@
     "ignatures with special case values for r and s.\nmsg = 54657374\nresult = invalid\nsig = 3024090380fe01021dff450969597a870820211805983688387a10cd4dcc451a7f3f432a96a3\n# Some implementations of DSA do not properly check for boundaries. In some\n# cases the modular inverse of 0 is simply 0. As a result there are\n# implementations where values such as r=1, s=0 lead to forgeries.\n\n# tcId = 835\n# Signatures with special case values for r and s.\nmsg = 54657374\nresult = invalid\nsig = 3008090380fe01020100\n# Some implementations of DSA do not properly check for boundaries. In some\n# cases the modular inverse of 0 is simply 0. As a result there are\n# implementations where values such as r=1, s=0 lead to forgeries.\n\n# tcId = 836\n# Signatures with special case values for r and s.\nmsg = 54657374\nresult = invalid\nsig = 3008090380fe01020101\n# Some implementations of DSA do not properly check for boundaries. In some\n# cases the modular inverse of 0 is simply 0. As a result there are\n# implementations where values such as r=1, s=0 lead to forgeries.\n\n# tcId = 837\n# Signatures with special case values for r and s.\nmsg = 54657374\nresult = invalid\nsig = 3008090380fe010201ff\n# Some implementations of DSA do not properly check for boundaries. In some\n# cases the modular inverse of 0 is simply 0. As a result there are\n# implementations where values such as r=1, s=0 lead to forgeries.\n\n# tcId = 838\n# Signatures with special case values for r and s.\nmsg = 54657374\nresult = invalid\nsig = 3023090380fe01021c5d7b4b5342bc7befef73fd33e4bbe3c2f7995919dd72c0605e6ab4ae\n# Some implementations of DSA do not properly check for boundaries. In some\n# cases the modular inverse of 0 is simply 0. As a result there are\n# implementations where values such as r=1, s=0 lead to forgeries.\n\n# tcId = 839\n# Signatures with special case values for r and s.\nmsg = 54657374\nresult = invalid\nsig = 3023090380fe01021c5d7b4b5342bc7befef73fd33e4bbe3c2f7995919dd72c0605e6ab4af\n# Some implementations of DSA do not properly check for boundaries. In some\n# cases the modular inverse of 0 is simply 0. As a result there are\n# implementations where values such as r=1, s=0 lead to forgeries.\n\n# tcId = 840\n# Signatures with special case values for r and s.\nmsg = 54657374\nresult = invalid\nsig = 3024090380fe01021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695c\n# Some implementations of DSA do not properly check for boundaries. In some\n# cases the modular inverse of 0 is simply 0. As a result there are\n# implementations where values such as r=1, s=0 lead to forgeries.\n\n# tcId = 841\n# Signatures with special case values for r and s.\nmsg = 54657374\nresult = invalid\nsig = 3024090380fe01021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d\n# Some implementations of DSA do not properly check for boundaries. In some\n# cases the modular inverse of 0 is simply 0. As a result there are\n# implementations where values such as r=1, s=0 lead to forgeries.\n\n# tcId = 842\n# Signatures with special case values for r and s.\nmsg = 54657374\nresult = invalid\nsig = 3024090380fe01021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e\n# Some implementations of DSA do not properly check for boundaries. In some\n# cases the modular inverse of 0 is simply 0. As a result there are\n# implementations where values such as r=1, s=0 lead to forgeries.\n\n# tcId = 843\n# Signatures with special case values for r and s.\nmsg = 54657374\nresult = invalid\nsig = 3024090380fe01021d0100000000000000000000000000000000000000000000000000000000\n# Some implementations of DSA do not properly check for boundaries. In some\n# cases the modular inverse of 0 is simply 0. As a result there are\n# implementations where values such as r=1, s=0 lead to forgeries.\n\n# tcId = 844\n# Signatures with special case values for r and s.\nmsg = 54657374\nresult = invalid\nsig = 3082010a090380fe0102820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667\n# Some implementations of DSA do not properly check for boundaries. In some\n# cases the modular inverse of 0 is simply 0. As a result there are\n# implementations where values such as r=1, s=0 lead to forgeries.\n\n# tcId = 845\n# Signatures with special case values for r and s.\nmsg = 54657374\nresult = invalid\nsig = 300a090380fe01090380fe01\n# Some implementations of DSA do not properly check for boundaries. In some\n# cases the modular inverse of 0 is simply 0. As a result there are\n# implementations where values such as r=1, s=0 lead to forgeries.\n\n# tcId = 846\n# random signature\nmsg = 54657374\nresult = valid\nsig = 303d021d00a771ef48c2916d48ba9ece53cafb9acb3cf317a78216fae144c88fb3021c65663b70365747f4392d480aaf12b50b162d2ce58b61ccbee88a8df9\n\n# tcId = 847\n# random signature\nmsg = 54657374\nresult = valid\nsig = 303e021d00946645d757f0adfbd301c9ee2c08bf0e059a5602de9525dbde789f81021d00a30eb7f2a5d9870c360315bf6d70d83e7b206bbc5ed7d2ded4bacb24\n\n# tcId = 848\n# random signature\nmsg = 54657374\nresult = valid\nsig = 303d021c70d3d4efc14853acf33f1060fee06a072773b4c9350d205e618646ab021d00b51e853022ff4922f955458e6b22f9454207a982927db32c76ee3344\n\n# tcId = 849\n# random signature\nmsg = 54657374\nresult = valid\nsig = 303c021c6ce7d91e02a62558e8dacd3cf180f81952a091845bbf47bf8fb9f48d021c1e6e4769bbbebc2fa9f819796e7b968c8b699c5f72ee517441c20359\n\n# tcId = 850\n# random signature\nmsg = 54657374\nresult = valid\nsig = 303d021c04aa8a8b3f9e1c3f2304070fd797634cec352bfda916bb7a7f20a174021d00a0bb9b091b921951241fae650aab087ac896ed190a3f7cf7aaa2300d\n\n[key.g = 16a65c58204850704e7502a39757040d34da3a3478c154d4e4a5c02d242ee04f96e61e4bd0904abdac8f37eeb1e09f3182d23c9043cb642f88004160edf9ca09b32076a79c32a627f2473e91879ba2c4e744bd2081544cb55b802c368d1fa83ed489e94e0fa0688e32428a5c78c478c68d0527b71c9a3abb0b0be12c44689639e7d3ce74db101a65aa2b87f64c6826db3ec72f4b5599834bb4edb02f7c90e9a496d3a55d535bebfc45d4f619f63f3dedbb873925c2f224e07731296da887ec1e4748f87efb5fdeb75484316b2232dee553ddaf02112b0d1f02da30973224fe27aeda8b9d4b2922d9ba8be39ed9e103a63c52810bc688b7e2ed4316e1ef17dbde]\n[key.keySize = 2048]\n[key.p = 08f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667]\n[key.q = 0baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d]\n[key.type = DSAPublicKey]\n[key.y = 0848177b9bcff136c52caef2a4a9bcb64dbefbac69e18aae499696b5ec7b270e90478b413bb8ad8f8eee8ad32107d7ba492c36b007f9ef30ebe1ee484d0ea7cb0ff4afaa8c705ad5e16576975414f1bc0efed25c2190a3ed0068bffa1f03bf6f21056c9bb383350851997cbc89cf8729b394527f08ab93ce9b360aa055a47177e82a4ce6fe76c8dffddbd6ee20fa08d0085d3983edd2c8d9a366ad2245b4ed28d6754769f5f3a798be4be19cf469399865d464e3f640438bce03c962c2344d0d550542aed3db55c153833bea44b4146878ba347c8614436c6aac4fd1a60f25c62b3f869a7d55cab4b7122d5e9af4322a3fc8214fa55dc1ee021459fb2c4595827]\n[keyDer = 308203433082023506072a8648ce3804013082022802820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667021d00baf696a68578f7dfdee7fa67c977c7",
     "85ef32b233bae580c0bcd5695d0282010016a65c58204850704e7502a39757040d34da3a3478c154d4e4a5c02d242ee04f96e61e4bd0904abdac8f37eeb1e09f3182d23c9043cb642f88004160edf9ca09b32076a79c32a627f2473e91879ba2c4e744bd2081544cb55b802c368d1fa83ed489e94e0fa0688e32428a5c78c478c68d0527b71c9a3abb0b0be12c44689639e7d3ce74db101a65aa2b87f64c6826db3ec72f4b5599834bb4edb02f7c90e9a496d3a55d535bebfc45d4f619f63f3dedbb873925c2f224e07731296da887ec1e4748f87efb5fdeb75484316b2232dee553ddaf02112b0d1f02da30973224fe27aeda8b9d4b2922d9ba8be39ed9e103a63c52810bc688b7e2ed4316e1ef17dbde03820106000282010100848177b9bcff136c52caef2a4a9bcb64dbefbac69e18aae499696b5ec7b270e90478b413bb8ad8f8eee8ad32107d7ba492c36b007f9ef30ebe1ee484d0ea7cb0ff4afaa8c705ad5e16576975414f1bc0efed25c2190a3ed0068bffa1f03bf6f21056c9bb383350851997cbc89cf8729b394527f08ab93ce9b360aa055a47177e82a4ce6fe76c8dffddbd6ee20fa08d0085d3983edd2c8d9a366ad2245b4ed28d6754769f5f3a798be4be19cf469399865d464e3f640438bce03c962c2344d0d550542aed3db55c153833bea44b4146878ba347c8614436c6aac4fd1a60f25c62b3f869a7d55cab4b7122d5e9af4322a3fc8214fa55dc1ee021459fb2c4595827]\n[sha = SHA-256]\n\n# tcId = 851\n# r,s = 1,1\nmsg = 54657374\nresult = valid\nsig = 3006020101020101\n\n# tcId = 852\n# r,s = 1,5\nmsg = 54657374\nresult = valid\nsig = 3006020101020105\n\n# tcId = 853\n# u2 small\nmsg = 54657374\nresult = valid\nsig = 3022020101021d009592121ed12d93197f1ffb863ac63937f28ef4f62f1e009a30aabab1\n\n# tcId = 854\n# s == q-1\nmsg = 54657374\nresult = valid\nsig = 3022020101021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695c\n\n[key.g = 16a65c58204850704e7502a39757040d34da3a3478c154d4e4a5c02d242ee04f96e61e4bd0904abdac8f37eeb1e09f3182d23c9043cb642f88004160edf9ca09b32076a79c32a627f2473e91879ba2c4e744bd2081544cb55b802c368d1fa83ed489e94e0fa0688e32428a5c78c478c68d0527b71c9a3abb0b0be12c44689639e7d3ce74db101a65aa2b87f64c6826db3ec72f4b5599834bb4edb02f7c90e9a496d3a55d535bebfc45d4f619f63f3dedbb873925c2f224e07731296da887ec1e4748f87efb5fdeb75484316b2232dee553ddaf02112b0d1f02da30973224fe27aeda8b9d4b2922d9ba8be39ed9e103a63c52810bc688b7e2ed4316e1ef17dbde]\n[key.keySize = 2048]\n[key.p = 08f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667]\n[key.q = 0baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d]\n[key.type = DSAPublicKey]\n[key.y = 629374929537e2c3b09f30d881554ca7357f89e25105474dbbce06e4001efd61481a457aa0d7d7e565e90b7a3d9c688005fb404bf3b6d3e61e402300beee7c58ceeaf00b112ddfeef3cbc2020ba2206dd4ef0563d7fa52c321b4ee6280eb8585041d03cadb9244dff21dc90417bbe6f06b91c2ca6484437c3846926b18ee22275081b60726e7a26a29a947eabd035ede83d65927b3ceb0d4d8c2f34e94a3de0f57e4ea99af059657529f6954b1ac9bb4484ca76b4083e1cf4264eff028662137761e4d7f35b1eda3cf516856f25553840e43ae38379d234b06c891822132081d19f0d5db9f23b4bbd5f5667dd78f3dd7f1fe5f25ca48515f6335ce1c9fd0a64b]\n[keyDer = 308203423082023506072a8648ce3804013082022802820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d0282010016a65c58204850704e7502a39757040d34da3a3478c154d4e4a5c02d242ee04f96e61e4bd0904abdac8f37eeb1e09f3182d23c9043cb642f88004160edf9ca09b32076a79c32a627f2473e91879ba2c4e744bd2081544cb55b802c368d1fa83ed489e94e0fa0688e32428a5c78c478c68d0527b71c9a3abb0b0be12c44689639e7d3ce74db101a65aa2b87f64c6826db3ec72f4b5599834bb4edb02f7c90e9a496d3a55d535bebfc45d4f619f63f3dedbb873925c2f224e07731296da887ec1e4748f87efb5fdeb75484316b2232dee553ddaf02112b0d1f02da30973224fe27aeda8b9d4b2922d9ba8be39ed9e103a63c52810bc688b7e2ed4316e1ef17dbde038201050002820100629374929537e2c3b09f30d881554ca7357f89e25105474dbbce06e4001efd61481a457aa0d7d7e565e90b7a3d9c688005fb404bf3b6d3e61e402300beee7c58ceeaf00b112ddfeef3cbc2020ba2206dd4ef0563d7fa52c321b4ee6280eb8585041d03cadb9244dff21dc90417bbe6f06b91c2ca6484437c3846926b18ee22275081b60726e7a26a29a947eabd035ede83d65927b3ceb0d4d8c2f34e94a3de0f57e4ea99af059657529f6954b1ac9bb4484ca76b4083e1cf4264eff028662137761e4d7f35b1eda3cf516856f25553840e43ae38379d234b06c891822132081d19f0d5db9f23b4bbd5f5667dd78f3dd7f1fe5f25ca48515f6335ce1c9fd0a64b]\n[sha = SHA-256]\n\n# tcId = 855\n# s == 1\nmsg = 54657374\nresult = valid\nsig = 3021021c5a252f4fc55618747fd94b13c9bee62bb958d85777cb07dd90710d24020101\n\n",
 };
-static const size_t kLen62 = 175947;
+static const size_t kLen61 = 175947;
 
-static const char *kData62[] = {
+static const char *kData61[] = {
     "# Imported from Wycheproof's ecdh_secp224r1_test.json.\n# This file is generated by convert_wycheproof.go. Do not edit by hand.\n#\n# Algorithm: ECDH\n# Generator version: 0.4.12\n\n[curve = secp224r1]\n[encoding = asn]\n\n# tcId = 1\n# normal case\nprivate = 565577a49415ca761a0322ad54e4ad0ae7625174baf372c2816f5328\npublic = 304e301006072a8648ce3d020106052b81040021033a00047d8ac211e1228eb094e285a957d9912e93deee433ed777440ae9fc719b01d050dfbe653e72f39491be87fb1a2742daa6e0a2aada98bb1aca\nresult = valid\nshared = b8ecdb552d39228ee332bafe4886dbff272f7109edf933bc7542bd4f\n\n# tcId = 2\n# compressed public key\nprivate = 565577a49415ca761a0322ad54e4ad0ae7625174baf372c2816f5328\npublic = 3032301006072a8648ce3d020106052b81040021031e00027d8ac211e1228eb094e285a957d9912e93deee433ed777440ae9fc71\nresult = acceptable\nshared = b8ecdb552d39228ee332bafe4886dbff272f7109edf933bc7542bd4f\n# The point in the public key is compressed. Not every library supports points\n# in compressed format.\n\n# tcId = 3\n# edge case for shared secret\nprivate = 0a2b6442a37f9201b56758034d2009be64b0ab7c02d7e398cac9665d6\npublic = 304e301006072a8648ce3d020106052b81040021033a0004e73a6ca72f3a2fae6e0a01a0ed03bfa3058b04576942eaf063095e62ca16fd31fa0f38eeb592cbeea1147751fdd2a5b6cc0ead404467a5b6\nresult = valid\nshared = 00000000000000000000000000000000000000000000000000000003\n\n# tcId = 4\n# edge case for shared secret\nprivate = 0a2b6442a37f9201b56758034d2009be64b0ab7c02d7e398cac9665d6\npublic = 304e301006072a8648ce3d020106052b81040021033a00045763fa2ae16367ad23d471cc9a52466f0d81d864e5640cefe384114594d9fecfbed4f254505ac8b41d2532055a07f0241c4818b552cbb636\nresult = valid\nshared = 00000000000000000000000100000000000000000000000000000001\n\n# tcId = 5\n# edge case for shared secret\nprivate = 0a2b6442a37f9201b56758034d2009be64b0ab7c02d7e398cac9665d6\npublic = 304e301006072a8648ce3d020106052b81040021033a0004142c1fd80fa2121a59aa898144084ec033f7a56a34eee0b499e29ae51c6d8c1bbb1ef2a76d565899fe44ffc1207d530d7f598fb77f4bb76b\nresult = valid\nshared = 00000000000000ffffffffffffff0000000000000100000000000000\n\n# tcId = 6\n# edge case for shared secret\nprivate = 0a2b6442a37f9201b56758034d2009be64b0ab7c02d7e398cac9665d6\npublic = 304e301006072a8648ce3d020106052b81040021033a0004ed6f793e10c80d12d871cf8988399c4898a9bf9ffd8f27399f63de25f0051cdf4eec7f368f922cfcd948893ceca0c92e540cc4367a99a66a\nresult = valid\nshared = 00000000ffffffffffffffff00000000000000010000000000000000\n\n# tcId = 7\n# edge case for shared secret\nprivate = 0a2b6442a37f9201b56758034d2009be64b0ab7c02d7e398cac9665d6\npublic = 304e301006072a8648ce3d020106052b81040021033a000408fcfc1a63c82860be12e4137433dfc40be9acdd245f9a8c4e56be61a385fc09f808383383f4b1d0d5365b6e5dcfacdc19bc7bcfed221274\nresult = valid\nshared = 0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff\n\n# tcId = 8\n# edge case for shared secret\nprivate = 0a2b6442a37f9201b56758034d2009be64b0ab7c02d7e398cac9665d6\npublic = 304e301006072a8648ce3d020106052b81040021033a0004d883ed77f1861e8712800d31df67888fe39f150c79a27aa88caeda6b180f3f623e2ff3ab5370cf8179165b085af3dd4502850c0104caed9a\nresult = valid\nshared = 0003fffffff00000003fffffff00000003fffffff000000040000000\n\n# tcId = 9\n# edge case for shared secret\nprivate = 0a2b6442a37f9201b56758034d2009be64b0ab7c02d7e398cac9665d6\npublic = 304e301006072a8648ce3d020106052b81040021033a00042b8b279b85ee3f3d2c0abeb36fdfc5aad6157d652d26489381a32cd73224bd757ef794acc92b0b3b9e7990618bb343a9a09bdb9d3616eff6\nresult = valid\nshared = 01fffffffc00000007fffffff00000001fffffffc000000080000001\n\n# tcId = 10\n# edge case for shared secret\nprivate = 0a2b6442a37f9201b56758034d2009be64b0ab7c02d7e398cac9665d6\npublic = 304e301006072a8648ce3d020106052b81040021033a00048bd5f03391eeeae1744e8fc53d314efffafa4d3fa4f1b95c3388a9cd7c86358b273119c537133eb55e79c6ac510b10980b379b919ccf2e2f\nresult = valid\nshared = 0a15c112ff784b1445e889f955be7e3ffdf451a2c0e76ab5cb32cf41\n\n# tcId = 11\n# edge case for shared secret\nprivate = 0a2b6442a37f9201b56758034d2009be64b0ab7c02d7e398cac9665d6\npublic = 304e301006072a8648ce3d020106052b81040021033a0004ce9631b6a16227778625c8e5421ae083cdd913abefde01dbe69f6c2b95386aff2b483b2c47151cfaabfd000614c683ce2e1778221ae42c1b\nresult = valid\nshared = 62989eaaa26a16f07330c3c51e0a4631fd016bfcede26552816aee39\n\n# tcId = 12\n# edge case for shared secret\nprivate = 0a2b6442a37f9201b56758034d2009be64b0ab7c02d7e398cac9665d6\npublic = 304e301006072a8648ce3d020106052b81040021033a00041f441c98eda956a6a7fdbfd8d21910860ab59d16c3e52f8e7fad6ca5df61a55fc508fc0499c55492f1e87bb2faa0cb4170b79f3a85ec2f3d\nresult = valid\nshared = 661ac958c0febbc718ccf39cefc6b66c4231fbb9a76f35228a3bf5c3\n\n# tcId = 13\n# edge case for shared secret\nprivate = 0a2b6442a37f9201b56758034d2009be64b0ab7c02d7e398cac9665d6\npublic = 304e301006072a8648ce3d020106052b81040021033a0004be74583cb9d3a05ae54923624e478a329a697d842dfae33141c844d7d9ba4fc96e0fe716ac0542e87368662fc2f0cb9b0ae57936ddec7190\nresult = valid\nshared = 6d7e41821abe1094d430237923d2a50de31768ab51b12dce8a09e34c\n\n# tcId = 14\n# edge case for shared secret\nprivate = 0a2b6442a37f9201b56758034d2009be64b0ab7c02d7e398cac9665d6\npublic = 304e301006072a8648ce3d020106052b81040021033a0004a281ad992b363597ac93ff0de8ab1f7e51a6672dcbb58f9d739ba430ce0192874038daefc3130eec65811c7255da70fea65c1003f6892faa\nresult = valid\nshared = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffff\n\n# tcId = 15\n# edge case for shared secret\nprivate = 0a2b6442a37f9201b56758034d2009be64b0ab7c02d7e398cac9665d6\npublic = 304e301006072a8648ce3d020106052b81040021033a0004be3e22133f51203f631b81dde8c020cdea5daa1f99cfc05c88fad2dc0f243798d6e72d1de9e3cdca4144e0a6c0f2a584d07589006972c197\nresult = valid\nshared = fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0008001\n\n# tcId = 16\n# edge case for shared secret\nprivate = 0a2b6442a37f9201b56758034d2009be64b0ab7c02d7e398cac9665d6\npublic = 304e301006072a8648ce3d020106052b81040021033a0004af14547c20afbd91bfe64ea03d45a76a71241f23520ef897ff91eff1b54ca6ca8c25fd73852ec6654617434eff7f0225684d4dea7a4f8a97\nresult = valid\nshared = ffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff\n\n# tcId = 17\n# edge case for shared secret\nprivate = 0a2b6442a37f9201b56758034d2009be64b0ab7c02d7e398cac9665d6\npublic = 304e301006072a8648ce3d020106052b81040021033a0004b1e484925018729926acda56ff3e2f6c1e7e8f162b178d8e8afb45564fceaa6da5d998fe26b6b26a055169063a5ab6908852ca8b54e2de6c\nresult = valid\nshared = fffff0000007fffffe000000ffffffc000001ffffff8000003ffffff\n\n# tcId = 18\n# edge case for shared secret\nprivate = 0a2b6442a37f9201b56758034d2009be64b0ab7c02d7e398cac9665d6\npublic = 304e301006072a8648ce3d020106052b81040021033a0004937eb09fb145c8829cb7df20a4cbeed396791373de277871d6c5f9cc3b5b4fd56464a71fc4a2a6af3bd251952bffa829489e68a8d06f96b6\nresult = valid\nshared = ffffffff00000000ffffffff00000000ffffffff00000000ffffffff\n\n# tcId = 19\n# edge cases for ephemeral key\nprivate = 2bc15cf3981f4e15bbad387b506df647989e5478160be862f8c26969\npublic = 304e301006072a8648ce3d020106052b81040021033a0004000000000000000000000000000000000000000000000000000000037cac269c67bd55ea14efff4eadefe5e74978514af14c88fab46ec046\nresult = valid\nshared = 3fa0b9ff70b884f9f57bb84f7a9532d93f6ba803f89dd8ff008177d7\n\n# tcId = 20\n# edge cases for ephemeral key\nprivate = 2bc15cf3981f4e15bbad387b506df647989e5478160be862f8c26969\npublic = 304e301006072a8648ce3d020106052b81040021033a0004000000000000000000000001000000000000000000000000000000012ea2f4917bdfdb008306cc10a18e2557633ba861001829dcbfb96fba\nresult = valid\nshared = be1ded8cb7ff8a585181f96d681e31b332fe27dcae922dca2310300d\n\n# tcId = 21\n# edge cases for ephemeral key\nprivate = 2bc15cf3981f4e15bbad387b506df647989e5478160be862f8c26969\npublic = 304e301006072a8648ce3d020106052b81040021033a000400000000000000ffffffffffffff000000000000010000000000000073ca5f8f104997a2399e0c7f25e72a75ec29fc4542533d3fea89a33a\nresult = valid\nshared = a2e86a260e13515918a0cafdd87855f231b5624c560f976159e06a75\n\n# tcId = 22\n# edge cases for ephemeral key\nprivate = 2bc15cf3981f4e15bbad387b506df647989e5478160be862f8c26969\npublic = 304e301006072a8648ce3d020106052b81040021033a000400000000ffffffffffffffff000000000000000100000000000000006fe6805f59b19b0dd389452a1d4a420bfeb6c369cf6fed5b12e6e654\nresult = valid\nshared = 31ef7c8d10404a0046994f313a70574b027e87f9028eca242c1b5",
     "bf5\n\n# tcId = 23\n# edge cases for ephemeral key\nprivate = 2bc15cf3981f4e15bbad387b506df647989e5478160be862f8c26969\npublic = 304e301006072a8648ce3d020106052b81040021033a00040000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff77c5cfa4e2c384938d48bd8dd98f54c86b279f1df8c0a1f6692439c9\nresult = valid\nshared = d1976a8ef5f54f24f5a269ad504fdca849fc9c28587ba294ef267396\n\n# tcId = 24\n# edge cases for ephemeral key\nprivate = 2bc15cf3981f4e15bbad387b506df647989e5478160be862f8c26969\npublic = 304e301006072a8648ce3d020106052b81040021033a00040003fffffff00000003fffffff00000003fffffff00000004000000001f0828136016bb97445461bc59f2175d8d23557d6b9381f26136e3d\nresult = valid\nshared = ce7890d108ddb2e5474e6417fcf7a9f2b3bd018816062f4835260dc8\n\n# tcId = 25\n# edge cases for ephemeral key\nprivate = 2bc15cf3981f4e15bbad387b506df647989e5478160be862f8c26969\npublic = 304e301006072a8648ce3d020106052b81040021033a000401fffffffc00000007fffffff00000001fffffffc0000000800000012d8acca6f199d4a94b933ba1aa713a7debde8ac57b928f596ae66a66\nresult = valid\nshared = 30b6ff6e8051dae51e4fe34b2d9a0b1879153e007eb0b5bdf1791a9c\n\n# tcId = 26\n# edge cases for ephemeral key\nprivate = 2bc15cf3981f4e15bbad387b506df647989e5478160be862f8c26969\npublic = 304e301006072a8648ce3d020106052b81040021033a00040a15c112ff784b1445e889f955be7e3ffdf451a2c0e76ab5cb32cf413d4df973c563c6decdd435e4f864557e4c273096d9941ca4260a266e\nresult = valid\nshared = 77ec668a00f72d85aa527624abb16c039fe490d17dd6c455a1ed7fd8\n\n# tcId = 27\n# edge cases for ephemeral key\nprivate = 2bc15cf3981f4e15bbad387b506df647989e5478160be862f8c26969\npublic = 304e301006072a8648ce3d020106052b81040021033a000462989eaaa26a16f07330c3c51e0a4631fd016bfcede26552816aee39389ee9436d616cab90032931aa7fbbfcfc13309f61e2423cc8dab93c\nresult = valid\nshared = a3f432f6aba9a92f49a5ea64ffe7059a9d9b487a0b5223ddc988208b\n\n# tcId = 28\n# edge cases for ephemeral key\nprivate = 2bc15cf3981f4e15bbad387b506df647989e5478160be862f8c26969\npublic = 304e301006072a8648ce3d020106052b81040021033a0004661ac958c0febbc718ccf39cefc6b66c4231fbb9a76f35228a3bf5c3103b8040e3cb41966fc64a68cacb0c14053f87d27e8ed7bf2d7fe51b\nresult = valid\nshared = 1530fd9caf03737af34a4ba716b558cbecbc35d18402535a0a142313\n\n# tcId = 29\n# edge cases for ephemeral key\nprivate = 2bc15cf3981f4e15bbad387b506df647989e5478160be862f8c26969\npublic = 304e301006072a8648ce3d020106052b81040021033a00046d7e41821abe1094d430237923d2a50de31768ab51b12dce8a09e34c276cf273d75d367820dd556182def0957af0a314f48fed227c298dc0\nresult = valid\nshared = cfc39ccacb94ad0e0552b2e47112f60fbbe7ae0dc32230b9273dd210\n\n# tcId = 30\n# edge cases for ephemeral key\nprivate = 2bc15cf3981f4e15bbad387b506df647989e5478160be862f8c26969\npublic = 304e301006072a8648ce3d020106052b81040021033a00047fffffffffffffffffffffffffffffffffffffffffffffffffffffff7d8dbca36c56bcaae92e3475f799294f30768038e816a7d5f7f07d77\nresult = valid\nshared = 73bd63bd384a0faafb75cfed3e95d3892cbacf0db10f282c3b644771\n\n# tcId = 31\n# edge cases for ephemeral key\nprivate = 2bc15cf3981f4e15bbad387b506df647989e5478160be862f8c26969\npublic = 304e301006072a8648ce3d020106052b81040021033a0004fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc000800174f1ff5ea7fbc72b92f61e06556c26bab84c0b082dd6400ca1c1eb6d\nresult = valid\nshared = 85b079c62e1f5b0fd6841dfa16026e15b641f65e13a14042567166bb\n\n# tcId = 32\n# edge cases for ephemeral key\nprivate = 2bc15cf3981f4e15bbad387b506df647989e5478160be862f8c26969\npublic = 304e301006072a8648ce3d020106052b81040021033a0004ffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0126fdd5fccd0b5aa7fd5bb5b1308584b30556248cec80208a2fe962\nresult = valid\nshared = 8a834ff40e3fc9f9d412a481e18537ea799536c5520c6c7baaf12166\n\n# tcId = 33\n# edge cases for ephemeral key\nprivate = 2bc15cf3981f4e15bbad387b506df647989e5478160be862f8c26969\npublic = 304e301006072a8648ce3d020106052b81040021033a0004fffff0000007fffffe000000ffffffc000001ffffff8000003ffffff20cfa23077acc9fbcb71339c65880cd0b966b8a9497e65abed17f0b5\nresult = valid\nshared = a0887269766e6efcbc81d2b38f2d4638663f12377468a23421044188\n\n# tcId = 34\n# edge cases for ephemeral key\nprivate = 2bc15cf3981f4e15bbad387b506df647989e5478160be862f8c26969\npublic = 304e301006072a8648ce3d020106052b81040021033a0004ffffffff00000000ffffffff00000000ffffffff00000000ffffffff1c05ac2d4f10b69877c3243d51f887277b7bf735c326ab2f0d70da8c\nresult = valid\nshared = c65d1911bc076a74588d8793ce7a0dcabf5793460cd2ebb02754a1be\n\n# tcId = 35\n# edge case private key\nprivate = 3\npublic = 304e301006072a8648ce3d020106052b81040021033a0004478e73465bb1183583f4064e67e8b4343af4a05d29dfc04eb60ac2302e5b9a3a1b32e4208d4c284ff26822e09c3a9a4683443e4a35175504\nresult = valid\nshared = e71f2157bfe37697ea5193d4732dcc6e5412fa9d38387eacd391c1c6\n\n# tcId = 36\n# edge case private key\nprivate = 0ffffffffffffffffffffffffffffffffffffffffffffffff\npublic = 304e301006072a8648ce3d020106052b81040021033a0004478e73465bb1183583f4064e67e8b4343af4a05d29dfc04eb60ac2302e5b9a3a1b32e4208d4c284ff26822e09c3a9a4683443e4a35175504\nresult = valid\nshared = fa2664717c7fa0161ec2c669b2c0986cdc20456a6e5406302bb53c77\n\n# tcId = 37\n# edge case private key\nprivate = 1000000000000000000000000000000000000000000000000000000\npublic = 304e301006072a8648ce3d020106052b81040021033a0004478e73465bb1183583f4064e67e8b4343af4a05d29dfc04eb60ac2302e5b9a3a1b32e4208d4c284ff26822e09c3a9a4683443e4a35175504\nresult = valid\nshared = af6e5ad34497bae0745f53ad78ce8b285d79f400d5c6e6a071f8e6bd\n\n# tcId = 38\n# edge case private key\nprivate = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffff\npublic = 304e301006072a8648ce3d020106052b81040021033a0004478e73465bb1183583f4064e67e8b4343af4a05d29dfc04eb60ac2302e5b9a3a1b32e4208d4c284ff26822e09c3a9a4683443e4a35175504\nresult = valid\nshared = 12fd302ff8c13c55a9c111f8bb6b0a13ecf88299c0ae3032ce2bcaff\n\n# tcId = 39\n# edge case private key\nprivate = 080000000000000000000000000000000000000000000000000000000\npublic = 304e301006072a8648ce3d020106052b81040021033a0004478e73465bb1183583f4064e67e8b4343af4a05d29dfc04eb60ac2302e5b9a3a1b32e4208d4c284ff26822e09c3a9a4683443e4a35175504\nresult = valid\nshared = 73f1a395b842f1a6752ae417e2c3dc90cafc4476d1d861b7e68ad030\n\n# tcId = 40\n# edge case private key\nprivate = 0ffffffffffffffffffffffffffff16a2e0b8f03d13dd29455c5c2a3d\npublic = 304e301006072a8648ce3d020106052b81040021033a0004478e73465bb1183583f4064e67e8b4343af4a05d29dfc04eb60ac2302e5b9a3a1b32e4208d4c284ff26822e09c3a9a4683443e4a35175504\nresult = valid\nshared = b329c20ddb7c78ee4e622bb23a984c0d273ba34b6269f3d9e8f89f8e\n\n# tcId = 41\n# edge case private key\nprivate = 0ffffffffffffffffffffffffffff16a2e0b8f03e13cd29455c5c2a3d\npublic = 304e301006072a8648ce3d020106052b81040021033a0004478e73465bb1183583f4064e67e8b4343af4a05d29dfc04eb60ac2302e5b9a3a1b32e4208d4c284ff26822e09c3a9a4683443e4a35175504\nresult = valid\nshared = 6f48345209b290ffc5abbe754a201479e5d667a209468080d06197b4\n\n# tcId = 42\n# edge case private key\nprivate = 0ffffffffffffffffffffffffffff16a2e0b8f03e13d529455c5c2a3d\npublic = 304e301006072a8648ce3d020106052b81040021033a0004478e73465bb1183583f4064e67e8b4343af4a05d29dfc04eb60ac2302e5b9a3a1b32e4208d4c284ff26822e09c3a9a4683443e4a35175504\nresult = valid\nshared = 9f6e30c1c9dad42a153aacd4b49a8e5c721d085cd07b5d5aec244fc1\n\n# tcId = 43\n# edge case private key\nprivate = 0ffffffffffffffffffffffffffff16a2e0b8f03e13dd29445c5c2a3d\npublic = 304e301006072a8648ce3d020106052b81040021033a0004478e73465bb1183583f4064e67e8b4343af4a05d29dfc04eb60ac2302e5b9a3a1b32e4208d4c284ff26822e09c3a9a4683443e4a35175504\nresult = valid\nshared = 8cadfb19a80949e61bd5b829ad0e76d18a5bb2eeb9ed7fe2b901cecd\n\n# tcId = 44\n# edge case private key\nprivate = 0ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c29b7\npublic = 304e301006072a8648ce3d020106052b81040021033a0004478e73465bb1183583f4064e67e8b4343af4a05d29dfc04eb60ac2302e5b9a3a1b32e4208d4c284ff26822e09c3a9a4683443e4a35175504\nresult = valid\nshared = 475fd96e0eb8cb8f100a5d7fe043a7a6851d1d611da2643a3c6ae708\n# The private key has a special value. Implementations using addition\n# subtraction chains for the point multiplication may get the point at infinity\n# as an intermediate result. See CVE_2017_10176\n\n# tcId = 45\n# edge case private key\nprivate = 0ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a37\npublic = 304e301006072a8648ce3d020106052b8104002",
     "1033a0004478e73465bb1183583f4064e67e8b4343af4a05d29dfc04eb60ac2302e5b9a3a1b32e4208d4c284ff26822e09c3a9a4683443e4a35175504\nresult = valid\nshared = 41ef931d669d1f57d8bb95a01a92321da74be8c6cbc3bbe0b2e73ebd\n# The private key has a special value. Implementations using addition\n# subtraction chains for the point multiplication may get the point at infinity\n# as an intermediate result. See CVE_2017_10176\n\n# tcId = 46\n# edge case private key\nprivate = 0ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3a\npublic = 304e301006072a8648ce3d020106052b81040021033a0004478e73465bb1183583f4064e67e8b4343af4a05d29dfc04eb60ac2302e5b9a3a1b32e4208d4c284ff26822e09c3a9a4683443e4a35175504\nresult = valid\nshared = e71f2157bfe37697ea5193d4732dcc6e5412fa9d38387eacd391c1c6\n\n# tcId = 47\n# edge case private key\nprivate = 0ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3b\npublic = 304e301006072a8648ce3d020106052b81040021033a0004478e73465bb1183583f4064e67e8b4343af4a05d29dfc04eb60ac2302e5b9a3a1b32e4208d4c284ff26822e09c3a9a4683443e4a35175504\nresult = valid\nshared = 11ff15126411299cbd49e2b7542e69e91ef132e2551a16ecfebb23a3\n# The private key has a special value. Implementations using addition\n# subtraction chains for the point multiplication may get the point at infinity\n# as an intermediate result. See CVE_2017_10176\n\n# tcId = 48\n# point is not on curve\nprivate = 0c6cafb74e2a5b5ed4b991cbbfbc28c18f6df208b6d05e7a2e6668014\npublic = 304e301006072a8648ce3d020106052b81040021033a00040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\nresult = invalid\nshared = \n\n# tcId = 49\n# point is not on curve\nprivate = 0c6cafb74e2a5b5ed4b991cbbfbc28c18f6df208b6d05e7a2e6668014\npublic = 304e301006072a8648ce3d020106052b81040021033a00040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001\nresult = invalid\nshared = \n\n# tcId = 50\n# point is not on curve\nprivate = 0c6cafb74e2a5b5ed4b991cbbfbc28c18f6df208b6d05e7a2e6668014\npublic = 304e301006072a8648ce3d020106052b81040021033a000400000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffff000000000000000000000000\nresult = invalid\nshared = \n\n# tcId = 51\n# point is not on curve\nprivate = 0c6cafb74e2a5b5ed4b991cbbfbc28c18f6df208b6d05e7a2e6668014\npublic = 304e301006072a8648ce3d020106052b81040021033a000400000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffff000000000000000000000001\nresult = invalid\nshared = \n\n# tcId = 52\n# point is not on curve\nprivate = 0c6cafb74e2a5b5ed4b991cbbfbc28c18f6df208b6d05e7a2e6668014\npublic = 304e301006072a8648ce3d020106052b81040021033a00040000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000\nresult = invalid\nshared = \n\n# tcId = 53\n# point is not on curve\nprivate = 0c6cafb74e2a5b5ed4b991cbbfbc28c18f6df208b6d05e7a2e6668014\npublic = 304e301006072a8648ce3d020106052b81040021033a00040000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000001\nresult = invalid\nshared = \n\n# tcId = 54\n# point is not on curve\nprivate = 0c6cafb74e2a5b5ed4b991cbbfbc28c18f6df208b6d05e7a2e6668014\npublic = 304e301006072a8648ce3d020106052b81040021033a000400000000000000000000000000000000000000000000000000000001ffffffffffffffffffffffffffffffff000000000000000000000000\nresult = invalid\nshared = \n\n# tcId = 55\n# point is not on curve\nprivate = 0c6cafb74e2a5b5ed4b991cbbfbc28c18f6df208b6d05e7a2e6668014\npublic = 304e301006072a8648ce3d020106052b81040021033a000400000000000000000000000000000000000000000000000000000001ffffffffffffffffffffffffffffffff000000000000000000000001\nresult = invalid\nshared = \n\n# tcId = 56\n# point is not on curve\nprivate = 0c6cafb74e2a5b5ed4b991cbbfbc28c18f6df208b6d05e7a2e6668014\npublic = 304e301006072a8648ce3d020106052b81040021033a0004ffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000\nresult = invalid\nshared = \n\n# tcId = 57\n# point is not on curve\nprivate = 0c6cafb74e2a5b5ed4b991cbbfbc28c18f6df208b6d05e7a2e6668014\npublic = 304e301006072a8648ce3d020106052b81040021033a0004ffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000000000000000000000000001\nresult = invalid\nshared = \n\n# tcId = 58\n# point is not on curve\nprivate = 0c6cafb74e2a5b5ed4b991cbbfbc28c18f6df208b6d05e7a2e6668014\npublic = 304e301006072a8648ce3d020106052b81040021033a0004ffffffffffffffffffffffffffffffff000000000000000000000000ffffffffffffffffffffffffffffffff000000000000000000000000\nresult = invalid\nshared = \n\n# tcId = 59\n# point is not on curve\nprivate = 0c6cafb74e2a5b5ed4b991cbbfbc28c18f6df208b6d05e7a2e6668014\npublic = 304e301006072a8648ce3d020106052b81040021033a0004ffffffffffffffffffffffffffffffff000000000000000000000000ffffffffffffffffffffffffffffffff000000000000000000000001\nresult = invalid\nshared = \n\n# tcId = 60\n# point is not on curve\nprivate = 0c6cafb74e2a5b5ed4b991cbbfbc28c18f6df208b6d05e7a2e6668014\npublic = 304e301006072a8648ce3d020106052b81040021033a0004ffffffffffffffffffffffffffffffff00000000000000000000000100000000000000000000000000000000000000000000000000000000\nresult = invalid\nshared = \n\n# tcId = 61\n# point is not on curve\nprivate = 0c6cafb74e2a5b5ed4b991cbbfbc28c18f6df208b6d05e7a2e6668014\npublic = 304e301006072a8648ce3d020106052b81040021033a0004ffffffffffffffffffffffffffffffff00000000000000000000000100000000000000000000000000000000000000000000000000000001\nresult = invalid\nshared = \n\n# tcId = 62\n# point is not on curve\nprivate = 0c6cafb74e2a5b5ed4b991cbbfbc28c18f6df208b6d05e7a2e6668014\npublic = 304e301006072a8648ce3d020106052b81040021033a0004ffffffffffffffffffffffffffffffff000000000000000000000001ffffffffffffffffffffffffffffffff000000000000000000000000\nresult = invalid\nshared = \n\n# tcId = 63\n# point is not on curve\nprivate = 0c6cafb74e2a5b5ed4b991cbbfbc28c18f6df208b6d05e7a2e6668014\npublic = 304e301006072a8648ce3d020106052b81040021033a0004ffffffffffffffffffffffffffffffff000000000000000000000001ffffffffffffffffffffffffffffffff000000000000000000000001\nresult = invalid\nshared = \n\n# tcId = 64\nprivate = 0c6cafb74e2a5b5ed4b991cbbfbc28c18f6df208b6d05e7a2e6668014\npublic = 3015301006072a8648ce3d020106052b81040021030100\nresult = invalid\nshared = \n\n# tcId = 65\n# public point not on curve\nprivate = 0d07629eb653a169ae3231ea1030faaf3e7f8ffe388030ee315d0a1d2\npublic = 304e301006072a8648ce3d020106052b81040021033a0004a10fb7bf22d299fc5bc43bd2d0e8da28af28ace8430bee28f9e5b57554275c0615d8d9a3011d7bc4c1c4cf4a834c8dc46f25b98854401a5d\nresult = invalid\nshared = \n# The public key has been modified and is invalid. An implementation should\n# always check whether the public key is valid and on the same curve as the\n# private key. The test vector includes the shared secret computed with the\n# original public key if the public point is on the curve of the private key.\n# Generating a shared secret other than the one with the original key likely\n# indicates that the bug is exploitable.\n\n# tcId = 66\n# public point = (0,0)\nprivate = 0d07629eb653a169ae3231ea1030faaf3e7f8ffe388030ee315d0a1d2\npublic = 304e301006072a8648ce3d020106052b81040021033a00040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\nresult = invalid\nshared = \n# The public key has been modified and is invalid. An implementation should\n# always check whether the public key is valid and on the same curve as the\n# private key. The test vector includes the shared secret computed with the\n# original public key if the public point is on the curve of the private key.\n# Generating a shared secret other than the one with the original key likely\n# indicates that the bug is exploitable.\n\n# tcId = 67\n# order = -26959946667150639794667015087019625940457807714424391721682722368061\nprivate = 0d07629eb653a169ae3231ea1030faaf3e7f8ffe388030ee315d0a1d2\npublic = 308201133081d406072a8648ce3d02013081c8020101302806072a8648ce3d0101021d00ffffffffffffffffffffffffffffffff000000000000000000000001303c041cfffffffffffffffffffffffffffffffefffffffffffffffffffffffe041cb4050a850c04b3abf54132565044b0b7d7bfd8ba270b39432355ffb4043904b7",
@@ -2948,9 +2929,9 @@
     "1d21cb3da62\nresult = acceptable\nshared = 85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63\n# The public key in this test uses an invalid ASN encoding. Some cases where the\n# ASN parser is not strictly checking the ASN format are benign as long as the\n# ECDH computation still returns the correct shared value.\n\n# tcId = 286\n# oid with invalid node\nprivate = 0a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572\npublic = 304f301106072a8648ce3d020106062b8081040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62\nresult = acceptable\nshared = 85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63\n# The public key in this test uses an invalid ASN encoding. Some cases where the\n# ASN parser is not strictly checking the ASN format are benign as long as the\n# ECDH computation still returns the correct shared value.\n\n# tcId = 287\n# lonely bit string tag\nprivate = 0a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572\npublic = 3013301006072a8648ce3d020106052b8104002103\nresult = acceptable\nshared = 85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63\n# The public key in this test uses an invalid ASN encoding. Some cases where the\n# ASN parser is not strictly checking the ASN format are benign as long as the\n# ECDH computation still returns the correct shared value.\n\n# tcId = 288\n# appending 0's to bit string\nprivate = 0a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572\npublic = 3050301006072a8648ce3d020106052b81040021033c000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da620000\nresult = acceptable\nshared = 85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63\n# The public key in this test uses an invalid ASN encoding. Some cases where the\n# ASN parser is not strictly checking the ASN format are benign as long as the\n# ECDH computation still returns the correct shared value.\n\n# tcId = 289\n# prepending 0's to bit string\nprivate = 0a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572\npublic = 3050301006072a8648ce3d020106052b81040021033c0000000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62\nresult = acceptable\nshared = 85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63\n# The public key in this test uses an invalid ASN encoding. Some cases where the\n# ASN parser is not strictly checking the ASN format are benign as long as the\n# ECDH computation still returns the correct shared value.\n\n# tcId = 290\n# appending null value to bit string\nprivate = 0a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572\npublic = 3050301006072a8648ce3d020106052b81040021033c000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da620500\nresult = acceptable\nshared = 85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63\n# The public key in this test uses an invalid ASN encoding. Some cases where the\n# ASN parser is not strictly checking the ASN format are benign as long as the\n# ECDH computation still returns the correct shared value.\n\n# tcId = 291\n# truncated length of bit string\nprivate = 0a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572\npublic = 3014301006072a8648ce3d020106052b810400210381\nresult = acceptable\nshared = 85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63\n# The public key in this test uses an invalid ASN encoding. Some cases where the\n# ASN parser is not strictly checking the ASN format are benign as long as the\n# ECDH computation still returns the correct shared value.\n\n# tcId = 292\n# Replacing bit string with NULL\nprivate = 0a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572\npublic = 3014301006072a8648ce3d020106052b810400210500\nresult = acceptable\nshared = 85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63\n# The public key in this test uses an invalid ASN encoding. Some cases where the\n# ASN parser is not strictly checking the ASN format are benign as long as the\n# ECDH computation still returns the correct shared value.\n\n# tcId = 293\n# changing tag value of bit string\nprivate = 0a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572\npublic = 304e301006072a8648ce3d020106052b81040021013a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62\nresult = acceptable\nshared = 85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63\n# The public key in this test uses an invalid ASN encoding. Some cases where the\n# ASN parser is not strictly checking the ASN format are benign as long as the\n# ECDH computation still returns the correct shared value.\n\n# tcId = 294\n# changing tag value of bit string\nprivate = 0a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572\npublic = 304e301006072a8648ce3d020106052b81040021023a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62\nresult = acceptable\nshared = 85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63\n# The public key in this test uses an invalid ASN encoding. Some cases where the\n# ASN parser is not strictly checking the ASN format are benign as long as the\n# ECDH computation still returns the correct shared value.\n\n# tcId = 295\n# changing tag value of bit string\nprivate = 0a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572\npublic = 304e301006072a8648ce3d020106052b81040021043a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62\nresult = acceptable\nshared = 85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63\n# The public key in this test uses an invalid ASN encoding. Some cases where the\n# ASN parser is not strictly checking the ASN format are benign as long as the\n# ECDH computation still returns the correct shared value.\n\n# tcId = 296\n# changing tag value of bit string\nprivate = 0a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572\npublic = 304e301006072a8648ce3d020106052b81040021053a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62\nresult = acceptable\nshared = 85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63\n# The public key in this test uses an invalid ASN encoding. Some cases where the\n# ASN parser is not strictly checking the ASN format are benign as long as the\n# ECDH computation still returns the correct shared value.\n\n# tcId = 297\n# changing tag value of bit string\nprivate = 0a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572\npublic = 304e301006072a8648ce3d020106052b81040021ff3a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62\nresult = acceptable\nshared = 85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63\n# The public key in this test uses an invalid ASN encoding. Some cases where the\n# ASN parser is not strictly checking the ASN format are benign as long as the\n# ECDH computation still returns the correct shared value.\n\n# tcId = 298\n# dropping value of bit string\nprivate = 0a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572\npublic = 3014301006072a8648ce3d020106052b810400210300\nresult = acceptable\nshared = 85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63\n# The public key in this test uses an invalid ASN encoding. Some cases where the\n# ASN parser is not strictly checking the ASN format are benign as long as the\n# ECDH computation still returns the correct shared value.\n\n# tcId = 299\n# modify first byte of bit string\nprivate = 0a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572\npublic = 304e301006072a8648ce3d020106052b81040021033a020486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62\nresult = acceptable\nshared = 85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63\n# The public key in this test uses an invalid ASN encoding. Some cases where the\n# ASN parser is not strictly checking the ASN format are benign as long as the\n# ECDH computation still returns the correct shared value.\n\n# tcId = 300\n# modify last byte of bit string\nprivate = 0a1b9444f59642d428e2",
     "f299055004165a34c3b8796c5057ae8a1a572\npublic = 304e301006072a8648ce3d020106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3dae2\nresult = acceptable\nshared = 85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63\n# The public key in this test uses an invalid ASN encoding. Some cases where the\n# ASN parser is not strictly checking the ASN format are benign as long as the\n# ECDH computation still returns the correct shared value.\n\n# tcId = 301\n# truncate bit string\nprivate = 0a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572\npublic = 304d301006072a8648ce3d020106052b810400210339000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da\nresult = acceptable\nshared = 85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63\n# The public key in this test uses an invalid ASN encoding. Some cases where the\n# ASN parser is not strictly checking the ASN format are benign as long as the\n# ECDH computation still returns the correct shared value.\n\n# tcId = 302\n# truncate bit string\nprivate = 0a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572\npublic = 304d301006072a8648ce3d020106052b8104002103390486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62\nresult = acceptable\nshared = 85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63\n# The public key in this test uses an invalid ASN encoding. Some cases where the\n# ASN parser is not strictly checking the ASN format are benign as long as the\n# ECDH computation still returns the correct shared value.\n\n# tcId = 303\n# declaring bits as unused in a bit-string\nprivate = 0a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572\npublic = 304e301006072a8648ce3d020106052b81040021033a010486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62\nresult = acceptable\nshared = 85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63\n# The public key in this test uses an invalid ASN encoding. Some cases where the\n# ASN parser is not strictly checking the ASN format are benign as long as the\n# ECDH computation still returns the correct shared value.\n\n# tcId = 304\n# unused bits in a bit-string\nprivate = 0a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572\npublic = 3052301006072a8648ce3d020106052b81040021033e200486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da6201020304\nresult = acceptable\nshared = 85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63\n# The public key in this test uses an invalid ASN encoding. Some cases where the\n# ASN parser is not strictly checking the ASN format are benign as long as the\n# ECDH computation still returns the correct shared value.\n\n# tcId = 305\n# unused bits in empty bit-string\nprivate = 0a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572\npublic = 3015301006072a8648ce3d020106052b81040021030103\nresult = acceptable\nshared = 85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63\n# The public key in this test uses an invalid ASN encoding. Some cases where the\n# ASN parser is not strictly checking the ASN format are benign as long as the\n# ECDH computation still returns the correct shared value.\n\n# tcId = 306\n# 128 unused bits\nprivate = 0a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572\npublic = 304e301006072a8648ce3d020106052b81040021033a800486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62\nresult = acceptable\nshared = 85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63\n# The public key in this test uses an invalid ASN encoding. Some cases where the\n# ASN parser is not strictly checking the ASN format are benign as long as the\n# ECDH computation still returns the correct shared value.\n\n",
 };
-static const size_t kLen63 = 201337;
+static const size_t kLen62 = 201337;
 
-static const char *kData63[] = {
+static const char *kData62[] = {
     "# Imported from Wycheproof's ecdh_secp256r1_test.json.\n# This file is generated by convert_wycheproof.go. Do not edit by hand.\n#\n# Algorithm: ECDH\n# Generator version: 0.4.12\n\n[curve = secp256r1]\n[encoding = asn]\n\n# tcId = 1\n# normal case\nprivate = 612465c89a023ab17855b0a6bcebfd3febb53aef84138647b5352e02c10c346\npublic = 3059301306072a8648ce3d020106082a8648ce3d0301070342000462d5bd3372af75fe85a040715d0f502428e07046868b0bfdfa61d731afe44f26ac333a93a9e70a81cd5a95b5bf8d13990eb741c8c38872b4a07d275a014e30cf\nresult = valid\nshared = 53020d908b0219328b658b525f26780e3ae12bcd952bb25a93bc0895e1714285\n\n# tcId = 2\n# compressed public key\nprivate = 612465c89a023ab17855b0a6bcebfd3febb53aef84138647b5352e02c10c346\npublic = 3039301306072a8648ce3d020106082a8648ce3d0301070322000362d5bd3372af75fe85a040715d0f502428e07046868b0bfdfa61d731afe44f26\nresult = acceptable\nshared = 53020d908b0219328b658b525f26780e3ae12bcd952bb25a93bc0895e1714285\n# The point in the public key is compressed. Not every library supports points\n# in compressed format.\n\n# tcId = 3\n# edge case for shared secret\nprivate = 0a0d622a47e48f6bc1038ace438c6f528aa00ad2bd1da5f13ee46bf5f633d71a\npublic = 3059301306072a8648ce3d020106082a8648ce3d0301070342000458fd4168a87795603e2b04390285bdca6e57de6027fe211dd9d25e2212d29e62080d36bd224d7405509295eed02a17150e03b314f96da37445b0d1d29377d12c\nresult = valid\nshared = 0000000000000000000000000000000000000000000000000000000000000000\n\n# tcId = 4\n# edge case for shared secret\nprivate = 0a0d622a47e48f6bc1038ace438c6f528aa00ad2bd1da5f13ee46bf5f633d71a\npublic = 3059301306072a8648ce3d020106082a8648ce3d030107034200040f6d20c04261ecc3e92846acad48dc8ec5ee35ae0883f0d2ea71216906ee1c47c042689a996dd12830ae459382e94aac56b717af2e2080215f9e41949b1f52be\nresult = valid\nshared = 00000000000000000000000000000000ffffffffffffffffffffffffffffffff\n\n# tcId = 5\n# edge case for shared secret\nprivate = 0a0d622a47e48f6bc1038ace438c6f528aa00ad2bd1da5f13ee46bf5f633d71a\npublic = 3059301306072a8648ce3d020106082a8648ce3d0301070342000400c7defeb1a16236738e9a1123ba621bc8e9a3f2485b3f8ffde7f9ce98f5a8a1cb338c3912b1792f60c2b06ec5231e2d84b0e596e9b76d419ce105ece3791dbc\nresult = valid\nshared = 0000000000000000ffffffffffffffff00000000000000010000000000000001\n\n# tcId = 6\n# edge case for shared secret\nprivate = 0a0d622a47e48f6bc1038ace438c6f528aa00ad2bd1da5f13ee46bf5f633d71a\npublic = 3059301306072a8648ce3d020106082a8648ce3d03010703420004e9b98fb2c0ac045f8c76125ffd99eb8a5157be1d7db3e85d655ec1d8210288cf218df24fd2c2746be59df41262ef3a97d986744b2836748a7486230a319ffec0\nresult = valid\nshared = 00000000ffffffff00000000ffffffff00000000ffffffff0000000100000000\n\n# tcId = 7\n# edge case for shared secret\nprivate = 0a0d622a47e48f6bc1038ace438c6f528aa00ad2bd1da5f13ee46bf5f633d71a\npublic = 3059301306072a8648ce3d020106082a8648ce3d03010703420004e9484e58f3331b66ffed6d90cb1c78065fa28cfba5c7dd4352013d3252ee4277bd7503b045a38b4b247b32c59593580f39e6abfa376c3dca20cf7f9cfb659e13\nresult = valid\nshared = 000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff\n\n# tcId = 8\n# edge case for shared secret\nprivate = 0a0d622a47e48f6bc1038ace438c6f528aa00ad2bd1da5f13ee46bf5f633d71a\npublic = 3059301306072a8648ce3d020106082a8648ce3d03010703420004767d7fbb84aa6a4db1079372644e42ecb2fec200c178822392cb8b950ffdd0c91c86853cafd09b52ba2f287f0ebaa26415a3cfabaf92c6a617a19988563d9dea\nresult = valid\nshared = 0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff00010001\n\n# tcId = 9\n# edge case for shared secret\nprivate = 0a0d622a47e48f6bc1038ace438c6f528aa00ad2bd1da5f13ee46bf5f633d71a\npublic = 3059301306072a8648ce3d020106082a8648ce3d03010703420004c74d546f2fcc6dd392f85e5be167e358de908756b0c0bb01cb69d864ca083e1c93f959eece6e10ee11bd3934207d65ae28af68b092585a1509260eceb39b92ef\nresult = valid\nshared = 085ec5a4af40176b63189069aeffcb229c96d3e046e0283ed2f9dac21b15ad3c\n\n# tcId = 10\n# edge case for shared secret\nprivate = 0a0d622a47e48f6bc1038ace438c6f528aa00ad2bd1da5f13ee46bf5f633d71a\npublic = 3059301306072a8648ce3d020106082a8648ce3d0301070342000434fc9f1e7a094cd29598d1841fa9613dbe82313d633a51d63fb6eff074cc9b9a4ecfd9f258c5c4d4210b49751213a24c596982bd1d54e0445443f21ef15492a5\nresult = valid\nshared = 190c25f88ad9ae3a098e6cffe6fd0b1bea42114eb0cedd5868a45c5fe277dff3\n\n# tcId = 11\n# edge case for shared secret\nprivate = 0a0d622a47e48f6bc1038ace438c6f528aa00ad2bd1da5f13ee46bf5f633d71a\npublic = 3059301306072a8648ce3d020106082a8648ce3d03010703420004d5c96efd1907fd48de2ad715acf82eae5c6690fe3efe16a78d61c68d3bfd10df03eac816b9e7b776192a3f5075887c0e225617505833ca997cda32fd0f673c5e\nresult = valid\nshared = 507442007322aa895340cba4abc2d730bfd0b16c2c79a46815f8780d2c55a2dd\n\n# tcId = 12\n# edge case for shared secret\nprivate = 0a0d622a47e48f6bc1038ace438c6f528aa00ad2bd1da5f13ee46bf5f633d71a\npublic = 3059301306072a8648ce3d020106082a8648ce3d03010703420004f475f503a770df72c45aedfe42c008f59aa57e72b232f26600bdd0353957cb20bdb8f6405b4918050a3549f44c07a8eba820cdce4ece699888c638df66f54f7c\nresult = valid\nshared = 5f177bfe19baaaee597e68b6a87a519e805e9d28a70cb72fd40f0fe5a754ba45\n\n# tcId = 13\n# edge case for shared secret\nprivate = 0a0d622a47e48f6bc1038ace438c6f528aa00ad2bd1da5f13ee46bf5f633d71a\npublic = 3059301306072a8648ce3d020106082a8648ce3d03010703420004f3cb6754b7e2a86d064dfb9f903185aaa4c92b481c2c1a1ff276303bbc4183e49c318599b0984c3563df339311fe143a7d921ee75b755a52c6f804f897b809f7\nresult = valid\nshared = 7fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff\n\n# tcId = 14\n# edge case for shared secret\nprivate = 0a0d622a47e48f6bc1038ace438c6f528aa00ad2bd1da5f13ee46bf5f633d71a\npublic = 3059301306072a8648ce3d020106082a8648ce3d03010703420004cce13fbdc96a946dfb8c6d9ed762dbd1731630455689f57a437fee124dd54cecaef78026c653030cf2f314a67064236b0a354defebc5e90c94124e9bf5c4fc24\nresult = valid\nshared = 8000000000000000000000000000000000000000000000000000000000000004\n\n# tcId = 15\n# edge case for shared secret\nprivate = 0a0d622a47e48f6bc1038ace438c6f528aa00ad2bd1da5f13ee46bf5f633d71a\npublic = 3059301306072a8648ce3d020106082a8648ce3d030107034200047633dfd0ad06765097bc11bd5022b200df31f28c4ff0625421221ac7eeb6e6f4cb9c67693609ddd6f92343a5a1c635408240f4f8e27120c12554c7ff8c76e2fe\nresult = valid\nshared = 8000003ffffff0000007fffffe000000ffffffc000001ffffff8000004000000\n\n# tcId = 16\n# edge case for shared secret\nprivate = 0a0d622a47e48f6bc1038ace438c6f528aa00ad2bd1da5f13ee46bf5f633d71a\npublic = 3059301306072a8648ce3d020106082a8648ce3d03010703420004a386ace573f87558a68ead2a20088e3fe928bdae9e109446f93a078c15741f0421261e6db2bf12106e4c6bf85b9581b4c0302a526222f90abc5a549206b11011\nresult = valid\nshared = ff00000001fffffffc00000007fffffff00000001fffffffc00000007fffffff\n\n# tcId = 17\n# edge case for shared secret\nprivate = 0a0d622a47e48f6bc1038ace438c6f528aa00ad2bd1da5f13ee46bf5f633d71a\npublic = 3059301306072a8648ce3d020106082a8648ce3d030107034200048e7b50f7d8c44d5d3496c43141a502f4a43f153d03ad43eda8e39597f1d477b8647f3da67969b7f989ff4addc393515af40c82085ce1f2ee195412c6f583774f\nresult = valid\nshared = ffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff\n\n# tcId = 18\n# edge case for shared secret\nprivate = 0a0d622a47e48f6bc1038ace438c6f528aa00ad2bd1da5f13ee46bf5f633d71a\npublic = 3059301306072a8648ce3d020106082a8648ce3d03010703420004c827fb930fd51d926086191b502af83abb5f717debc8de29897a3934b2571ca05990c0597b0b7a2e42febd56b13235d1d408d76ed2c93b3facf514d902f6910a\nresult = valid\nshared = ffffffff00000000000000ffffffffffffff00000000000000ffffffffffffff\n\n# tcId = 19\n# y-coordinate of the public key is small\nprivate = 0a0d622a47e48f6bc1038ace438c6f528aa00ad2bd1da5f13ee46bf5f633d71a\npublic = 3059301306072a8648ce3d020106082a8648ce3d030107034200043cbc1b31b43f17dc200dd70c2944c04c6cb1b082820c234a300b05b7763844c74fde0a4ef93887469793270eb2ff148287da9265b0334f9e2609aac16e8ad503\nresult = valid\nshared = 7fffffffffffffffffffffffeecf2230ffffffffffffffffffffffffffffffff\n\n# tcId = 20\n# y-coordinate of the public key is small\nprivate = 0a0d622a47e48f6bc1038ace438c6f528aa00ad2bd1da5f13ee46bf5f633d71a\npublic = 3059301306072a8648ce3d020106082a8648ce3d030107034200042830d96489ae24b79cad425056e82746f9e3f419ab9aa21ca1fbb11c7325e7d318abe66f575ee8a2f1c4a80e35260ae82ad7d6f661d15f06967930a585097ef7\nresult = valid\nshared = 00000000000000000000000011112",
     "4f400000000000000000000000000000000\n\n# tcId = 21\n# y-coordinate of the public key is small\nprivate = 0a0d622a47e48f6bc1038ace438c6f528aa00ad2bd1da5f13ee46bf5f633d71a\npublic = 3059301306072a8648ce3d020106082a8648ce3d03010703420004450b6b6e2097178e9d2850109518d28eb3b6ded2922a5452003bc2e4a4ec775c894e90f0df1b0e6cadb03b9de24f6a22d1bd0a4a58cd645c273cae1c619bfd61\nresult = valid\nshared = 000000000000000000000001ea77d449ffffffffffffffffffffffffffffffff\n\n# tcId = 22\n# y-coordinate of the public key is large\nprivate = 0a0d622a47e48f6bc1038ace438c6f528aa00ad2bd1da5f13ee46bf5f633d71a\npublic = 3059301306072a8648ce3d020106082a8648ce3d030107034200043cbc1b31b43f17dc200dd70c2944c04c6cb1b082820c234a300b05b7763844c7b021f5b006c778ba686cd8f14d00eb7d78256d9b4fccb061d9f6553e91752afc\nresult = valid\nshared = 7fffffffffffffffffffffffeecf2230ffffffffffffffffffffffffffffffff\n\n# tcId = 23\n# y-coordinate of the public key is large\nprivate = 0a0d622a47e48f6bc1038ace438c6f528aa00ad2bd1da5f13ee46bf5f633d71a\npublic = 3059301306072a8648ce3d020106082a8648ce3d030107034200042830d96489ae24b79cad425056e82746f9e3f419ab9aa21ca1fbb11c7325e7d3e754198fa8a1175e0e3b57f1cad9f517d528290a9e2ea0f96986cf5a7af68108\nresult = valid\nshared = 000000000000000000000000111124f400000000000000000000000000000000\n\n# tcId = 24\n# y-coordinate of the public key is large\nprivate = 0a0d622a47e48f6bc1038ace438c6f528aa00ad2bd1da5f13ee46bf5f633d71a\npublic = 3059301306072a8648ce3d020106082a8648ce3d03010703420004450b6b6e2097178e9d2850109518d28eb3b6ded2922a5452003bc2e4a4ec775c76b16f0e20e4f194524fc4621db095dd2e42f5b6a7329ba3d8c351e39e64029e\nresult = valid\nshared = 000000000000000000000001ea77d449ffffffffffffffffffffffffffffffff\n\n# tcId = 25\n# y-coordinate of the public key has many trailing 1's\nprivate = 0a0d622a47e48f6bc1038ace438c6f528aa00ad2bd1da5f13ee46bf5f633d71a\npublic = 3059301306072a8648ce3d020106082a8648ce3d030107034200049a0f0e3dd31417bbd9e298bc068ab6d5c36733af26ed67676f410c804b8b2ca1b02c82f3a61a376db795626e9400557112273a36cddb08caaa43953965454730\nresult = valid\nshared = 7fffffffffffffffffffffffca089011ffffffffffffffffffffffffffffffff\n\n# tcId = 26\n# y-coordinate of the public key has many trailing 1's\nprivate = 0a0d622a47e48f6bc1038ace438c6f528aa00ad2bd1da5f13ee46bf5f633d71a\npublic = 3059301306072a8648ce3d020106082a8648ce3d030107034200048e5d22d5e53ec797c55ecd68a08a7c3361cd99ca7fad1a68ea802a6a4cb58a918ea7a07023ef67677024bd3841e187c64b30a30a3750eb2ee873fbe58fa1357b\nresult = valid\nshared = 0000000000000000000000001f6bd1e500000000000000000000000000000000\n\n# tcId = 27\n# y-coordinate of the public key has many trailing 1's\nprivate = 0a0d622a47e48f6bc1038ace438c6f528aa00ad2bd1da5f13ee46bf5f633d71a\npublic = 3059301306072a8648ce3d020106082a8648ce3d03010703420004293aa349b934ab2c839cf54b8a737df2304ef9b20fa494e31ad62b315dd6a53c118182b85ef466eb9a8e87f9661f7d017984c15ea82043f536d1ee6a6d95b509\nresult = valid\nshared = 000000000000000000000002099f55d5ffffffffffffffffffffffffffffffff\n\n# tcId = 28\n# y-coordinate of the public key has many trailing 0's\nprivate = 0a0d622a47e48f6bc1038ace438c6f528aa00ad2bd1da5f13ee46bf5f633d71a\npublic = 3059301306072a8648ce3d020106082a8648ce3d030107034200049a0f0e3dd31417bbd9e298bc068ab6d5c36733af26ed67676f410c804b8b2ca14fd37d0b59e5c893486a9d916bffaa8eedd8c5ca3224f73555bc6ac69abab8cf\nresult = valid\nshared = 7fffffffffffffffffffffffca089011ffffffffffffffffffffffffffffffff\n\n# tcId = 29\n# y-coordinate of the public key has many trailing 0's\nprivate = 0a0d622a47e48f6bc1038ace438c6f528aa00ad2bd1da5f13ee46bf5f633d71a\npublic = 3059301306072a8648ce3d020106082a8648ce3d030107034200048e5d22d5e53ec797c55ecd68a08a7c3361cd99ca7fad1a68ea802a6a4cb58a9171585f8edc1098998fdb42c7be1e7839b4cf5cf6c8af14d1178c041a705eca84\nresult = valid\nshared = 0000000000000000000000001f6bd1e500000000000000000000000000000000\n\n# tcId = 30\n# y-coordinate of the public key has many trailing 0's\nprivate = 0a0d622a47e48f6bc1038ace438c6f528aa00ad2bd1da5f13ee46bf5f633d71a\npublic = 3059301306072a8648ce3d020106082a8648ce3d03010703420004293aa349b934ab2c839cf54b8a737df2304ef9b20fa494e31ad62b315dd6a53cee7e7d46a10b99156571780699e082fe867b3ea257dfbc0ac92e1195926a4af6\nresult = valid\nshared = 000000000000000000000002099f55d5ffffffffffffffffffffffffffffffff\n\n# tcId = 31\n# edge cases for ephemeral key\nprivate = 55d55f11bb8da1ea318bca7266f0376662441ea87270aa2077f1b770c4854a48\npublic = 3059301306072a8648ce3d020106082a8648ce3d03010703420004000000000000000000000000000000000000000000000000000000000000000066485c780e2f83d72433bd5d84a06bb6541c2af31dae871728bf856a174f93f4\nresult = valid\nshared = cfe4077c8730b1c9384581d36bff5542bc417c9eff5c2afcb98cc8829b2ce848\n\n# tcId = 32\n# edge cases for ephemeral key\nprivate = 55d55f11bb8da1ea318bca7266f0376662441ea87270aa2077f1b770c4854a48\npublic = 3059301306072a8648ce3d020106082a8648ce3d0301070342000400000000000000000000000000000000ffffffffffffffffffffffffffffffff4f2b92b4c596a5a47f8b041d2dea6043021ac77b9a80b1343ac9d778f4f8f733\nresult = valid\nshared = 49ae50fe096a6cd26698b78356b2c8adf1f6a3490f14e364629f7a0639442509\n\n# tcId = 33\n# edge cases for ephemeral key\nprivate = 55d55f11bb8da1ea318bca7266f0376662441ea87270aa2077f1b770c4854a48\npublic = 3059301306072a8648ce3d020106082a8648ce3d030107034200040000000000000000ffffffffffffffff0000000000000001000000000000000138120be6ab31edfa34768c4387d2f84fb4b0be8a9a985864a1575f4436bb37b0\nresult = valid\nshared = 5a1334572b2a711ead8b4653eb310cd8d9fd114399379a8f6b872e3b8fdda2d9\n\n# tcId = 34\n# edge cases for ephemeral key\nprivate = 55d55f11bb8da1ea318bca7266f0376662441ea87270aa2077f1b770c4854a48\npublic = 3059301306072a8648ce3d020106082a8648ce3d0301070342000400000000ffffffff00000000ffffffff00000000ffffffff0000000100000000462c0466e41802238d6c925ecbefc747cfe505ea196af9a2d11b62850fce946e\nresult = valid\nshared = c73755133b6b9b4b2a00631cbc7940ecbe6ec08f20448071422e3362f2556888\n\n# tcId = 35\n# edge cases for ephemeral key\nprivate = 55d55f11bb8da1ea318bca7266f0376662441ea87270aa2077f1b770c4854a48\npublic = 3059301306072a8648ce3d020106082a8648ce3d03010703420004000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff1582fa32e2d4a89dfcfb3d0b149f667dba3329490f4d64ee2ad586c0c9e8c508\nresult = valid\nshared = 06fa1059935e47a9fd667e13f469614eb257cc9a7e3fc599bfb92780d59b146d\n\n# tcId = 36\n# edge cases for ephemeral key\nprivate = 55d55f11bb8da1ea318bca7266f0376662441ea87270aa2077f1b770c4854a48\npublic = 3059301306072a8648ce3d020106082a8648ce3d030107034200040000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff00010001684c8a9586ed6f9cbe447058a7da2108bab1e5e0a60d1f73e4e2e713f0a3dfe0\nresult = valid\nshared = f237df4c10bd3e357971bb2b16b293566b7e355bdc8141d6c92cabc682983c45\n\n# tcId = 37\n# edge cases for ephemeral key\nprivate = 55d55f11bb8da1ea318bca7266f0376662441ea87270aa2077f1b770c4854a48\npublic = 3059301306072a8648ce3d020106082a8648ce3d03010703420004085ec5a4af40176b63189069aeffcb229c96d3e046e0283ed2f9dac21b15ad3c7859f97cb6e203f46bf3438f61282325e94e681b60b5669788aeb0655bf19d38\nresult = valid\nshared = d874b55678d0a04d216c31b02f3ad1f30c92caaf168f34e3a743356d9276e993\n\n# tcId = 38\n# edge cases for ephemeral key\nprivate = 55d55f11bb8da1ea318bca7266f0376662441ea87270aa2077f1b770c4854a48\npublic = 3059301306072a8648ce3d020106082a8648ce3d03010703420004190c25f88ad9ae3a098e6cffe6fd0b1bea42114eb0cedd5868a45c5fe277dff321b8342ef077bc6724112403eaee5a15b4c31a71589f02ded09cd99cc5db9c83\nresult = valid\nshared = 11a8582057463fc76fda3ab8087eb0a420b0d601bb3134165a369646931e52a6\n\n# tcId = 39\n# edge cases for ephemeral key\nprivate = 55d55f11bb8da1ea318bca7266f0376662441ea87270aa2077f1b770c4854a48\npublic = 3059301306072a8648ce3d020106082a8648ce3d03010703420004507442007322aa895340cba4abc2d730bfd0b16c2c79a46815f8780d2c55a2dd4619d69f9940f51663aa12381bc7cf678bd1a72a49fbc11b0b69cb22d1af9f2d\nresult = valid\nshared = 4e173a80907f361fe5a5d335ba7685d5eba93e9dfc8d8fcdb1dcd2d2bde27507\n\n# tcId = 40\n# edge cases for ephemeral key\nprivate = 55d55f11bb8da1ea318bca7266f0376662441ea87270aa2077f1b770c4854a48\npublic = 3059301306072a8648ce3d020106082a8648ce3d030107034200045f177bfe19baaaee597e68b6a87a519e805e9d28a70cb72fd40f0fe5a754ba4562ca1103f70a2006cd1f67f5f6a3580b29dc446abc90e0e910c1e05a9aa788cd\nresult = valid\nshared = 73220471ec8bad99a297db488a34a259f",
     "9bc891ffaf09922e6b5001f5df67018\n\n# tcId = 41\n# edge cases for ephemeral key\nprivate = 55d55f11bb8da1ea318bca7266f0376662441ea87270aa2077f1b770c4854a48\npublic = 3059301306072a8648ce3d020106082a8648ce3d030107034200047fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff2e2213caf03033e0fd0f7951154f6e6c3a9244a72faca65e9ce9eeb5c8e1cea9\nresult = valid\nshared = 55d0a203e22ffb523c8d2705060cee9d28308b51f184beefc518cff690bad346\n\n# tcId = 42\n# edge cases for ephemeral key\nprivate = 55d55f11bb8da1ea318bca7266f0376662441ea87270aa2077f1b770c4854a48\npublic = 3059301306072a8648ce3d020106082a8648ce3d0301070342000480000000000000000000000000000000000000000000000000000000000000042be8789db81bb4870a9e60c5c18c80c83de464277281f1af1e640843a1a3148e\nresult = valid\nshared = 2518d846e577d95e9e7bc766cde7997cb887fb266d3a6cb598a839fd54aa2f4f\n\n# tcId = 43\n# edge cases for ephemeral key\nprivate = 55d55f11bb8da1ea318bca7266f0376662441ea87270aa2077f1b770c4854a48\npublic = 3059301306072a8648ce3d020106082a8648ce3d030107034200048000003ffffff0000007fffffe000000ffffffc000001ffffff8000004000000722540f8a471c379083c600b58fde4d95c7dcad5095f4219fc5e9bdde3c5cd39\nresult = valid\nshared = bdb49f4bdf42ac64504e9ce677b3ec5c0a03828c5b3efad726005692d35c0f26\n\n# tcId = 44\n# edge cases for ephemeral key\nprivate = 55d55f11bb8da1ea318bca7266f0376662441ea87270aa2077f1b770c4854a48\npublic = 3059301306072a8648ce3d020106082a8648ce3d03010703420004ff00000001fffffffc00000007fffffff00000001fffffffc00000007fffffff5df80fc6cae26b6c1952fbd00ed174ee1209d069335f5b48588e29e80b9191ad\nresult = valid\nshared = f503ac65637e0f17cb4408961cb882c875e4c6ef7a548d2d52d8c2f681838c55\n\n# tcId = 45\n# edge cases for ephemeral key\nprivate = 55d55f11bb8da1ea318bca7266f0376662441ea87270aa2077f1b770c4854a48\npublic = 3059301306072a8648ce3d020106082a8648ce3d03010703420004ffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff2c63650e6a5d332e2987dd09a79008e8faabbd37e49cb016bfb92c8cd0f5da77\nresult = valid\nshared = e3c18e7d7377dc540bc45c08d389bdbe255fa80ca8faf1ef6b94d52049987d21\n\n# tcId = 46\n# edge cases for ephemeral key\nprivate = 55d55f11bb8da1ea318bca7266f0376662441ea87270aa2077f1b770c4854a48\npublic = 3059301306072a8648ce3d020106082a8648ce3d03010703420004ffffffff00000000000000ffffffffffffff00000000000000ffffffffffffff7a116c964a4cd60668bf89cffe157714a3ce21b93b3ca607c8a5b93ac54ffc0a\nresult = valid\nshared = 516d6d329b095a7c7e93b4023d4d05020c1445ef1ddcb3347b3a27d7d7f57265\n\n# tcId = 47\n# edge cases for ephemeral key\nprivate = 55d55f11bb8da1ea318bca7266f0376662441ea87270aa2077f1b770c4854a48\npublic = 3059301306072a8648ce3d020106082a8648ce3d030107034200047fffffffffffffffffffffffeecf2230ffffffffffffffffffffffffffffffff00000001c7c30643abed0af0a49fe352cb483ff9b97dccdf427c658e8793240d\nresult = valid\nshared = 6fd26661851a8de3c6d06f834ef3acb8f2a5f9c136a985ffe10d5eeb51edcfa3\n\n# tcId = 48\n# edge cases for ephemeral key\nprivate = 55d55f11bb8da1ea318bca7266f0376662441ea87270aa2077f1b770c4854a48\npublic = 3059301306072a8648ce3d020106082a8648ce3d030107034200047fffffffffffffffffffffffeecf2230fffffffffffffffffffffffffffffffffffffffd383cf9bd5412f50f5b601cad34b7c00746823320bd839a71786cdbf2\nresult = valid\nshared = 6fd26661851a8de3c6d06f834ef3acb8f2a5f9c136a985ffe10d5eeb51edcfa3\n\n# tcId = 49\n# edge cases for ephemeral key\nprivate = 55d55f11bb8da1ea318bca7266f0376662441ea87270aa2077f1b770c4854a48\npublic = 3059301306072a8648ce3d020106082a8648ce3d030107034200047fffffffffffffffffffffffca089011ffffffffffffffffffffffffffffffff267bfdf8a61148decd80283732dd4c1095e4bb40b9658408208dc1147fffffff\nresult = valid\nshared = 44236c8b9505a19d48774a3903c0292759b0f826e6ac092ff898d87e53d353fc\n\n# tcId = 50\n# edge cases for ephemeral key\nprivate = 55d55f11bb8da1ea318bca7266f0376662441ea87270aa2077f1b770c4854a48\npublic = 3059301306072a8648ce3d020106082a8648ce3d030107034200047fffffffffffffffffffffffca089011ffffffffffffffffffffffffffffffffd984020659eeb722327fd7c8cd22b3ef6a1b44c0469a7bf7df723eeb80000000\nresult = valid\nshared = 44236c8b9505a19d48774a3903c0292759b0f826e6ac092ff898d87e53d353fc\n\n# tcId = 51\n# edge cases for ephemeral key\nprivate = 55d55f11bb8da1ea318bca7266f0376662441ea87270aa2077f1b770c4854a48\npublic = 3059301306072a8648ce3d020106082a8648ce3d03010703420004000000000000000000000000111124f4000000000000000000000000000000000000000d12d381b0760b1c50be8acf859385052c7f53cde67ce13759de3123a0\nresult = valid\nshared = f1f0e43b374feb7e7f96d4ffe7519fa8bb6c3cfd25f6f87dab2623d2a2d33851\n\n# tcId = 52\n# edge cases for ephemeral key\nprivate = 55d55f11bb8da1ea318bca7266f0376662441ea87270aa2077f1b770c4854a48\npublic = 3059301306072a8648ce3d020106082a8648ce3d03010703420004000000000000000000000000111124f400000000000000000000000000000000fffffff1ed2c7e5089f4e3af4175307a6c7afad480ac3219831ec8a621cedc5f\nresult = valid\nshared = f1f0e43b374feb7e7f96d4ffe7519fa8bb6c3cfd25f6f87dab2623d2a2d33851\n\n# tcId = 53\n# edge cases for ephemeral key\nprivate = 55d55f11bb8da1ea318bca7266f0376662441ea87270aa2077f1b770c4854a48\npublic = 3059301306072a8648ce3d020106082a8648ce3d030107034200040000000000000000000000001f6bd1e5000000000000000000000000000000004096edd6871c320cb8a9f4531751105c97b4c257811bbc32963eaf39ffffffff\nresult = valid\nshared = 3ebbace1098a81949d5605dd94a7aa88dc396c2c23e01a9c8cca5bb07bfbb6a1\n\n# tcId = 54\n# edge cases for ephemeral key\nprivate = 55d55f11bb8da1ea318bca7266f0376662441ea87270aa2077f1b770c4854a48\npublic = 3059301306072a8648ce3d020106082a8648ce3d030107034200040000000000000000000000001f6bd1e500000000000000000000000000000000bf69122878e3cdf447560bace8aeefa3684b3da97ee443cd69c150c600000000\nresult = valid\nshared = 3ebbace1098a81949d5605dd94a7aa88dc396c2c23e01a9c8cca5bb07bfbb6a1\n\n# tcId = 55\n# edge cases for ephemeral key\nprivate = 55d55f11bb8da1ea318bca7266f0376662441ea87270aa2077f1b770c4854a48\npublic = 3059301306072a8648ce3d020106082a8648ce3d03010703420004000000000000000000000001ea77d449ffffffffffffffffffffffffffffffff000000007afbc0b325e820646dec622fb558a51c342aa257f4b6a8ec5ddf144f\nresult = valid\nshared = 1b085213a9c89d353e1111af078c38c502b7b4771efba51f589b5be243417bdc\n\n# tcId = 56\n# edge cases for ephemeral key\nprivate = 55d55f11bb8da1ea318bca7266f0376662441ea87270aa2077f1b770c4854a48\npublic = 3059301306072a8648ce3d020106082a8648ce3d03010703420004000000000000000000000001ea77d449fffffffffffffffffffffffffffffffffffffffe85043f4dda17df9b92139dd04aa75ae4cbd55da80b495713a220ebb0\nresult = valid\nshared = 1b085213a9c89d353e1111af078c38c502b7b4771efba51f589b5be243417bdc\n\n# tcId = 57\n# edge cases for ephemeral key\nprivate = 55d55f11bb8da1ea318bca7266f0376662441ea87270aa2077f1b770c4854a48\npublic = 3059301306072a8648ce3d020106082a8648ce3d03010703420004000000000000000000000002099f55d5ffffffffffffffffffffffffffffffff152c1a22d823a27855ed03f8e2ab5038bb1df4d87e43865f2daf6948ffffffff\nresult = valid\nshared = 67cb63566c7ceb12fdd85ce9d2f77c359242bbaa0ea1bf3cf510a4a26591d1f1\n\n# tcId = 58\n# edge cases for ephemeral key\nprivate = 55d55f11bb8da1ea318bca7266f0376662441ea87270aa2077f1b770c4854a48\npublic = 3059301306072a8648ce3d020106082a8648ce3d03010703420004000000000000000000000002099f55d5ffffffffffffffffffffffffffffffffead3e5dc27dc5d88aa12fc071d54afc744e20b2881bc79a0d25096b700000000\nresult = valid\nshared = 67cb63566c7ceb12fdd85ce9d2f77c359242bbaa0ea1bf3cf510a4a26591d1f1\n\n# tcId = 59\n# edge case private key\nprivate = 3\npublic = 3059301306072a8648ce3d020106082a8648ce3d0301070342000431028f3377fc8f2b1967edaab90213acad0da9f50897f08f57537f78f116744743a1930189363bbde2ac4cbd1649cdc6f451add71dd2f16a8a867f2b17caa16b\nresult = valid\nshared = 85a0b58519b28e70a694ec5198f72c4bfdabaa30a70f7143b5b1cd7536f716ca\n\n# tcId = 60\n# edge case private key\nprivate = 0ffffffffffffffffffffffffffffffffffffffffffffffffffffffff\npublic = 3059301306072a8648ce3d020106082a8648ce3d0301070342000431028f3377fc8f2b1967edaab90213acad0da9f50897f08f57537f78f116744743a1930189363bbde2ac4cbd1649cdc6f451add71dd2f16a8a867f2b17caa16b\nresult = valid\nshared = a329a7d80424ea2d6c904393808e510dfbb28155092f1bac284dceda1f13afe5\n\n# tcId = 61\n# edge case private key\nprivate = 100000000000000000000000000000000000000000000000000000000000000\npublic = 3059301306072a8648ce3d020106082a8648ce3d0301070342000431028f3377fc8f2b1967edaab90213acad0da9f50897f08f57537f78f116744743a193",
@@ -2977,9 +2958,9 @@
     "375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b\nresult = acceptable\nshared = f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4\n# The public key in this test uses an invalid ASN encoding. Some cases where the\n# ASN parser is not strictly checking the ASN format are benign as long as the\n# ECDH computation still returns the correct shared value.\n\n# tcId = 320\n# oid with invalid node\nprivate = 0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2\npublic = 305a301406072a8648ce3d020106092a808648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b\nresult = acceptable\nshared = f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4\n# The public key in this test uses an invalid ASN encoding. Some cases where the\n# ASN parser is not strictly checking the ASN format are benign as long as the\n# ECDH computation still returns the correct shared value.\n\n# tcId = 321\n# lonely bit string tag\nprivate = 0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2\npublic = 3016301306072a8648ce3d020106082a8648ce3d03010703\nresult = acceptable\nshared = f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4\n# The public key in this test uses an invalid ASN encoding. Some cases where the\n# ASN parser is not strictly checking the ASN format are benign as long as the\n# ECDH computation still returns the correct shared value.\n\n# tcId = 322\n# appending 0's to bit string\nprivate = 0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2\npublic = 305b301306072a8648ce3d020106082a8648ce3d030107034400042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b0000\nresult = acceptable\nshared = f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4\n# The public key in this test uses an invalid ASN encoding. Some cases where the\n# ASN parser is not strictly checking the ASN format are benign as long as the\n# ECDH computation still returns the correct shared value.\n\n# tcId = 323\n# prepending 0's to bit string\nprivate = 0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2\npublic = 305b301306072a8648ce3d020106082a8648ce3d0301070344000000042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b\nresult = acceptable\nshared = f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4\n# The public key in this test uses an invalid ASN encoding. Some cases where the\n# ASN parser is not strictly checking the ASN format are benign as long as the\n# ECDH computation still returns the correct shared value.\n\n# tcId = 324\n# appending null value to bit string\nprivate = 0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2\npublic = 305b301306072a8648ce3d020106082a8648ce3d030107034400042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b0500\nresult = acceptable\nshared = f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4\n# The public key in this test uses an invalid ASN encoding. Some cases where the\n# ASN parser is not strictly checking the ASN format are benign as long as the\n# ECDH computation still returns the correct shared value.\n\n# tcId = 325\n# truncated length of bit string\nprivate = 0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2\npublic = 3017301306072a8648ce3d020106082a8648ce3d0301070381\nresult = acceptable\nshared = f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4\n# The public key in this test uses an invalid ASN encoding. Some cases where the\n# ASN parser is not strictly checking the ASN format are benign as long as the\n# ECDH computation still returns the correct shared value.\n\n# tcId = 326\n# Replacing bit string with NULL\nprivate = 0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2\npublic = 3017301306072a8648ce3d020106082a8648ce3d0301070500\nresult = acceptable\nshared = f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4\n# The public key in this test uses an invalid ASN encoding. Some cases where the\n# ASN parser is not strictly checking the ASN format are benign as long as the\n# ECDH computation still returns the correct shared value.\n\n# tcId = 327\n# changing tag value of bit string\nprivate = 0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2\npublic = 3059301306072a8648ce3d020106082a8648ce3d030107014200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b\nresult = acceptable\nshared = f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4\n# The public key in this test uses an invalid ASN encoding. Some cases where the\n# ASN parser is not strictly checking the ASN format are benign as long as the\n# ECDH computation still returns the correct shared value.\n\n# tcId = 328\n# changing tag value of bit string\nprivate = 0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2\npublic = 3059301306072a8648ce3d020106082a8648ce3d030107024200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b\nresult = acceptable\nshared = f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4\n# The public key in this test uses an invalid ASN encoding. Some cases where the\n# ASN parser is not strictly checking the ASN format are benign as long as the\n# ECDH computation still returns the correct shared value.\n\n# tcId = 329\n# changing tag value of bit string\nprivate = 0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2\npublic = 3059301306072a8648ce3d020106082a8648ce3d030107044200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b\nresult = acceptable\nshared = f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4\n# The public key in this test uses an invalid ASN encoding. Some cases where the\n# ASN parser is not strictly checking the ASN format are benign as long as the\n# ECDH computation still returns the correct shared value.\n\n# tcId = 330\n# changing tag value of bit string\nprivate = 0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2\npublic = 3059301306072a8648ce3d020106082a8648ce3d030107054200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b\nresult = acceptable\nshared = f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4\n# The public key in this test uses an invalid ASN encoding. Some cases where the\n# ASN parser is not strictly checking the ASN format are benign as long as the\n# ECDH computation still returns the correct shared value.\n\n# tcId = 331\n# changing tag value of bit string\nprivate = 0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2\npublic = 3059301306072a8648ce3d020106082a8648ce3d030107ff4200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b\nresult = acceptable\nshared = f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4\n# The public key in this test uses an invalid ASN encoding. Some cases where the\n# ASN parser is not strictly checking the ASN format are benign as long as the\n# ECDH computation still returns the correct shared value.\n\n# tcId = 332\n# dropping value of bit string\nprivate = 0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2\npublic = 3017301306072a8648ce3d020106082a8648ce3d0301070300\nresult = acceptable\nshared = f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4\n# The public key in this test uses an invalid ASN encoding. Some cases where the\n# ASN parser is not strictly checking the ASN format are benign as long as the\n# ECDH computation still returns the correct shared value.\n\n# tcId = 333\n# modify first byte of bit string\nprivate = 0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2\npublic = 305930130",
     "6072a8648ce3d020106082a8648ce3d030107034202042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b\nresult = acceptable\nshared = f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4\n# The public key in this test uses an invalid ASN encoding. Some cases where the\n# ASN parser is not strictly checking the ASN format are benign as long as the\n# ECDH computation still returns the correct shared value.\n\n# tcId = 334\n# modify last byte of bit string\nprivate = 0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2\npublic = 3059301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add6eb\nresult = acceptable\nshared = f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4\n# The public key in this test uses an invalid ASN encoding. Some cases where the\n# ASN parser is not strictly checking the ASN format are benign as long as the\n# ECDH computation still returns the correct shared value.\n\n# tcId = 335\n# truncate bit string\nprivate = 0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2\npublic = 3058301306072a8648ce3d020106082a8648ce3d030107034100042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add6\nresult = acceptable\nshared = f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4\n# The public key in this test uses an invalid ASN encoding. Some cases where the\n# ASN parser is not strictly checking the ASN format are benign as long as the\n# ECDH computation still returns the correct shared value.\n\n# tcId = 336\n# truncate bit string\nprivate = 0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2\npublic = 3058301306072a8648ce3d020106082a8648ce3d0301070341042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b\nresult = acceptable\nshared = f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4\n# The public key in this test uses an invalid ASN encoding. Some cases where the\n# ASN parser is not strictly checking the ASN format are benign as long as the\n# ECDH computation still returns the correct shared value.\n\n# tcId = 337\n# declaring bits as unused in a bit-string\nprivate = 0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2\npublic = 3059301306072a8648ce3d020106082a8648ce3d030107034201042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b\nresult = acceptable\nshared = f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4\n# The public key in this test uses an invalid ASN encoding. Some cases where the\n# ASN parser is not strictly checking the ASN format are benign as long as the\n# ECDH computation still returns the correct shared value.\n\n# tcId = 338\n# unused bits in a bit-string\nprivate = 0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2\npublic = 305d301306072a8648ce3d020106082a8648ce3d030107034620042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b01020304\nresult = acceptable\nshared = f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4\n# The public key in this test uses an invalid ASN encoding. Some cases where the\n# ASN parser is not strictly checking the ASN format are benign as long as the\n# ECDH computation still returns the correct shared value.\n\n# tcId = 339\n# unused bits in empty bit-string\nprivate = 0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2\npublic = 3018301306072a8648ce3d020106082a8648ce3d030107030103\nresult = acceptable\nshared = f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4\n# The public key in this test uses an invalid ASN encoding. Some cases where the\n# ASN parser is not strictly checking the ASN format are benign as long as the\n# ECDH computation still returns the correct shared value.\n\n# tcId = 340\n# 128 unused bits\nprivate = 0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2\npublic = 3059301306072a8648ce3d020106082a8648ce3d030107034280042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b\nresult = acceptable\nshared = f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4\n# The public key in this test uses an invalid ASN encoding. Some cases where the\n# ASN parser is not strictly checking the ASN format are benign as long as the\n# ECDH computation still returns the correct shared value.\n\n",
 };
-static const size_t kLen64 = 231526;
+static const size_t kLen63 = 231526;
 
-static const char *kData64[] = {
+static const char *kData63[] = {
     "# Imported from Wycheproof's ecdh_secp384r1_test.json.\n# This file is generated by convert_wycheproof.go. Do not edit by hand.\n#\n# Algorithm: ECDH\n# Generator version: 0.4.12\n\n[curve = secp384r1]\n[encoding = asn]\n\n# tcId = 1\n# normal case\nprivate = 766e61425b2da9f846c09fc3564b93a6f8603b7392c785165bf20da948c49fd1fb1dee4edd64356b9f21c588b75dfd81\npublic = 3076301006072a8648ce3d020106052b8104002203620004790a6e059ef9a5940163183d4a7809135d29791643fc43a2f17ee8bf677ab84f791b64a6be15969ffa012dd9185d8796d9b954baa8a75e82df711b3b56eadff6b0f668c3b26b4b1aeb308a1fcc1c680d329a6705025f1c98a0b5e5bfcb163caa\nresult = valid\nshared = 6461defb95d996b24296f5a1832b34db05ed031114fbe7d98d098f93859866e4de1e229da71fef0c77fe49b249190135\n\n# tcId = 2\n# compressed public key\nprivate = 766e61425b2da9f846c09fc3564b93a6f8603b7392c785165bf20da948c49fd1fb1dee4edd64356b9f21c588b75dfd81\npublic = 3046301006072a8648ce3d020106052b8104002203320002790a6e059ef9a5940163183d4a7809135d29791643fc43a2f17ee8bf677ab84f791b64a6be15969ffa012dd9185d8796\nresult = acceptable\nshared = 6461defb95d996b24296f5a1832b34db05ed031114fbe7d98d098f93859866e4de1e229da71fef0c77fe49b249190135\n# The point in the public key is compressed. Not every library supports points\n# in compressed format.\n\n# tcId = 3\n# edge case for shared secret\nprivate = 0a2b6442a37f8a3759d2cb91df5eca75b14f5a6766da8035cc1943b15a8e4ebb6025f373be334080f22ab821a3535a6a7\npublic = 3076301006072a8648ce3d020106052b8104002203620004490e96d17f4c6ceccd45def408cea33e9704a5f1b01a3de2eaaa3409fd160d78d395d6b3b003d71fd1f590fad95bf1c9d8665efc2070d059aa847125c2f707435955535c7c5df6d6c079ec806dce6b6849d337140db7ca50616f9456de1323c4\nresult = valid\nshared = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\n\n# tcId = 4\n# edge case for shared secret\nprivate = 0a2b6442a37f8a3759d2cb91df5eca75b14f5a6766da8035cc1943b15a8e4ebb6025f373be334080f22ab821a3535a6a7\npublic = 3076301006072a8648ce3d020106052b81040022036200040161328909675213e32098d35a6b8308a8d500cca39dcee5e804e73bdb8deaf06fe417291fd9793b231ef5fe86945444a97a01f3ae3a8310c4af49b592cb291ef70ee5bc7f5534d3c23dc9eefde2304842c7737ae937ccf9bd215c28103e9fe2\nresult = valid\nshared = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002\n\n# tcId = 5\n# edge case for shared secret\nprivate = 0a2b6442a37f8a3759d2cb91df5eca75b14f5a6766da8035cc1943b15a8e4ebb6025f373be334080f22ab821a3535a6a7\npublic = 3076301006072a8648ce3d020106052b8104002203620004af4ae964e3bcbd923accda5da3175d411fd62d17dd3c3a1c410bef1730985a6265d90e950ac0fc50743b1ed771906ff33b68cf4d3d83a885a87097fdd329ce83b189f98cec5be44c31d1a3a2bba10f471963232b8ba7610fa8c72179050eb86d\nresult = valid\nshared = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003\n\n# tcId = 6\n# edge case for shared secret\nprivate = 0a2b6442a37f8a3759d2cb91df5eca75b14f5a6766da8035cc1943b15a8e4ebb6025f373be334080f22ab821a3535a6a7\npublic = 3076301006072a8648ce3d020106052b81040022036200041478ab6e032b9545eda9ac2c264e57a11f08acbc76d16a0ab77b04dbdaf20f215c4183437b32afc471eaa603d14c7c5d8a4c84ee0e895bec5c37f0a1ca075e106ff6bf38801b5c697409d39675231108d33c4a5ea65aaa8c03e939c95d96c4c4\nresult = valid\nshared = 0000000000000000ffffffffffffffff0000000000000000ffffffffffffffff00000000000000010000000000000001\n\n# tcId = 7\n# edge case for shared secret\nprivate = 0a2b6442a37f8a3759d2cb91df5eca75b14f5a6766da8035cc1943b15a8e4ebb6025f373be334080f22ab821a3535a6a7\npublic = 3076301006072a8648ce3d020106052b8104002203620004f63208e34e7e90bb5fb036432467a89981444010663b8533b47bfa94bd2bc16f38aa516b930a4726e3876d3091bfb72ec783ed4da0cac06320817dc8bc64f59ccf06f48abc4386a150913fa95743a7b4601190e1c6ee8f8bf6354b254ecace45\nresult = valid\nshared = 00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff\n\n# tcId = 8\n# edge case for shared secret\nprivate = 0a2b6442a37f8a3759d2cb91df5eca75b14f5a6766da8035cc1943b15a8e4ebb6025f373be334080f22ab821a3535a6a7\npublic = 3076301006072a8648ce3d020106052b8104002203620004033271ef42d92ad47b273b09ea2f45401161baa52696590d0e175ff2d1c0dfa3fea40e4266d446546c05e480d57fabec7889f16a8bcc176602f6d46561614a2f4284abe697b7cb9ce79f7e2e71b155cb1f155ce925d16391a680eda23152e6e1\nresult = valid\nshared = 0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff\n\n# tcId = 9\n# edge case for shared secret\nprivate = 0a2b6442a37f8a3759d2cb91df5eca75b14f5a6766da8035cc1943b15a8e4ebb6025f373be334080f22ab821a3535a6a7\npublic = 3076301006072a8648ce3d020106052b8104002203620004737e8437e18683de2455b68945bba31daec3e754d72f0a0776d3192b2f9298bb95ca1464baa6687aabb679f804cf6ec6c2b4d47d61a60404df63b1e9ac0954b3419bbc2ad52a0409aeeb82f4703758588059165b20367dcb4b235b0caf71d727\nresult = valid\nshared = 007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0008000\n\n# tcId = 10\n# edge case for shared secret\nprivate = 0a2b6442a37f8a3759d2cb91df5eca75b14f5a6766da8035cc1943b15a8e4ebb6025f373be334080f22ab821a3535a6a7\npublic = 3076301006072a8648ce3d020106052b810400220362000437f9004983156bbd9c47891e75237bb13016bd7fe6f4e0f71cef0e63f16a672f0d3b0e20165c33407e146b6a4ae6962dd3b57ccb99e7aaf1303240516d0ebe08e585513e3695d42c467dcab5340ef761990cadc8d8840aacc944481415c07feb\nresult = valid\nshared = 3b5eed80727bcbc5113b8a9e4db1c81b1dddc2d99ff56d9c3c1054348913bde296311c4bd2fa899b4d0e66aaa1b6a0dd\n\n# tcId = 11\n# edge case for shared secret\nprivate = 0a2b6442a37f8a3759d2cb91df5eca75b14f5a6766da8035cc1943b15a8e4ebb6025f373be334080f22ab821a3535a6a7\npublic = 3076301006072a8648ce3d020106052b81040022036200049655d8e5622718b317cfbc09894357f75a6b13fa516bcd6630721b869a620196cf0c3dec8860b32d27ed9bac2cf263af17321698116d7d811ae8da9b9cbbf9382c1e36e2b67d6c6af9bcea7d9de00ca72b398606c098a0a0f0c4b8941943ed65\nresult = valid\nshared = 6a99a5acd4a7edb1c707d7f8be12e81140338e3e14ba563c703c681a319a3f9ce1f90f032bf840f3758e89cb852ceca6\n\n# tcId = 12\n# edge case for shared secret\nprivate = 0a2b6442a37f8a3759d2cb91df5eca75b14f5a6766da8035cc1943b15a8e4ebb6025f373be334080f22ab821a3535a6a7\npublic = 3076301006072a8648ce3d020106052b8104002203620004ccb13d427b3c4bb33dd4f20cddabc68600eaf97eeb2c81e8c218ae90743e74ff38ca56f0c0224379db464dcf4a40f04350cd7a659b2c4851a5dcf8c990fc920c07d4d5aa50a2185750e6b84c42e83cff635050482decb4780f812e4c49fc7404\nresult = valid\nshared = 7c25a4f57f76ab13b25cab3c265db9d9bd925fecbf7bf93bef1308778646628decab067ed988a9755cd88e88de367104\n\n# tcId = 13\n# edge case for shared secret\nprivate = 0a2b6442a37f8a3759d2cb91df5eca75b14f5a6766da8035cc1943b15a8e4ebb6025f373be334080f22ab821a3535a6a7\npublic = 3076301006072a8648ce3d020106052b81040022036200042664624307c02ef487030a632162c515f841d15ea3152d98ff2364232d7aab39343d5f703a4d5a31092aa7356c3a2f671c1cd603addfd8b5477552a3b32a18edaf3e33bec22ee2167f9da729636002a7974eaeb5ff082b2aabf8c7056b84c3ab\nresult = valid\nshared = 7fffffe000000ffffffc000001ffffff8000003ffffff0000007fffffe000000ffffffc000001ffffff8000004000002\n\n# tcId = 14\n# edge case for shared secret\nprivate = 0a2b6442a37f8a3759d2cb91df5eca75b14f5a6766da8035cc1943b15a8e4ebb6025f373be334080f22ab821a3535a6a7\npublic = 3076301006072a8648ce3d020106052b8104002203620004665f1f320b6ab1c1b52d144e52d87a154c2b4489838c9119de622c2d1b52b65b0a3955e44e0d4859175360c0f63dee813f14f69972f18caed7916c94a4d20ec344591e7536a4a7a4d8c9832818c96d60b1a81fabe64ea02c5f647e361bf5b60f\nresult = valid\nshared = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002\n\n# tcId = 15\n# edge case for shared secret\nprivate = 0a2b6442a37f8a3759d2cb91df5eca75b14f5a6766da8035cc1943b15a8e4ebb6025f373be334080f22ab821a3535a6a7\npublic = 3076301006072a8648ce3d020106052b810400220362000491357ca87dbb08e85d7b1acecfd1e086078a82d19f81474da389364a39fe2543eb934b440173c38e61a1d9407855b5d89ef0d9e920764b6d7765b084cf9541dacc43d1dabaa390b0fb856097b0c00a8556f4e3848568ab4ae790c3d346ca01b6\nresult = valid\nshared = fff00000001fffffffc00000007fffffff00000001fffffffc00000007fffffff00000001fffffffc00000007fffffff\n\n# tcId = 16\n# edge case for shared secret\nprivate = 0a2b6442a37f8a3759d2cb91df5eca75b14f5a6766da8035cc1943b15a8e4ebb6025f373be334080f22ab821a3535a6a7\npublic = 3076301006",
     "072a8648ce3d020106052b8104002203620004d5a833bae33b2d10fdff6db7c5477adb614b191c70d97c6f130a14e93931cc1dc058053fee54a264a00fdd16d3166fdc42992276b79925bafcd183b03ed18235350980abfe67b814c6c11074c38f74cd4e734ad58cdb49d9fcd2181d1b8f1119\nresult = valid\nshared = fffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000004000000\n\n# tcId = 17\n# edge case for shared secret\nprivate = 0a2b6442a37f8a3759d2cb91df5eca75b14f5a6766da8035cc1943b15a8e4ebb6025f373be334080f22ab821a3535a6a7\npublic = 3076301006072a8648ce3d020106052b810400220362000467547cda7fbe8f16be5a4477cbb02979f1af72fc0f39302773552fbcf4667a8e23abc0e12856ee6234deeca5f22ae0503a4df7c068e7432417260cb9fe0d68b9c7fcf7e16a2ada05687d8f8900b84723103edbff0a42b27517da2760b7d38843\nresult = valid\nshared = ffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff\n\n# tcId = 18\n# edge case for shared secret\nprivate = 0a2b6442a37f8a3759d2cb91df5eca75b14f5a6766da8035cc1943b15a8e4ebb6025f373be334080f22ab821a3535a6a7\npublic = 3076301006072a8648ce3d020106052b81040022036200041363e3b99008e09bb3f085949b9b6ea26a318f496de568a96630fdb9d4c72c2814df3087a1741f32f24989b428167f93c653cb3ae8c3ecfaec57efd54bb8ce9d79c7bf6cc70fb1114f939be8f1a99bf1e42b97431124ef9fa33450faa4e76839\nresult = valid\nshared = ffffffffffff00000000000000ffffffffffffff00000000000000ffffffffffffff0000000000000100000000000001\n\n# tcId = 19\n# edge case for shared secret\nprivate = 0a2b6442a37f8a3759d2cb91df5eca75b14f5a6766da8035cc1943b15a8e4ebb6025f373be334080f22ab821a3535a6a7\npublic = 3076301006072a8648ce3d020106052b8104002203620004ba2be8d7147e2417c2ec80b24b4c1aa94464ffd0aae1fa2e078b3afbc77c144489ca9d064acbb7a9cfa6196d0f467b7e65ee1ca1eb1351ff9968f553dfe2e4c59ff8ba34c22a42b3baa13a9a1adc7f13abd40f1fd25d46bc5330852b9371966a\nresult = valid\nshared = ffffffffffffffffffffffffffffffff00000000000000000000000000000000ffffffffffffffffffffffffffffffff\n\n# tcId = 20\n# edge case for shared secret\nprivate = 0a2b6442a37f8a3759d2cb91df5eca75b14f5a6766da8035cc1943b15a8e4ebb6025f373be334080f22ab821a3535a6a7\npublic = 3076301006072a8648ce3d020106052b8104002203620004d69850ccbacc4736ea200ff2f8488f26247945a2ab48dd3708f494b293d8cba83417f48974881c7fb03854089bbf66cc1c773ec03cb8cd5f007ec3b03bdd05a409b352103f0decf25b41673ab8ca3d04334babee01219f15701f2bca22d40b37\nresult = valid\nshared = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffe\n\n# tcId = 21\n# y-coordinate of the public key has many trailing 0's\nprivate = 0a2b6442a37f8a3759d2cb91df5eca75b14f5a6766da8035cc1943b15a8e4ebb6025f373be334080f22ab821a3535a6a7\npublic = 3076301006072a8648ce3d020106052b81040022036200046fcaf82d982d222d6096ba83e55b1c7dcb71a41e88f323333f44284d95c4bd3616da7a1bef928f31c26f885ba7adb487826fde2ed9f5649c11cf8465f8bf8ad50f68914936fc39666f68219d066506bea4001fdc816c9a90e7e2afb19bea085f\nresult = valid\nshared = 000000000000000000000000000000000000000000000000000000001f03123b00000000000000000000000000000000\n\n# tcId = 22\n# y-coordinate of the public key has many trailing 1's\nprivate = 0a2b6442a37f8a3759d2cb91df5eca75b14f5a6766da8035cc1943b15a8e4ebb6025f373be334080f22ab821a3535a6a7\npublic = 3076301006072a8648ce3d020106052b81040022036200046fcaf82d982d222d6096ba83e55b1c7dcb71a41e88f323333f44284d95c4bd3616da7a1bef928f31c26f885ba7adb4877d9021d1260a9b63ee307b9a0740752af0976eb6c903c6999097de62f99af9405bffe0227e93656f181d504f6415f7a0\nresult = valid\nshared = 000000000000000000000000000000000000000000000000000000001f03123b00000000000000000000000000000000\n\n# tcId = 23\n# y-coordinate of the public key is small\nprivate = 0a2b6442a37f8a3759d2cb91df5eca75b14f5a6766da8035cc1943b15a8e4ebb6025f373be334080f22ab821a3535a6a7\npublic = 3076301006072a8648ce3d020106052b8104002203620004bfeb47fb40a65878e6b642f40b8e15022ade9ecfa8cb618043063494e2bc5d2df10d36f37869b58ef12dcc35e3982835fd2e55ec41fdfe8cabbbb7bcd8163645a19e9dac59630f3fe93b208094ff87cd461b53cef53482e70e2e8ea87200cc3f\nresult = valid\nshared = 0000000000000000000000000000000000000000000000000000000036a2907c00000000000000000000000000000000\n\n# tcId = 24\n# y-coordinate of the public key is large\nprivate = 0a2b6442a37f8a3759d2cb91df5eca75b14f5a6766da8035cc1943b15a8e4ebb6025f373be334080f22ab821a3535a6a7\npublic = 3076301006072a8648ce3d020106052b8104002203620004bfeb47fb40a65878e6b642f40b8e15022ade9ecfa8cb618043063494e2bc5d2df10d36f37869b58ef12dcc35e398283502d1aa13be0201735444484327e9c9ba5e616253a69cf0c016c4df7f6b007831b9e4ac300acb7d18f1d171588dff33c0\nresult = valid\nshared = 0000000000000000000000000000000000000000000000000000000036a2907c00000000000000000000000000000000\n\n# tcId = 25\n# edge cases for ephemeral key\nprivate = 2bc15cf3981eab6102c39f9a925aa1309db59c2c02a54411928d73c3945d157848dc36959efef7495c8528ea284c1c97\npublic = 3076301006072a8648ce3d020106052b81040022036200040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003cf99ef04f51a5ea630ba3f9f960dd593a14c9be39fd2bd215d3b4b08aaaf86bbf927f2c46e52ab06fb742b8850e521e\nresult = valid\nshared = 6092a1757ddd43a04e185ff9472a0d18c7f7a7dc802f7e059e0c69ae16c802651719406e04de27652ff83da4a780ef2f\n\n# tcId = 26\n# edge cases for ephemeral key\nprivate = 2bc15cf3981eab6102c39f9a925aa1309db59c2c02a54411928d73c3945d157848dc36959efef7495c8528ea284c1c97\npublic = 3076301006072a8648ce3d020106052b8104002203620004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002732152442fb6ee5c3e6ce1d920c059bc623563814d79042b903ce60f1d4487fccd450a86da03f3e6ed525d02017bfdb3\nresult = valid\nshared = 89c804cb81443386b185bcd9e2e6c35ee6177c3b90298985c4e81a89d520cceb17d729540e56ecc343c26bf314f2d052\n\n# tcId = 27\n# edge cases for ephemeral key\nprivate = 2bc15cf3981eab6102c39f9a925aa1309db59c2c02a54411928d73c3945d157848dc36959efef7495c8528ea284c1c97\npublic = 3076301006072a8648ce3d020106052b81040022036200040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036660041b1c7984620e8d7fd7ccdb50cc3ba816da14d41a4d8affaba8488867f0ca5a24f8d42dd7e44b530a27dc5b58da\nresult = valid\nshared = 35513157e804bd918d04de202778b81a6fc7ad8aa541ee94116a0f18466725d75e71c6942bf044b1b0ecba19db33e0de\n\n# tcId = 28\n# edge cases for ephemeral key\nprivate = 2bc15cf3981eab6102c39f9a925aa1309db59c2c02a54411928d73c3945d157848dc36959efef7495c8528ea284c1c97\npublic = 3076301006072a8648ce3d020106052b81040022036200040000000000000000ffffffffffffffff0000000000000000ffffffffffffffff00000000000000010000000000000001141b9ee5310ea8170131b604484a6d677ed42576045b7143c026710ae92b277afbbea0c4458c220d561e69404dc7d888\nresult = valid\nshared = 102080c047881d19aefb01c29c82a4fb328a8ea6e6d6c914af73100507c8ee499799aaa646de0ea8c2727c0b5ed2439b\n\n# tcId = 29\n# edge cases for ephemeral key\nprivate = 2bc15cf3981eab6102c39f9a925aa1309db59c2c02a54411928d73c3945d157848dc36959efef7495c8528ea284c1c97\npublic = 3076301006072a8648ce3d020106052b810400220362000400000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff70370385413d3eff6fa3407ba24f682c2b01b51445dbdf5ef7b0dd0979f17e713e09081571f1e94dfb66bf282002f39f\nresult = valid\nshared = f689f6e475b4e15162521acab4637a3cdb9cb42aa92f9114b0ee300ddae89d5eafff3463a1f5004a2a1bd4aeffa47b78\n\n# tcId = 30\n# edge cases for ephemeral key\nprivate = 2bc15cf3981eab6102c39f9a925aa1309db59c2c02a54411928d73c3945d157848dc36959efef7495c8528ea284c1c97\npublic = 3076301006072a8648ce3d020106052b81040022036200040000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff112e191f1f78bbc54b6cc4f0b1e59ae8c6ff1a07f5128e41dfa2828e1b6538d4fa2ca2394c6aab3449dcb3fc4eb44c09\nresult = valid\nshared = f3486244119b3632fd55be9e6951eb5d9c8c62f6a27042f94b924155ecfd4ff8744ba3d25bcf85a7b925bd28a12b897f\n\n# tcId = 31\n# edge cases for ephemeral key\nprivate = 2bc15cf3981eab6102c39f9a925aa1309db59c2c02a54411928d73c3945d157848dc36959efef7495c8528ea284c1c97\npublic = 3076301006072a8648ce3d020106052b8104002203620004007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0008000028a4c8da5a05112fe6025ef41908969de20d05d9668e5c852ef2d492172ddc2a0a622fc488164fcc1a076b872942af2\nresult = valid\nshared = 8171b7c80d4c90bb58ae54393921ab9c5",
     "c0b3196f045e9fe5c8b168f0e5f6a77e1aa34ecedc5481ce55ab34c14e0f2e8\n\n# tcId = 32\n# edge cases for ephemeral key\nprivate = 2bc15cf3981eab6102c39f9a925aa1309db59c2c02a54411928d73c3945d157848dc36959efef7495c8528ea284c1c97\npublic = 3076301006072a8648ce3d020106052b81040022036200043b5eed80727bcbc5113b8a9e4db1c81b1dddc2d99ff56d9c3c1054348913bde296311c4bd2fa899b4d0e66aaa1b6a0dd7b7f0f28d55e2f3a50f1f1bef3976834a05b43418e979303bc0363ed16d2d0b4011cc37b3c06ad73154faeab7915cd87\nresult = valid\nshared = 1fe6fea5f00d3005abaae2267ff18e430915838d87909ab503885edf38be7618ecb321f0a4df71b0913fbf12c76fc1f0\n\n# tcId = 33\n# edge cases for ephemeral key\nprivate = 2bc15cf3981eab6102c39f9a925aa1309db59c2c02a54411928d73c3945d157848dc36959efef7495c8528ea284c1c97\npublic = 3076301006072a8648ce3d020106052b81040022036200046a99a5acd4a7edb1c707d7f8be12e81140338e3e14ba563c703c681a319a3f9ce1f90f032bf840f3758e89cb852ceca63cf99ef04f51a5ea630ba3f9f960dd593a14c9be39fd2bd215d3b4b08aaaf86bbf927f2c46e52ab06fb742b8850e521e\nresult = valid\nshared = f58adc13ff997d38383910db7befb17670393a33d95b049c2aa19d760c8e728ecedd32168476b90b26a3742dcc121b07\n\n# tcId = 34\n# edge cases for ephemeral key\nprivate = 2bc15cf3981eab6102c39f9a925aa1309db59c2c02a54411928d73c3945d157848dc36959efef7495c8528ea284c1c97\npublic = 3076301006072a8648ce3d020106052b81040022036200047c25a4f57f76ab13b25cab3c265db9d9bd925fecbf7bf93bef1308778646628decab067ed988a9755cd88e88de367104562ee0c57e71d96cefe31b4c4045bd4086a38e8ab9adf2d5567be318051d70f3aa68b753f271ab032b6abcce919e2962\nresult = valid\nshared = 56299684ec5ceb09ba4d94d1231005a826c9c08a5219c757e0136cbe8b6430badd4925172f2939891da7c7893850512f\n\n# tcId = 35\n# edge cases for ephemeral key\nprivate = 2bc15cf3981eab6102c39f9a925aa1309db59c2c02a54411928d73c3945d157848dc36959efef7495c8528ea284c1c97\npublic = 3076301006072a8648ce3d020106052b81040022036200047fffffe000000ffffffc000001ffffff8000003ffffff0000007fffffe000000ffffffc000001ffffff80000040000024480ab33cb4bf7cb79c024eeade3fd641e2f3003698400e8986a7343a5da59a3b26eea4b4176e53239371437d834a1a7\nresult = valid\nshared = 1911a0ee6aebe263fdcf3db073f2598cdafabec2123a2f24a28c3d9151c871f32d6dc2f31d25af9c498fd68da23e5bef\n\n# tcId = 36\n# edge cases for ephemeral key\nprivate = 2bc15cf3981eab6102c39f9a925aa1309db59c2c02a54411928d73c3945d157848dc36959efef7495c8528ea284c1c97\npublic = 3076301006072a8648ce3d020106052b81040022036200048000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020797da4c0751ced16de80d16ab7c654a5dc27d092626d0865a192a1c5ea7c1b88c9fcab057946741e41cc28c80ec0b9a\nresult = valid\nshared = 15900643e2e0583976974b05f83c7a96611425f7c4a6eb51916ab958a037fd9cc172bdcfff4540a2ff3ce64e6505557e\n\n# tcId = 37\n# edge cases for ephemeral key\nprivate = 2bc15cf3981eab6102c39f9a925aa1309db59c2c02a54411928d73c3945d157848dc36959efef7495c8528ea284c1c97\npublic = 3076301006072a8648ce3d020106052b8104002203620004fff00000001fffffffc00000007fffffff00000001fffffffc00000007fffffff00000001fffffffc00000007fffffff6c70898ae6fb31fa2f086562af2d10486ba4c6fd5e41dfe4aa61598b4707a3bc276a62feb1b98557e3b17c025f7adf4e\nresult = valid\nshared = 88a544a769d5c34a051416bd509dfac911863f604c83ea844bf0e4c5c272dec86d057a88b152a9274701938c705900c3\n\n# tcId = 38\n# edge cases for ephemeral key\nprivate = 2bc15cf3981eab6102c39f9a925aa1309db59c2c02a54411928d73c3945d157848dc36959efef7495c8528ea284c1c97\npublic = 3076301006072a8648ce3d020106052b8104002203620004fffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff00000040000000eb1592858b6e6e3a199c0f3e7c5f0b4a92915936efb8bc0407680eb7274be7422156ce8cfc8b505b2d902c39992380f\nresult = valid\nshared = b7db26b286e7527cb1f454782fe541862ff0f8d7eed960e22855deb7ac2a69611668c777c53bb74c2bcd40edfbf7944d\n\n# tcId = 39\n# edge cases for ephemeral key\nprivate = 2bc15cf3981eab6102c39f9a925aa1309db59c2c02a54411928d73c3945d157848dc36959efef7495c8528ea284c1c97\npublic = 3076301006072a8648ce3d020106052b8104002203620004ffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff4987abae412809c2fa48fd23b1bdf9e622f5a606c44117215ffa61b18ef46e54a7fbbf11f9a6ba59c991b4ae501fedce\nresult = valid\nshared = b1e8aab1aa633d98dc6b768594e1e3edb801a9ef483f287c83e19744d2ad343ad3debdc4dc178213ad6876b52284f552\n\n# tcId = 40\n# edge cases for ephemeral key\nprivate = 2bc15cf3981eab6102c39f9a925aa1309db59c2c02a54411928d73c3945d157848dc36959efef7495c8528ea284c1c97\npublic = 3076301006072a8648ce3d020106052b8104002203620004ffffffffffff00000000000000ffffffffffffff00000000000000ffffffffffffff00000000000001000000000000013691fe493d4d28bf8ee1dfec812d6c306eae0842919eda6dc525f0d49ac2d26a992251912139a2936849f9d6fa949a68\nresult = valid\nshared = b0de006f80f6f89e4eea6e46dfe305153005612d1e903171ec2886230971961b5202a9f3187bdac413ac24c836adf7a0\n\n# tcId = 41\n# edge cases for ephemeral key\nprivate = 2bc15cf3981eab6102c39f9a925aa1309db59c2c02a54411928d73c3945d157848dc36959efef7495c8528ea284c1c97\npublic = 3076301006072a8648ce3d020106052b8104002203620004ffffffffffffffffffffffffffffffff00000000000000000000000000000000ffffffffffffffffffffffffffffffff615842aa06b06f78f0a66f7bea88d4b6ee59653eeaa00dc5e0a2b658f969b71af90c9b4e96bd3ca33846955bdccbd359\nresult = valid\nshared = ca8cfa42c5e374914c14d6402b1a99208e47e02ec49818913694ea0822a2cc6c310259a8f3ab7559b9974bc4c2fa337e\n\n# tcId = 42\n# edge cases for ephemeral key\nprivate = 2bc15cf3981eab6102c39f9a925aa1309db59c2c02a54411928d73c3945d157848dc36959efef7495c8528ea284c1c97\npublic = 3076301006072a8648ce3d020106052b8104002203620004fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffe732152442fb6ee5c3e6ce1d920c059bc623563814d79042b903ce60f1d4487fccd450a86da03f3e6ed525d02017bfdb3\nresult = valid\nshared = edf040bace18d90bf9ce720df2a3b31d76d95b7ed9530a159ac0b24e82a871033eada40552f9e606f7115e6a78927511\n\n# tcId = 43\n# edge cases for ephemeral key\nprivate = 2bc15cf3981eab6102c39f9a925aa1309db59c2c02a54411928d73c3945d157848dc36959efef7495c8528ea284c1c97\npublic = 3076301006072a8648ce3d020106052b8104002203620004000000000000000000000000000000000000000000000000000000001f03123b0000000000000000000000000000000071bd1e700c34075c3cade8ce29d33724af68a7672b265a4e157055360440ab7c461b8e9ac8024e63a8b9c17c00000000\nresult = valid\nshared = ea817dff44f1944a38444498f1b6c1a70a8b913aa326bc2acc5068805d8ddd7a5e41b8ee5b8371a1cf3f7a094258e3a6\n\n# tcId = 44\n# edge cases for ephemeral key\nprivate = 2bc15cf3981eab6102c39f9a925aa1309db59c2c02a54411928d73c3945d157848dc36959efef7495c8528ea284c1c97\npublic = 3076301006072a8648ce3d020106052b8104002203620004000000000000000000000000000000000000000000000000000000001f03123b000000000000000000000000000000008e42e18ff3cbf8a3c3521731d62cc8db50975898d4d9a5b1ea8faac9fbbf5482b9e4716437fdb19c57463e84ffffffff\nresult = valid\nshared = ea817dff44f1944a38444498f1b6c1a70a8b913aa326bc2acc5068805d8ddd7a5e41b8ee5b8371a1cf3f7a094258e3a6\n\n# tcId = 45\n# edge cases for ephemeral key\nprivate = 2bc15cf3981eab6102c39f9a925aa1309db59c2c02a54411928d73c3945d157848dc36959efef7495c8528ea284c1c97\npublic = 3076301006072a8648ce3d020106052b81040022036200040000000000000000000000000000000000000000000000000000000036a2907c00000000000000000000000000000000000000007f57b69a014783dbfa4967b2f9cfa678a6f0b6e9cfd41648cec5b3c498e72152da3f82d3da2e8e9f8ef37b11\nresult = valid\nshared = bfa93e184f76279fd707d53ddcb3628855cfafb111bcbd0b4df6ef77aee624924d681626a153fa4e59c923b71fc090b3\n\n# tcId = 46\n# edge cases for ephemeral key\nprivate = 2bc15cf3981eab6102c39f9a925aa1309db59c2c02a54411928d73c3945d157848dc36959efef7495c8528ea284c1c97\npublic = 3076301006072a8648ce3d020106052b81040022036200040000000000000000000000000000000000000000000000000000000036a2907c00000000000000000000000000000000ffffffff80a84965feb87c2405b6984d06305987590f4916302be9b7313a4c3a6718deac25c07d2c25d17161710c84ee\nresult = valid\nshared = bfa93e184f76279fd707d53ddcb3628855cfafb111bcbd0b4df6ef77aee624924d681626a153fa4e59c923b71fc090b3\n\n# tcId = 47\n# edge case private key\nprivate = 3\npublic = 3076301006072a8648ce3d020106052b8104002203620004e9dfaaab808b3aac1ccca7cc6242a7ee583249afe8ee8f66b904cc8eec34ad334456e00f33a94de8b5169cf0199550c020156e9651734ff999c5f3ea62b83d0083a6093f234457251ecf72c41e4df7cea2420b5454a7f690034380bac981e92e",
@@ -3010,9 +2991,9 @@
     "8f9ff27326a421e05b5bc1bfe3768d5becb9ec797\n# The public key in this test uses an invalid ASN encoding. Some cases where the\n# ASN parser is not strictly checking the ASN format are benign as long as the\n# ECDH computation still returns the correct shared value.\n\n# tcId = 306\n# changing tag value of bit string\nprivate = 4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a\npublic = 3076301006072a8648ce3d020106052b8104002201620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251\nresult = acceptable\nshared = 40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797\n# The public key in this test uses an invalid ASN encoding. Some cases where the\n# ASN parser is not strictly checking the ASN format are benign as long as the\n# ECDH computation still returns the correct shared value.\n\n# tcId = 307\n# changing tag value of bit string\nprivate = 4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a\npublic = 3076301006072a8648ce3d020106052b8104002202620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251\nresult = acceptable\nshared = 40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797\n# The public key in this test uses an invalid ASN encoding. Some cases where the\n# ASN parser is not strictly checking the ASN format are benign as long as the\n# ECDH computation still returns the correct shared value.\n\n# tcId = 308\n# changing tag value of bit string\nprivate = 4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a\npublic = 3076301006072a8648ce3d020106052b8104002204620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251\nresult = acceptable\nshared = 40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797\n# The public key in this test uses an invalid ASN encoding. Some cases where the\n# ASN parser is not strictly checking the ASN format are benign as long as the\n# ECDH computation still returns the correct shared value.\n\n# tcId = 309\n# changing tag value of bit string\nprivate = 4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a\npublic = 3076301006072a8648ce3d020106052b8104002205620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251\nresult = acceptable\nshared = 40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797\n# The public key in this test uses an invalid ASN encoding. Some cases where the\n# ASN parser is not strictly checking the ASN format are benign as long as the\n# ECDH computation still returns the correct shared value.\n\n# tcId = 310\n# changing tag value of bit string\nprivate = 4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a\npublic = 3076301006072a8648ce3d020106052b81040022ff620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251\nresult = acceptable\nshared = 40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797\n# The public key in this test uses an invalid ASN encoding. Some cases where the\n# ASN parser is not strictly checking the ASN format are benign as long as the\n# ECDH computation still returns the correct shared value.\n\n# tcId = 311\n# dropping value of bit string\nprivate = 4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a\npublic = 3014301006072a8648ce3d020106052b810400220300\nresult = acceptable\nshared = 40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797\n# The public key in this test uses an invalid ASN encoding. Some cases where the\n# ASN parser is not strictly checking the ASN format are benign as long as the\n# ECDH computation still returns the correct shared value.\n\n# tcId = 312\n# modify first byte of bit string\nprivate = 4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a\npublic = 3076301006072a8648ce3d020106052b8104002203620204c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251\nresult = acceptable\nshared = 40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797\n# The public key in this test uses an invalid ASN encoding. Some cases where the\n# ASN parser is not strictly checking the ASN format are benign as long as the\n# ECDH computation still returns the correct shared value.\n\n# tcId = 313\n# modify last byte of bit string\nprivate = 4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a\npublic = 3076301006072a8648ce3d020106052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed0312d1\nresult = acceptable\nshared = 40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797\n# The public key in this test uses an invalid ASN encoding. Some cases where the\n# ASN parser is not strictly checking the ASN format are benign as long as the\n# ECDH computation still returns the correct shared value.\n\n# tcId = 314\n# truncate bit string\nprivate = 4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a\npublic = 3075301006072a8648ce3d020106052b8104002203610004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed0312\nresult = acceptable\nshared = 40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797\n# The public key in this test uses an invalid ASN encoding. Some cases where the\n# ASN parser is not strictly checking the ASN format are benign as long as the\n# ECDH computation still returns the correct shared value.\n\n# tcId = 315\n# truncate bit string\nprivate = 4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a\npublic = 3075301006072a8648ce3d020106052b81040022036104c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251\nresult = acceptable\nshared = 40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797\n# The public key in this test uses an invalid ASN encoding. Some cases where the\n# ASN parser is not strictly checking the ASN format are benign as long as the\n# ECDH computation still returns the correct shared value.\n\n# tcId = 316\n# declaring bits as unused in a bit-string\nprivate = 4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a\npublic = 3076301006072a8648ce3d020106052b8104002203620104c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251\nresult = acceptable\nshared = 40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797\n# The public key in this test uses an invalid ASN encoding. Some cases where the\n# ASN parser is not strictly chec",
     "king the ASN format are benign as long as the\n# ECDH computation still returns the correct shared value.\n\n# tcId = 317\n# unused bits in a bit-string\nprivate = 4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a\npublic = 307a301006072a8648ce3d020106052b8104002203662004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed03125101020304\nresult = acceptable\nshared = 40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797\n# The public key in this test uses an invalid ASN encoding. Some cases where the\n# ASN parser is not strictly checking the ASN format are benign as long as the\n# ECDH computation still returns the correct shared value.\n\n# tcId = 318\n# unused bits in empty bit-string\nprivate = 4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a\npublic = 3015301006072a8648ce3d020106052b81040022030103\nresult = acceptable\nshared = 40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797\n# The public key in this test uses an invalid ASN encoding. Some cases where the\n# ASN parser is not strictly checking the ASN format are benign as long as the\n# ECDH computation still returns the correct shared value.\n\n# tcId = 319\n# 128 unused bits\nprivate = 4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a\npublic = 3076301006072a8648ce3d020106052b8104002203628004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251\nresult = acceptable\nshared = 40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797\n# The public key in this test uses an invalid ASN encoding. Some cases where the\n# ASN parser is not strictly checking the ASN format are benign as long as the\n# ECDH computation still returns the correct shared value.\n\n",
 };
-static const size_t kLen65 = 277731;
+static const size_t kLen64 = 277731;
 
-static const char *kData65[] = {
+static const char *kData64[] = {
     "# Imported from Wycheproof's ecdh_secp521r1_test.json.\n# This file is generated by convert_wycheproof.go. Do not edit by hand.\n#\n# Algorithm: ECDH\n# Generator version: 0.4.12\n\n[curve = secp521r1]\n[encoding = asn]\n\n# tcId = 1\n# normal case\nprivate = 1939982b529596ce77a94bc6efd03e92c21a849eb4f87b8f619d506efc9bb22e7c61640c90d598f795b64566dc6df43992ae34a1341d458574440a7371f611c7dcd\npublic = 30819b301006072a8648ce3d020106052b8104002303818600040064da3e94733db536a74a0d8a5cb2265a31c54a1da6529a198377fbd38575d9d79769ca2bdf2d4c972642926d444891a652e7f492337251adf1613cf3077999b5ce00e04ad19cf9fd4722b0c824c069f70c3c0e7ebc5288940dfa92422152ae4a4f79183ced375afb54db1409ddf338b85bb6dbfc5950163346bb63a90a70c5aba098f7\nresult = valid\nshared = 01f1e410f2c6262bce6879a3f46dfb7dd11d30eeee9ab49852102e1892201dd10f27266c2cf7cbccc7f6885099043dad80ff57f0df96acf283fb090de53df95f7d87\n\n# tcId = 2\n# compressed public key\nprivate = 1939982b529596ce77a94bc6efd03e92c21a849eb4f87b8f619d506efc9bb22e7c61640c90d598f795b64566dc6df43992ae34a1341d458574440a7371f611c7dcd\npublic = 3058301006072a8648ce3d020106052b81040023034400030064da3e94733db536a74a0d8a5cb2265a31c54a1da6529a198377fbd38575d9d79769ca2bdf2d4c972642926d444891a652e7f492337251adf1613cf3077999b5ce\nresult = acceptable\nshared = 01f1e410f2c6262bce6879a3f46dfb7dd11d30eeee9ab49852102e1892201dd10f27266c2cf7cbccc7f6885099043dad80ff57f0df96acf283fb090de53df95f7d87\n# The point in the public key is compressed. Not every library supports points\n# in compressed format.\n\n# tcId = 3\n# edge case for shared secret\nprivate = 0a2b6442a37f8a3759d2cb91df5eca75af6b89e27baf2f6cbf971dee5058ffa9d8dac805c7bc72f3718489d6a9cb2787af8c93a17ddeb1a19211ab23604d47b7646\npublic = 30819b301006072a8648ce3d020106052b810400230381860004014c643329691ba27459a40dfe7c4ce17b3ea14d0cd7aa47b01f1315404db51436fbbfe6de0842e0f7e1265f6ff3aca28750677d3370b2fb2a6ef497356f4b95811201051b14178639a09a41465c72d3743436ee1c191ff7388a40140b34d5317de5911ea03cdbb0329fdeb446695a3b92d437271a9f3c318b02dec4d473908158140e97\nresult = valid\nshared = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\n\n# tcId = 4\n# edge case for shared secret\nprivate = 0a2b6442a37f8a3759d2cb91df5eca75af6b89e27baf2f6cbf971dee5058ffa9d8dac805c7bc72f3718489d6a9cb2787af8c93a17ddeb1a19211ab23604d47b7646\npublic = 30819b301006072a8648ce3d020106052b8104002303818600040029cd32125c23a41af24fd4b729da0faacbc35516ef0ba59096602571693cd282e26d67e18ef4643d0f6f158d7370d3394ca9a8de7938032ac178c6fd34e3702b8d008649834e2b41be3a8b7510bfe570f4c67075943cd0cbb9d9e1d1da52618b5b96d6aec9b650daf1ca6624c13e5116302b9c79c8c4d3d351915d1e8e1ab6ad76098e\nresult = valid\nshared = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001\n\n# tcId = 5\n# edge case for shared secret\nprivate = 0a2b6442a37f8a3759d2cb91df5eca75af6b89e27baf2f6cbf971dee5058ffa9d8dac805c7bc72f3718489d6a9cb2787af8c93a17ddeb1a19211ab23604d47b7646\npublic = 30819b301006072a8648ce3d020106052b8104002303818600040032c6f06ce6a15ea064464d35aa368d299c9a9e1e368f694aefb603876248f898f223ce0217bef37d61eb09b27c93187cf8e61ba7b14e3c9bee692b06ac6d95f836019fd19f8480e21c63211d48d45f96f6365cf55f958e1a0fe7ea6b6b9ff230a87b70bb1b14d3a5fb6669a91641c6acf4570c1d3a9e709913b7fe6b35ff81c394d6a7\nresult = valid\nshared = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002\n\n# tcId = 6\n# edge case for shared secret\nprivate = 0a2b6442a37f8a3759d2cb91df5eca75af6b89e27baf2f6cbf971dee5058ffa9d8dac805c7bc72f3718489d6a9cb2787af8c93a17ddeb1a19211ab23604d47b7646\npublic = 30819b301006072a8648ce3d020106052b81040023038186000401f7eb96e64b1a62daf9e0801bfd96a0b15b68e5f5cb3e90b434495a473907338e53098e1c2e493335d09c6aae6fdda0345b98aaed588f2abe82910713fb6c20252901396b17cf250bc018f4cead097e7e09863f14cf1239b065e57d884949eee141926f7e7c9f7f34cf0536368767bc0e1ab5142877293a4c722693a73fe14a5390af93\nresult = valid\nshared = 000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000\n\n# tcId = 7\n# edge case for shared secret\nprivate = 0a2b6442a37f8a3759d2cb91df5eca75af6b89e27baf2f6cbf971dee5058ffa9d8dac805c7bc72f3718489d6a9cb2787af8c93a17ddeb1a19211ab23604d47b7646\npublic = 30819b301006072a8648ce3d020106052b810400230381860004006ddf9b10965d5fc129e96f7a37667ccf66cc44384772906fedb21f9de4629e01aaa09ac7c9866112064bbc9bd58ebc123ab2fe19d8fed1a056d27bfef0630509c7001c441311ef20a16346332ea42d5c65788d68f6817b0267fcab11ea9c948ed108115dda8e823a380b601460742d3772d6424c67b240da24772ff0d2ccd9a1e0cea6\nresult = valid\nshared = 000000ffffffffffffff00000000000000ffffffffffffff00000000000000ffffffffffffff00000000000000ffffffffffffff0000000000000100000000000000\n\n# tcId = 8\n# edge case for shared secret\nprivate = 0a2b6442a37f8a3759d2cb91df5eca75af6b89e27baf2f6cbf971dee5058ffa9d8dac805c7bc72f3718489d6a9cb2787af8c93a17ddeb1a19211ab23604d47b7646\npublic = 30819b301006072a8648ce3d020106052b810400230381860004007a8c547268c948b626da636cf54428ea2ab23861d499a84ad7be1cf691b92872a06e26c6dba08ca9ed386f83d396156d5fa023f57d5ea6440ec7401dad2c08ad70018c3815b1b9a2e42555419a6c19043fa2b0ddcc4b5a6e372fee9fcb227d85bad704687e7e1a818b612d5c046cd75972f7a2dd5c9a200ac5582cd59fec47ac525ecf\nresult = valid\nshared = 00003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff\n\n# tcId = 9\n# edge case for shared secret\nprivate = 0a2b6442a37f8a3759d2cb91df5eca75af6b89e27baf2f6cbf971dee5058ffa9d8dac805c7bc72f3718489d6a9cb2787af8c93a17ddeb1a19211ab23604d47b7646\npublic = 30819b301006072a8648ce3d020106052b8104002303818600040029153cf062f88f303e5d6f9aac968bd901076d5994ea7f831833b1e69b67e9e9fe20cf9c5623e00e0b9e3592fca2a03324b5df7c93186aff697aca864600d44ecc002801a62e2f4106f34106da23dc93d50e3e975a1d47510021835290649b7a4125109f656b6b0b5bd00b24d84ea1ba4e1ed49e61c526fb1011005131caee7ee0501e\nresult = valid\nshared = 010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\n\n# tcId = 10\n# edge case for shared secret\nprivate = 0a2b6442a37f8a3759d2cb91df5eca75af6b89e27baf2f6cbf971dee5058ffa9d8dac805c7bc72f3718489d6a9cb2787af8c93a17ddeb1a19211ab23604d47b7646\npublic = 30819b301006072a8648ce3d020106052b81040023038186000400a61eb994e28722c59b3c6007dfdf8b37893f6350f461b26a00e1a45104314aae9989da87e4facb2c4ef721185b7d96d9a45a28a102756501a1acc5d329a21bbf73010e8d0e12f5a9a40e0d59c90ce73043d39730aeadd3788e31d7c2bb62a1166161994664afa658ce2e60a13f45f27f914307c8d6f8d4ed16ab041b8f69908a62782f\nresult = valid\nshared = 010000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff\n\n# tcId = 11\n# edge case for shared secret\nprivate = 0a2b6442a37f8a3759d2cb91df5eca75af6b89e27baf2f6cbf971dee5058ffa9d8dac805c7bc72f3718489d6a9cb2787af8c93a17ddeb1a19211ab23604d47b7646\npublic = 30819b301006072a8648ce3d020106052b810400230381860004011dd497b30c73709906b164a9a79dc7f2a98c0148ed63016bb95243834fbcdf8eb74b0ff652d54f59f31aef51da6e8974d363655b1da138dc4de0f2a8d800f475ae0057bd4b84607400d863ffbf45a3cf58999ee24ba05e93eca7b0e4ae760eb1733559a45d15579d3370d716ffa3ec4bfdae418e32fb06138dfca213720a938577610e\nresult = valid\nshared = 01ff00000000000000000000000000000000ffffffffffffffffffffffffffffffff0000000000000000000000000000000100000000000000000000000000000000\n\n# tcId = 12\n# edge case for shared secret\nprivate = 0a2b6442a37f8a3759d2cb91df5eca75af6b89e27baf2f6cbf971dee5058ffa9d8dac805c7bc72f3718489d6a9cb2787af8c93a17ddeb1a19211ab23604d47b7646\npublic = 30819b301006072a8648ce3d020106052b81040023038186000401283eb93fa369fe7012b647d21e0a97cf9950e5fbed819ef56158f20c8a9473a418eccbca4dc2b47f4cb6d322f917005859bf221e84ac9827cab82a801c627fb1ec0075c480cbafb352fcaf93baf23a1405fd81febe09729a908d1077e177dd8993d94b251a0d52652da3edb6fdf864e80cd51540e73d0b5107e3433576dcaa4e18db43\nresult = valid\nshared = 01ff0000000000000000ffffffffffffffff0000000000000000ffffffffffffffff0000000000000000ffffffffffffffff0000000000000000ffffffffffffffff\n\n# tcId = 13\n# edge ca",
     "se for shared secret\nprivate = 0a2b6442a37f8a3759d2cb91df5eca75af6b89e27baf2f6cbf971dee5058ffa9d8dac805c7bc72f3718489d6a9cb2787af8c93a17ddeb1a19211ab23604d47b7646\npublic = 30819b301006072a8648ce3d020106052b81040023038186000400173beefe35ee868d497ff6601628f65ce18a1591f7e4a3a406622f3f508e2da68f101ed02febc38418c6ddfc26a5ec9848c42792463b1e945f9e167db34bdf2d660053070647aba7cd60eb295ab81a268a3903f393c5d28bbc5e022351c377cd84f02c19deb36442372cae1332e92f95ba60b6c852e0de0718e89d24e43cd479c9fb11\nresult = valid\nshared = 01ff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff\n\n# tcId = 14\n# edge case for shared secret\nprivate = 0a2b6442a37f8a3759d2cb91df5eca75af6b89e27baf2f6cbf971dee5058ffa9d8dac805c7bc72f3718489d6a9cb2787af8c93a17ddeb1a19211ab23604d47b7646\npublic = 30819b301006072a8648ce3d020106052b810400230381860004009829cd5432687739ab6ae10af8ea73d2cb53b81ebb06b5961b7badc1676b3ef7b00454f7cde56774a01312d574a9193c1a5fe5336fbe62623ad9bf81143789f9f90012f955697ed578207197bf9aac3896521615dbacc8dc665d4f1715b08439f49c2aa6ed337023ffccc5075a85944936826db92f919737ca3afeadba1847084bdef7\nresult = valid\nshared = 01ff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff00010000\n\n# tcId = 15\n# edge case for shared secret\nprivate = 0a2b6442a37f8a3759d2cb91df5eca75af6b89e27baf2f6cbf971dee5058ffa9d8dac805c7bc72f3718489d6a9cb2787af8c93a17ddeb1a19211ab23604d47b7646\npublic = 30819b301006072a8648ce3d020106052b8104002303818600040126e3c959cd41120bb83693b1d6a034b385137c1bb3213b776122fed96056e329885718a73bee639c0ba4b68818682f498ce5496925002bd7652516405fcc4fecad0073a9c6e3b0c694bf7cc8ccbbd09800e81e3548ba44a0c2381cef0b07bf702a19054bb5d717a1b79294609cbdafd4e2018064f7b2c4c204d818eb7ce521c3268ce5\nresult = valid\nshared = 01ffc000001ffffff8000003ffffff0000007fffffe000000ffffffc000001ffffff8000003ffffff0000007fffffe000000ffffffc000001ffffff8000004000001\n\n# tcId = 16\n# edge case for shared secret\nprivate = 0a2b6442a37f8a3759d2cb91df5eca75af6b89e27baf2f6cbf971dee5058ffa9d8dac805c7bc72f3718489d6a9cb2787af8c93a17ddeb1a19211ab23604d47b7646\npublic = 30819b301006072a8648ce3d020106052b8104002303818600040153dc481ab3c5dc8decd24ceaee1bec77f59f21f7f31c19538af047d281ac9e2567933fd3d21096b185d4098919571931bb9b0be7197995e2fbaf21c8a10007ade001ad69f08fcae164390be826256b50fae47502ce0e9ca46af0c490cb4033c886f88661a99ff2bd3c9c8e7da30faf2b4c769edc5831810ac05054c97e41063f496e1f\nresult = valid\nshared = 01ffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff\n\n# tcId = 17\n# edge case for shared secret\nprivate = 0a2b6442a37f8a3759d2cb91df5eca75af6b89e27baf2f6cbf971dee5058ffa9d8dac805c7bc72f3718489d6a9cb2787af8c93a17ddeb1a19211ab23604d47b7646\npublic = 30819b301006072a8648ce3d020106052b81040023038186000401f586611c87150288c3e86116c5db94a26718978829d701ddac05e9b0ce22dee4b18e95f60cba783ed3384da373deaefc57b8265d3a34eeb458bf24b9d82be32819008456e0f1d80492ef0078cc246d32fc7c7fb6720b4d458b51b2098d35746752b0ef0345bd0d342dfee6dd2f12ed12b34bd95d058c2811fd479d2dde32180e6c9ef2\nresult = valid\nshared = 01ffffff00000001fffffffc00000007fffffff00000001fffffffc00000007fffffff00000001fffffffc00000007fffffff00000001fffffffc000000080000002\n\n# tcId = 18\n# edge case for shared secret\nprivate = 0a2b6442a37f8a3759d2cb91df5eca75af6b89e27baf2f6cbf971dee5058ffa9d8dac805c7bc72f3718489d6a9cb2787af8c93a17ddeb1a19211ab23604d47b7646\npublic = 30819b301006072a8648ce3d020106052b810400230381860004015edc87fd499a73eabffd14d2b6a70a8fb69b6a39d0d9c4dda2337b53cc72e49a9e3d5a2d9e8930cfa11852dac33443227fba6684bd74732e6879884b6ef9dae98f010eeb8d2e3360ea9726628085268af3f2a05ad41235d0a892098bd661b636f7ef0a820282906eda3f1ff1980b98fb5937228e9edcd6332e3641216c7307e7f3f452\nresult = valid\nshared = 01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd\n\n# tcId = 19\n# edge case for shared secret\nprivate = 0a2b6442a37f8a3759d2cb91df5eca75af6b89e27baf2f6cbf971dee5058ffa9d8dac805c7bc72f3718489d6a9cb2787af8c93a17ddeb1a19211ab23604d47b7646\npublic = 30819b301006072a8648ce3d020106052b8104002303818600040131b43002f7e687eec1ecf6a253c2ccc9e48f04d86fccd18fee0d2d22191f1ea539c40d521970b4709dc03986f647e0e8bb3340cf8a3e643a3541035437cf25f01500b27a55ac45f0296f8c9656bcfd52b5cea9f4115c06e4c64319609847d45e92418400e7868672c0d3e6e5e6e004a7190476ed77cfc33ad19a4bd2c615ad9950f374\nresult = valid\nshared = 01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe\n\n# tcId = 20\n# edge cases for ephemeral key\nprivate = 12bc15cf3981eab6102c39f9a925aa130763d01ed6edaf14306eb0a14dd75dff504070def7b88d8b165082f69992de0ffa5ee922cb3ab39917da8524cac73f0a09c\npublic = 30819b301006072a8648ce3d020106052b81040023038186000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d20ec9fea6b577c10d26ca1bb446f40b299e648b1ad508aad068896fee3f8e614bc63054d5772bf01a65d412e0bcaa8e965d2f5d332d7f39f846d440ae001f4f87\nresult = valid\nshared = 0053bf137fee8922769f8d0fe279caa4dac9c6054ad0460995588a845d0a959e24bc0fc2391a2b92f7bd400f50a11a9db37f07bef7fa8dad2a903fcf534abc8736f7\n\n# tcId = 21\n# edge cases for ephemeral key\nprivate = 12bc15cf3981eab6102c39f9a925aa130763d01ed6edaf14306eb0a14dd75dff504070def7b88d8b165082f69992de0ffa5ee922cb3ab39917da8524cac73f0a09c\npublic = 30819b301006072a8648ce3d020106052b8104002303818600040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010010e59be93c4f269c0269c79e2afd65d6aeaa9b701eacc194fb3ee03df47849bf550ec636ebee0ddd4a16f1cd9406605af38f584567770e3f272d688c832e843564\nresult = valid\nshared = 01c95ac417c90a520149b29105cdab36f528a23efb5621520dbdafea95a7d43499c4c8be02cd1c2de000da18104fa84a1e9ece6386f0e0efa5234a24595d7c4c96f4\n\n# tcId = 22\n# edge cases for ephemeral key\nprivate = 12bc15cf3981eab6102c39f9a925aa130763d01ed6edaf14306eb0a14dd75dff504070def7b88d8b165082f69992de0ffa5ee922cb3ab39917da8524cac73f0a09c\npublic = 30819b301006072a8648ce3d020106052b81040023038186000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200d9254fdf800496acb33790b103c5ee9fac12832fe546c632225b0f7fce3da4574b1a879b623d722fa8fc34d5fc2a8731aad691a9a8bb8b554c95a051d6aa505acf\nresult = valid\nshared = 01b47ec41e3a5abd9dd9808fc04d9078cbed72b9eba98d3c1ded70a29938f0efd5a27a7113ff721f122cb17411de307a355c685074f5766b6d1a033d2fa188c945b6\n\n# tcId = 23\n# edge cases for ephemeral key\nprivate = 12bc15cf3981eab6102c39f9a925aa130763d01ed6edaf14306eb0a14dd75dff504070def7b88d8b165082f69992de0ffa5ee922cb3ab39917da8524cac73f0a09c\npublic = 30819b301006072a8648ce3d020106052b810400230381860004000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000005f880f50ec94bfac6658fa2fce05945c6a36b266407b6fbd5437a83e2f2f9b9c50a734872e48e70df65457f13e47d06c6b8b29f4735acf105ea63e051904d18aea\nresult = valid\nshared = 013aefe3245728a08c904fe7d61cd9c2fdac63f29cf664d8f161bebacb93f8a710e9692f9689480ad498de00f00061e40e46e76e4754c1130ef4217a58933e0b1dc6\n\n# tcId = 24\n# edge cases for ephemeral key\nprivate = 12bc15cf3981eab6102c39f9a925aa130763d01ed6edaf14306eb0a14dd75dff504070def7b88d8b165082f69992de0ffa5ee922cb3ab39917da8524cac73f0a09c\npublic = 30819b301006072a8648ce3d020106052b810400230381860004000000ffffffffffffff00000000000000ffffffffffffff00000000000000ffffffffffffff00000000000000ffffffffffffff000000000000010000000000000000f33ffc45da3eac1baab727ab8fd355cfa134c42047d55262651654fb50df7e9a5a75f179c8c86c4388213b5687dc43dfebb37f30128703c44ccd5c3284833b8717\nresult = valid\nshared = 0168df272d53e3161926168c4aeab5f355b8d2a6689cfd567f2b6eb2011a18c775ac2a21f8dd497f6957217020b3b1afcb7021f24fccc2523be76a2bff44596e5a14\n\n# tcId = 25\n# edge cases for ephemeral key\nprivate = 12bc15cf3981eab6102c39f9a925aa130763d01ed6edaf14306eb0a14dd75dff504070def7b88d8b165082f69992de0ffa5ee922cb3ab39917da8524cac73f0a09c\npublic ",
     "= 30819b301006072a8648ce3d020106052b81040023038186000400003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00cd2839d857b4699f5c8e8a0194786e26a862f086b4ba80746ae5225ed3aa68f96b7aaec55225830bb98f52d75221141897ba49d7a31ebbf0b6d7d31352e5266190\nresult = valid\nshared = 013db1b9241b23d33860d32dec37a79e4546a41afdfdd9c438d04e1f8b566ac8d9d3f572c293e96943722a4ee290e113fffaa82a61867d9ca28d349982354c9b256f\n\n# tcId = 26\n# edge cases for ephemeral key\nprivate = 12bc15cf3981eab6102c39f9a925aa130763d01ed6edaf14306eb0a14dd75dff504070def7b88d8b165082f69992de0ffa5ee922cb3ab39917da8524cac73f0a09c\npublic = 30819b301006072a8648ce3d020106052b810400230381860004010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000813d9829119f42ffa95fea8ba9e81e4cd6a6ca97fb0778e12e5f5dfe35201dd4cca8eca0d2e395555997041381e6ac1f18ddf4c74e0b6e9041cfdca1d1c103091\nresult = valid\nshared = 01d2bbe9f754584ebbc7c7ad74136d1c8a144948948aa8be49989dd9b4c514db2e2ab1e0713ad1699f632dd2cea53da218ed549f030a113e282fd9e3be462d9aba84\n\n# tcId = 27\n# edge cases for ephemeral key\nprivate = 12bc15cf3981eab6102c39f9a925aa130763d01ed6edaf14306eb0a14dd75dff504070def7b88d8b165082f69992de0ffa5ee922cb3ab39917da8524cac73f0a09c\npublic = 30819b301006072a8648ce3d020106052b810400230381860004010000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff00878ad597d290db2cf660594aeed0f9b7c8dd68451d2d1b2cbc816b1ec4f35465b3964aff2edf1255163f5fca580132f85cade2887a017e7cd0b37196ad85221107\nresult = valid\nshared = 000f37a2e2caef54fff4126c0fa96e7c47f0cad74626ef91e589e12d2e1e8c221be7295be9dc2712b87bb0aa0f5880b738bc1242f2ba773bf9eb2a54e3c1ca4758d7\n\n# tcId = 28\n# edge cases for ephemeral key\nprivate = 12bc15cf3981eab6102c39f9a925aa130763d01ed6edaf14306eb0a14dd75dff504070def7b88d8b165082f69992de0ffa5ee922cb3ab39917da8524cac73f0a09c\npublic = 30819b301006072a8648ce3d020106052b81040023038186000401ff00000000000000000000000000000000ffffffffffffffffffffffffffffffff000000000000000000000000000000010000000000000000000000000000000000b5e1191b449fa1ebdbd677daa48f90e2d1d6c058c877087cafd9364d99dbb283c68402e6e6c5f5411b2ed42824d8b280ceb910aba6847883a7e3780e2132af41c1\nresult = valid\nshared = 017aeb254d9c8c8ee06215ff33811357da73bf7f6dd6d7f8f176d62c065a88a9005f680c630e9f2763585ea2ee76b6e4ab45e673f814ebfa95947c0c63fb24fa6e9b\n\n# tcId = 29\n# edge cases for ephemeral key\nprivate = 12bc15cf3981eab6102c39f9a925aa130763d01ed6edaf14306eb0a14dd75dff504070def7b88d8b165082f69992de0ffa5ee922cb3ab39917da8524cac73f0a09c\npublic = 30819b301006072a8648ce3d020106052b81040023038186000401ff0000000000000000ffffffffffffffff0000000000000000ffffffffffffffff0000000000000000ffffffffffffffff0000000000000000ffffffffffffffff00207513d615656a1cc7505c18aa21b08e2b1d5a841de0816cc29c004efdb2d902ac1a7bb05e20722b576b64a3ddf4d2486421ac706bf4a424f252386368a5340fb6\nresult = valid\nshared = 0061bed42248a37b4625ef04c4f9c7ef69ee3c6f9503378351fcab1b8ce1343206997eec1b88449eb6f7355711ea1a818a486ee30a24126241a7e2289267cf5dd61f\n\n# tcId = 30\n# edge cases for ephemeral key\nprivate = 12bc15cf3981eab6102c39f9a925aa130763d01ed6edaf14306eb0a14dd75dff504070def7b88d8b165082f69992de0ffa5ee922cb3ab39917da8524cac73f0a09c\npublic = 30819b301006072a8648ce3d020106052b81040023038186000401ff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff001fe800c50e54012b75a33e4be7d07c8d60f29680a395e951a6a31c5096b0ea928fc2cbf327dd784dc0a7ca46ea73992b758b5641364b4aba39e93798a4d925a008\nresult = valid\nshared = 001067d9104e296ef42b944587de11b10df05d2d959ed44cac9e7ef1c7a05d90819c43bc79c7397918f957cc98db931763bbeb1bdfc35865e8a359a013f13d60c433\n\n# tcId = 31\n# edge cases for ephemeral key\nprivate = 12bc15cf3981eab6102c39f9a925aa130763d01ed6edaf14306eb0a14dd75dff504070def7b88d8b165082f69992de0ffa5ee922cb3ab39917da8524cac73f0a09c\npublic = 30819b301006072a8648ce3d020106052b81040023038186000401ff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff00010000008dd18a1f5e482140be79bb65a21ad60c8987e532c84345f0135affd46ec71ef02b1ca3ad56f301d955fa306c122d441d6fedcf8b855ef256350bf69d23a7207ad9\nresult = valid\nshared = 00b779d83035cf7bb0bb04c7b2f46d08f6791f0d1542c9bcce7250e772b12ad8e38fce1d2b063a06f0fa3a1b072dd976f5f8542979903075162f1f5c6ba3b76cc45d\n\n# tcId = 32\n# edge cases for ephemeral key\nprivate = 12bc15cf3981eab6102c39f9a925aa130763d01ed6edaf14306eb0a14dd75dff504070def7b88d8b165082f69992de0ffa5ee922cb3ab39917da8524cac73f0a09c\npublic = 30819b301006072a8648ce3d020106052b81040023038186000401ffc000001ffffff8000003ffffff0000007fffffe000000ffffffc000001ffffff8000003ffffff0000007fffffe000000ffffffc000001ffffff800000400000100566203dd325a081c4441f001f780365874fd3d0c9bc47227481afe76a93ae1bfde63af972203abfe22c63b80e83f7cc2184c3cb8cfd0152c54324c4759fd1f9a50\nresult = valid\nshared = 01afe5d23733728b79c743933b9ba7dfec5ed19b7737e393908a1d000918aa795d1ce0ad533983d018f927b35d2af6463356573f387febd75911a49486202ca69d3a\n\n# tcId = 33\n# edge cases for ephemeral key\nprivate = 12bc15cf3981eab6102c39f9a925aa130763d01ed6edaf14306eb0a14dd75dff504070def7b88d8b165082f69992de0ffa5ee922cb3ab39917da8524cac73f0a09c\npublic = 30819b301006072a8648ce3d020106052b81040023038186000401ffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff00b11c668fbd549f36889f7b63434051da26f15705839136b1b14a09152d7a182ea7806c35478a32d3aa3c9c1627a61519ebec71b36fa77449025b8829e27f307834\nresult = valid\nshared = 019612aeb386febb1a28096fe5b2f682dead02389785225b80a27df439510d08349a193839525f248b7f9bcabfd3dc8da8cc1724022299b7b5e72399d89464b82e44\n\n# tcId = 34\n# edge cases for ephemeral key\nprivate = 12bc15cf3981eab6102c39f9a925aa130763d01ed6edaf14306eb0a14dd75dff504070def7b88d8b165082f69992de0ffa5ee922cb3ab39917da8524cac73f0a09c\npublic = 30819b301006072a8648ce3d020106052b81040023038186000401ffffff00000001fffffffc00000007fffffff00000001fffffffc00000007fffffff00000001fffffffc00000007fffffff00000001fffffffc00000008000000200aa75efc0a8daac1d73f32c9c552414bccf44af8e74331b47439e7dcc49a135b3ee61e9f69717d89b4bba3567a195aeda13fbec634bf2984b5ec6b6f80f5978ed5a\nresult = valid\nshared = 00570673f87adcef49c1f011e8b9f1e11f7fd3b3c93114d08d3f515aa4a895a6c701c523063bdc13ad1db0a54f6e7b476fe10db2070441befc58c8cff3c08ef76e59\n\n# tcId = 35\n# edge cases for ephemeral key\nprivate = 12bc15cf3981eab6102c39f9a925aa130763d01ed6edaf14306eb0a14dd75dff504070def7b88d8b165082f69992de0ffa5ee922cb3ab39917da8524cac73f0a09c\npublic = 30819b301006072a8648ce3d020106052b81040023038186000401fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd0010e59be93c4f269c0269c79e2afd65d6aeaa9b701eacc194fb3ee03df47849bf550ec636ebee0ddd4a16f1cd9406605af38f584567770e3f272d688c832e843564\nresult = valid\nshared = 0016aaf228b0aec190d4e4e5b8138ff9cc46d705da1bf002901c6ab420f59314d5b641712b14ef3e4fb125652c47888676804fb5575b741a8408c5625bfccff4fdda\n\n# tcId = 36\n# edge cases for ephemeral key\nprivate = 12bc15cf3981eab6102c39f9a925aa130763d01ed6edaf14306eb0a14dd75dff504070def7b88d8b165082f69992de0ffa5ee922cb3ab39917da8524cac73f0a09c\npublic = 30819b301006072a8648ce3d020106052b81040023038186000401fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00d9254fdf800496acb33790b103c5ee9fac12832fe546c632225b0f7fce3da4574b1a879b623d722fa8fc34d5fc2a8731aad691a9a8bb8b554c95a051d6aa505acf\nresult = valid\nshared = 00a5d6dfda2b269f4ab895a41c3b71b6ba10d5c9f0d9b3e730275345e4721594abfd39464c227716ded8ef3e60bb1ca0b551716e3f6eebb48d5ce8e0ab58cb1b73c9\n\n# tcId = 37\n# edge case private key\nprivate = 3\npublic = 30819b301006072a8648ce3d020106052b81040023038186000401ad5043591dbe81657fe3d1c3d7a516606ad9d320a35fce8aaec8a950fb53f95388f3fc48be998e99334ad9e9234cded14471fe86caccaa07d058ee8771733ac3b900854de36366590b9ee4d0370ea6b00f7ebd8156ccf14e99f1a5344a9b4964fbb8348b081a8840c6b64be77997ad8bebfea5e7d9f7a6a7fa6d7",
@@ -3048,9 +3029,9 @@
     "007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d500000\nresult = acceptable\nshared = 00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5\n# The public key in this test uses an invalid ASN encoding. Some cases where the\n# ASN parser is not strictly checking the ASN format are benign as long as the\n# ECDH computation still returns the correct shared value.\n\n# tcId = 304\n# prepending 0's to bit string\nprivate = 18c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5\npublic = 30819d301006072a8648ce3d020106052b8104002303818800000004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50\nresult = acceptable\nshared = 00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5\n# The public key in this test uses an invalid ASN encoding. Some cases where the\n# ASN parser is not strictly checking the ASN format are benign as long as the\n# ECDH computation still returns the correct shared value.\n\n# tcId = 305\n# appending null value to bit string\nprivate = 18c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5\npublic = 30819d301006072a8648ce3d020106052b810400230381880004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d500500\nresult = acceptable\nshared = 00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5\n# The public key in this test uses an invalid ASN encoding. Some cases where the\n# ASN parser is not strictly checking the ASN format are benign as long as the\n# ECDH computation still returns the correct shared value.\n\n# tcId = 306\n# truncated length of bit string\nprivate = 18c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5\npublic = 3014301006072a8648ce3d020106052b810400230381\nresult = acceptable\nshared = 00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5\n# The public key in this test uses an invalid ASN encoding. Some cases where the\n# ASN parser is not strictly checking the ASN format are benign as long as the\n# ECDH computation still returns the correct shared value.\n\n# tcId = 307\n# Replacing bit string with NULL\nprivate = 18c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5\npublic = 3014301006072a8648ce3d020106052b810400230500\nresult = acceptable\nshared = 00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5\n# The public key in this test uses an invalid ASN encoding. Some cases where the\n# ASN parser is not strictly checking the ASN format are benign as long as the\n# ECDH computation still returns the correct shared value.\n\n# tcId = 308\n# changing tag value of bit string\nprivate = 18c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5\npublic = 30819b301006072a8648ce3d020106052b810400230181860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50\nresult = acceptable\nshared = 00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5\n# The public key in this test uses an invalid ASN encoding. Some cases where the\n# ASN parser is not strictly checking the ASN format are benign as long as the\n# ECDH computation still returns the correct shared value.\n\n# tcId = 309\n# changing tag value of bit string\nprivate = 18c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5\npublic = 30819b301006072a8648ce3d020106052b810400230281860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50\nresult = acceptable\nshared = 00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5\n# The public key in this test uses an invalid ASN encoding. Some cases where the\n# ASN parser is not strictly checking the ASN format are benign as long as the\n# ECDH computation still returns the correct shared value.\n\n# tcId = 310\n# changing tag value of bit string\nprivate = 18c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5\npublic = 30819b301006072a8648ce3d020106052b810400230481860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50\nresult = acceptable\nshared = 00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5\n# The public key in this test uses an invalid ASN encoding. Some cases where the\n# ASN parser is not strictly checking the ASN format are benign as long as the\n# ECDH computation still returns the correct shared value.\n\n# tcId = 311\n# changing tag value of bit string\nprivate = 18c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5\npublic = 30819b301006072a8648ce3d020106052b810400230581860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50\nresult = acceptable\nshared = 00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5\n# The public key in this test uses an invalid ASN encoding. Some cases where the\n# ASN parser is not strictly checking the ASN format are benign as long as the\n# ECDH computation still returns the correct shared value.\n\n# tcId = 312\n# changing tag value of bit string\nprivate = 18c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5\npublic = 30819b301006072a8648ce3d020106052b81040023ff81860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50\nresult = acceptable\nshared = 00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5\n# The public key in this test uses an invalid ASN encoding. Some cases where the\n# ASN parser is not strictly checking the ASN format are benign as long as the\n# ECDH computation still returns the correct shared value.\n\n# tcId = 313\n# dropping value of bit string\nprivate = 18c3c384368133e46c99ad2421ff44eed459b5d209cb2aa",
     "70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5\npublic = 3014301006072a8648ce3d020106052b810400230300\nresult = acceptable\nshared = 00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5\n# The public key in this test uses an invalid ASN encoding. Some cases where the\n# ASN parser is not strictly checking the ASN format are benign as long as the\n# ECDH computation still returns the correct shared value.\n\n# tcId = 314\n# modify first byte of bit string\nprivate = 18c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5\npublic = 30819b301006072a8648ce3d020106052b810400230381860204017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50\nresult = acceptable\nshared = 00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5\n# The public key in this test uses an invalid ASN encoding. Some cases where the\n# ASN parser is not strictly checking the ASN format are benign as long as the\n# ECDH computation still returns the correct shared value.\n\n# tcId = 315\n# modify last byte of bit string\nprivate = 18c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5\npublic = 30819b301006072a8648ce3d020106052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32dd0\nresult = acceptable\nshared = 00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5\n# The public key in this test uses an invalid ASN encoding. Some cases where the\n# ASN parser is not strictly checking the ASN format are benign as long as the\n# ECDH computation still returns the correct shared value.\n\n# tcId = 316\n# truncate bit string\nprivate = 18c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5\npublic = 30819a301006072a8648ce3d020106052b810400230381850004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d\nresult = acceptable\nshared = 00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5\n# The public key in this test uses an invalid ASN encoding. Some cases where the\n# ASN parser is not strictly checking the ASN format are benign as long as the\n# ECDH computation still returns the correct shared value.\n\n# tcId = 317\n# truncate bit string\nprivate = 18c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5\npublic = 30819a301006072a8648ce3d020106052b8104002303818504017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50\nresult = acceptable\nshared = 00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5\n# The public key in this test uses an invalid ASN encoding. Some cases where the\n# ASN parser is not strictly checking the ASN format are benign as long as the\n# ECDH computation still returns the correct shared value.\n\n# tcId = 318\n# declaring bits as unused in a bit-string\nprivate = 18c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5\npublic = 30819b301006072a8648ce3d020106052b810400230381860104017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50\nresult = acceptable\nshared = 00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5\n# The public key in this test uses an invalid ASN encoding. Some cases where the\n# ASN parser is not strictly checking the ASN format are benign as long as the\n# ECDH computation still returns the correct shared value.\n\n# tcId = 319\n# unused bits in a bit-string\nprivate = 18c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5\npublic = 30819f301006072a8648ce3d020106052b8104002303818a2004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d5001020304\nresult = acceptable\nshared = 00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5\n# The public key in this test uses an invalid ASN encoding. Some cases where the\n# ASN parser is not strictly checking the ASN format are benign as long as the\n# ECDH computation still returns the correct shared value.\n\n# tcId = 320\n# unused bits in empty bit-string\nprivate = 18c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5\npublic = 3015301006072a8648ce3d020106052b81040023030103\nresult = acceptable\nshared = 00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5\n# The public key in this test uses an invalid ASN encoding. Some cases where the\n# ASN parser is not strictly checking the ASN format are benign as long as the\n# ECDH computation still returns the correct shared value.\n\n# tcId = 321\n# 128 unused bits\nprivate = 18c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5\npublic = 30819b301006072a8648ce3d020106052b810400230381868004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50\nresult = acceptable\nshared = 00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5\n# The public key in this test uses an invalid ASN encoding. Some cases where the\n# ASN parser is not strictly checking the ASN format are benign as long as the\n# ECDH computation still returns the correct shared value.\n\n",
 };
-static const size_t kLen66 = 119449;
+static const size_t kLen65 = 119449;
 
-static const char *kData66[] = {
+static const char *kData65[] = {
     "# Imported from Wycheproof's ecdsa_secp224r1_sha224_test.json.\n# This file is generated by convert_wycheproof.go. Do not edit by hand.\n#\n# Algorithm: ECDSA\n# Generator version: 0.4.12\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.uncompressed = 04eada93be10b2449e1e8bb58305d52008013c57107c1a20a317a6cba7eca672340c03d1d2e09663286691df55069fa25490c9dd9f9c0bb2b5]\n[key.wx = 0eada93be10b2449e1e8bb58305d52008013c57107c1a20a317a6cba7]\n[key.wy = 0eca672340c03d1d2e09663286691df55069fa25490c9dd9f9c0bb2b5]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004eada93be10b2449e1e8bb58305d52008013c57107c1a20a317a6cba7eca672340c03d1d2e09663286691df55069fa25490c9dd9f9c0bb2b5]\n[sha = SHA-224]\n\n# tcId = 1\n# signature malleability\nmsg = 313233343030\nresult = valid\nsig = 303c021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021c2840bf24f6f66be287066b7cbf38788e1b7770b18fd1aa6a26d7c6dc\n\n# tcId = 2\n# Legacy:ASN encoding of s misses leading 0\nmsg = 313233343030\nresult = acceptable\nsig = 303c021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021cd7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n# Some implementations of ECDSA and DSA incorrectly encode r and s by not\n# including leading zeros in the ASN encoding of integers when necessary. Hence,\n# some implementations (e.g. jdk) allow signatures with incorrect ASN encodings\n# assuming that the signature is otherwise valid.\n\n# tcId = 3\n# valid\nmsg = 313233343030\nresult = valid\nsig = 303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 4\n# long form encoding of length\nmsg = 313233343030\nresult = invalid\nsig = 30813d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n# This is a signature with correct values for (r, s) but using some alternative\n# BER encoding instead of DER encoding. Implementations should not accept such\n# signatures to limit signature malleability.\n\n# tcId = 5\n# long form encoding of length\nmsg = 313233343030\nresult = invalid\nsig = 303e02811c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n# This is a signature with correct values for (r, s) but using some alternative\n# BER encoding instead of DER encoding. Implementations should not accept such\n# signatures to limit signature malleability.\n\n# tcId = 6\n# long form encoding of length\nmsg = 313233343030\nresult = invalid\nsig = 303e021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a02811d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n# This is a signature with correct values for (r, s) but using some alternative\n# BER encoding instead of DER encoding. Implementations should not accept such\n# signatures to limit signature malleability.\n\n# tcId = 7\n# length contains leading 0\nmsg = 313233343030\nresult = invalid\nsig = 3082003d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n# This is a signature with correct values for (r, s) but using some alternative\n# BER encoding instead of DER encoding. Implementations should not accept such\n# signatures to limit signature malleability.\n\n# tcId = 8\n# length contains leading 0\nmsg = 313233343030\nresult = invalid\nsig = 303f0282001c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n# This is a signature with correct values for (r, s) but using some alternative\n# BER encoding instead of DER encoding. Implementations should not accept such\n# signatures to limit signature malleability.\n\n# tcId = 9\n# length contains leading 0\nmsg = 313233343030\nresult = invalid\nsig = 303f021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a0282001d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n# This is a signature with correct values for (r, s) but using some alternative\n# BER encoding instead of DER encoding. Implementations should not accept such\n# signatures to limit signature malleability.\n\n# tcId = 10\n# wrong length\nmsg = 313233343030\nresult = invalid\nsig = 303e021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 11\n# wrong length\nmsg = 313233343030\nresult = invalid\nsig = 303c021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 12\n# wrong length\nmsg = 313233343030\nresult = invalid\nsig = 303d021d70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 13\n# wrong length\nmsg = 313233343030\nresult = invalid\nsig = 303d021b70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 14\n# wrong length\nmsg = 313233343030\nresult = invalid\nsig = 303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021e00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 15\n# wrong length\nmsg = 313233343030\nresult = invalid\nsig = 303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021c00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 16\n# uint32 overflow in length\nmsg = 313233343030\nresult = invalid\nsig = 3085010000003d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 17\n# uint32 overflow in length\nmsg = 313233343030\nresult = invalid\nsig = 30420285010000001c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 18\n# uint32 overflow in length\nmsg = 313233343030\nresult = invalid\nsig = 3042021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a0285010000001d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 19\n# uint64 overflow in length\nmsg = 313233343030\nresult = invalid\nsig = 308901000000000000003d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 20\n# uint64 overflow in length\nmsg = 313233343030\nresult = invalid\nsig = 3046028901000000000000001c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 21\n# uint64 overflow in length\nmsg = 313233343030\nresult = invalid\nsig = 3046021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a028901000000000000001d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 22\n# length = 2**31 - 1\nmsg = 313233343030\nresult = invalid\nsig = 30847fffffff021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 23\n# length = 2**31 - 1\nmsg = 313233343030\nresult = invalid\nsig = 304102847fffffff70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 24\n# length = 2**31 - 1\nmsg = 313233343030\nresult = invalid\nsig = 3041021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a02847fffffff00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 25\n# length = 2**32 - 1\nmsg = 313233343030\nresult = invalid\nsig = 3084ffffffff021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 26\n# length = 2**32 - 1\nmsg = 313233343030\nresult = invalid\nsig = 30410284ffffffff70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 27\n# length = 2**32 - 1\nmsg = 313233343030\nresult = invalid\nsig = 3041021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a0284ffffffff00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 28\n# length = 2**40 - 1\nmsg = 313233343030\nresult = invalid\nsig = 3085ffffffffff021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 29\n# length = 2**40 - 1\nmsg = 313233343030\nresult ",
     "= invalid\nsig = 30420285ffffffffff70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 30\n# length = 2**40 - 1\nmsg = 313233343030\nresult = invalid\nsig = 3042021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a0285ffffffffff00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 31\n# length = 2**64 - 1\nmsg = 313233343030\nresult = invalid\nsig = 3088ffffffffffffffff021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 32\n# length = 2**64 - 1\nmsg = 313233343030\nresult = invalid\nsig = 30450288ffffffffffffffff70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 33\n# length = 2**64 - 1\nmsg = 313233343030\nresult = invalid\nsig = 3045021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a0288ffffffffffffffff00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 34\n# incorrect length\nmsg = 313233343030\nresult = invalid\nsig = 30ff021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 35\n# incorrect length\nmsg = 313233343030\nresult = invalid\nsig = 303d02ff70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 36\n# incorrect length\nmsg = 313233343030\nresult = invalid\nsig = 303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a02ff00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 37\n# indefinite length without termination\nmsg = 313233343030\nresult = invalid\nsig = 3080021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 38\n# indefinite length without termination\nmsg = 313233343030\nresult = invalid\nsig = 303d028070049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 39\n# indefinite length without termination\nmsg = 313233343030\nresult = invalid\nsig = 303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a028000d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 40\n# removing sequence\nmsg = 313233343030\nresult = invalid\nsig = \n\n# tcId = 41\n# lonely sequence tag\nmsg = 313233343030\nresult = invalid\nsig = 30\n\n# tcId = 42\n# appending 0's to sequence\nmsg = 313233343030\nresult = invalid\nsig = 303f021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb358463610000\n\n# tcId = 43\n# prepending 0's to sequence\nmsg = 313233343030\nresult = invalid\nsig = 303f0000021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 44\n# appending unused 0's to sequence\nmsg = 313233343030\nresult = invalid\nsig = 303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb358463610000\n\n# tcId = 45\n# appending null value to sequence\nmsg = 313233343030\nresult = invalid\nsig = 303f021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb358463610500\n\n# tcId = 46\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 3042498177303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 47\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 30412500303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 48\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 303f303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb358463610004deadbeef\n\n# tcId = 49\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 30422221498177021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 50\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 304122202500021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 51\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 3045221e021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a0004deadbeef021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 52\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 3042021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a2222498177021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 53\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 3041021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a22212500021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 54\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 3045021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a221f021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb358463610004deadbeef\n\n# tcId = 55\n# including undefined tags\nmsg = 313233343030\nresult = invalid\nsig = 3045aa00bb00cd00303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 56\n# including undefined tags\nmsg = 313233343030\nresult = invalid\nsig = 3043aa02aabb303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 57\n# including undefined tags\nmsg = 313233343030\nresult = invalid\nsig = 30452224aa00bb00cd00021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 58\n# including undefined tags\nmsg = 313233343030\nresult = invalid\nsig = 30432222aa02aabb021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 59\n# including undefined tags\nmsg = 313233343030\nresult = invalid\nsig = 3045021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a2225aa00bb00cd00021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 60\n# including undefined tags\nmsg = 313233343030\nresult = invalid\nsig = 3043021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a2223aa02aabb021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 61\n# truncated length of sequence\nmsg = 313233343030\nresult = invalid\nsig = 3081\n\n# tcId = 62\n# using composition with indefinite length\nmsg = 313233343030\nresult = invalid\nsig = 3080303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb358463610000\n\n# tcId = 63\n# using composition with indefinite length\nmsg = 313233343030\nresult = invalid\nsig = 30412280021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a0000021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 64\n# using composition with indefinite length\nmsg = 313233343030\nresult = invalid\nsig = 3041021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a2280021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb358463610000\n\n# tcId = 65\n# using composition with wrong tag\nmsg = 313233343030\nresult = invalid\nsig = 3080313d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb358463610000\n\n# tcId = 66\n# using composition with wrong tag\nmsg = 313233343030\nresult = invalid\nsig = 30412280031c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a0000021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 67\n# using composition with wrong tag\nmsg = 313233343030\nresult = invalid\nsig = 3041021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a2280031d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb358463610000\n\n# tcId = 68\n# Replacing sequence with NULL\nmsg = 313233343030\nresult = invalid\nsig = 0500\n\n# tcId = 69\n# changing tag value of sequence\nmsg = 3132333",
     "43030\nresult = invalid\nsig = 2e3d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 70\n# changing tag value of sequence\nmsg = 313233343030\nresult = invalid\nsig = 2f3d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 71\n# changing tag value of sequence\nmsg = 313233343030\nresult = invalid\nsig = 313d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 72\n# changing tag value of sequence\nmsg = 313233343030\nresult = invalid\nsig = 323d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 73\n# changing tag value of sequence\nmsg = 313233343030\nresult = invalid\nsig = ff3d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 74\n# dropping value of sequence\nmsg = 313233343030\nresult = invalid\nsig = 3000\n\n# tcId = 75\n# using composition for sequence\nmsg = 313233343030\nresult = invalid\nsig = 3041300102303c1c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 76\n# truncate sequence\nmsg = 313233343030\nresult = invalid\nsig = 303c021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb358463\n\n# tcId = 77\n# truncate sequence\nmsg = 313233343030\nresult = invalid\nsig = 303c1c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 78\n# indefinite length\nmsg = 313233343030\nresult = invalid\nsig = 3080021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb358463610000\n# This is a signature with correct values for (r, s) but using some alternative\n# BER encoding instead of DER encoding. Implementations should not accept such\n# signatures to limit signature malleability.\n\n# tcId = 79\n# indefinite length with truncated delimiter\nmsg = 313233343030\nresult = invalid\nsig = 3080021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb3584636100\n\n# tcId = 80\n# indefinite length with additional element\nmsg = 313233343030\nresult = invalid\nsig = 3080021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb3584636105000000\n\n# tcId = 81\n# indefinite length with truncated element\nmsg = 313233343030\nresult = invalid\nsig = 3080021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361060811220000\n\n# tcId = 82\n# indefinite length with garbage\nmsg = 313233343030\nresult = invalid\nsig = 3080021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb358463610000fe02beef\n\n# tcId = 83\n# indefinite length with nonempty EOC\nmsg = 313233343030\nresult = invalid\nsig = 3080021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb358463610002beef\n\n# tcId = 84\n# prepend empty sequence\nmsg = 313233343030\nresult = invalid\nsig = 303f3000021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 85\n# append empty sequence\nmsg = 313233343030\nresult = invalid\nsig = 303f021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb358463613000\n\n# tcId = 86\n# sequence of sequence\nmsg = 313233343030\nresult = invalid\nsig = 303f303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 87\n# truncated sequence\nmsg = 313233343030\nresult = invalid\nsig = 301e021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a\n\n# tcId = 88\n# repeat element in sequence\nmsg = 313233343030\nresult = invalid\nsig = 305c021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 89\n# removing integer\nmsg = 313233343030\nresult = invalid\nsig = 301f021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 90\n# lonely integer tag\nmsg = 313233343030\nresult = invalid\nsig = 302002021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 91\n# lonely integer tag\nmsg = 313233343030\nresult = invalid\nsig = 301f021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a02\n\n# tcId = 92\n# appending 0's to integer\nmsg = 313233343030\nresult = invalid\nsig = 303f021e70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a0000021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 93\n# appending 0's to integer\nmsg = 313233343030\nresult = invalid\nsig = 303f021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021f00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb358463610000\n\n# tcId = 94\n# prepending 0's to integer\nmsg = 313233343030\nresult = invalid\nsig = 303f021e000070049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n# This is a signature with correct values for (r, s) but using some alternative\n# BER encoding instead of DER encoding. Implementations should not accept such\n# signatures to limit signature malleability.\n\n# tcId = 95\n# prepending 0's to integer\nmsg = 313233343030\nresult = invalid\nsig = 303f021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021f000000d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n# This is a signature with correct values for (r, s) but using some alternative\n# BER encoding instead of DER encoding. Implementations should not accept such\n# signatures to limit signature malleability.\n\n# tcId = 96\n# appending unused 0's to integer\nmsg = 313233343030\nresult = invalid\nsig = 303f021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a0000021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 97\n# appending null value to integer\nmsg = 313233343030\nresult = invalid\nsig = 303f021e70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a0500021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 98\n# appending null value to integer\nmsg = 313233343030\nresult = invalid\nsig = 303f021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021f00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb358463610500\n\n# tcId = 99\n# truncated length of integer\nmsg = 313233343030\nresult = invalid\nsig = 30210281021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 100\n# truncated length of integer\nmsg = 313233343030\nresult = invalid\nsig = 3020021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a0281\n\n# tcId = 101\n# Replacing integer with NULL\nmsg = 313233343030\nresult = invalid\nsig = 30210500021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 102\n# Replacing integer with NULL\nmsg = 313233343030\nresult = invalid\nsig = 3020021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a0500\n\n# tcId = 103\n# changing tag value of integer\nmsg = 313233343030\nresult = invalid\nsig = 303d001c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 104\n# changing tag value of integer\nmsg = 313233343030\nresult = invalid\nsig = 303d011c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 105\n# changing tag value of integer\nmsg = 313233343030\nresult = invalid\nsig = 303d031c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 106\n# changing tag value of integer\nmsg = 313233343030\nresult = invalid\nsig = 303d041c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361\n\n# tcId = 107\n# ch",
@@ -3067,9 +3048,9 @@
     "403d42b7b45e553308d1f6a480640b61cac0ae36665d6f14d34e021d0085506b0404265ededf9a89fc7c9c7a55c16c5b0d781f774de8f46fa1\n\n# tcId = 308\n# pseudorandom signature\nmsg = 4d7367\nresult = valid\nsig = 303d021d00b68da722bbba7f6a58417bb5d0dd88f40316fc628b0edfcb0f02b062021c5c742e330b6febadf9a12d58ba2a7199629457ef2e9e4cecd2f09f50\n\n# tcId = 309\n# pseudorandom signature\nmsg = 313233343030\nresult = valid\nsig = 303c021c01ec1ff15c8a55d697a5424d674753f82f711593828368d2fbb41a17021c20d9089db7baf46b8135e17e01645e732d22d5adb20e3772da740eee\n\n# tcId = 310\n# pseudorandom signature\nmsg = 0000000000000000000000000000000000000000\nresult = valid\nsig = 303c021c3e46e9ba4dc089ff30fa8c0209c31b11ff49dbeec090f9f53c000c75021c6f2e3b36369416602bca83206809ed898fcf158a56c25a5474143f68\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.uncompressed = 04aed6fcad2400c4d94e55dbb6b012ce3d4c2b46843fbe99d4289e6ecf8a24a89e71343d7d151d258d2cb690349c2d56b366dd10a600000000]\n[key.wx = 0aed6fcad2400c4d94e55dbb6b012ce3d4c2b46843fbe99d4289e6ecf]\n[key.wy = 08a24a89e71343d7d151d258d2cb690349c2d56b366dd10a600000000]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004aed6fcad2400c4d94e55dbb6b012ce3d4c2b46843fbe99d4289e6ecf8a24a89e71343d7d151d258d2cb690349c2d56b366dd10a600000000]\n[sha = SHA-224]\n\n# tcId = 311\n# y-coordinate of the public key has many trailing 0's\nmsg = 4d657373616765\nresult = valid\nsig = 303d021c77b38da37079d27b837613ac3e8248d66eabd5d637076c8e62c7991e021d00d40cd9f81efc52db4429c0c1af7c1d8a22b6c7babbe7fbd8b5b3f02f\n\n# tcId = 312\n# y-coordinate of the public key has many trailing 0's\nmsg = 4d657373616765\nresult = valid\nsig = 303d021d008c03b32c166c0c8b99d7f876acd109447efb13f6b82945e78d51a269021c657568f1a0a8bd7df5ffa43097ebb2b64435c8e3335bcaafc63f9ed5\n\n# tcId = 313\n# y-coordinate of the public key has many trailing 0's\nmsg = 4d657373616765\nresult = valid\nsig = 303d021d00d199a375253d30f1d2b4493542e9934f9f1f8b0680117679f5bc4ad2021c11419ddbf02c8ad5f518f8dac33f86a85e777af51a034132e2767a6d\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.uncompressed = 04bf19ecfe43ffe289f699f479316145b9a7f7370b9ece5ab1212174f173d528949ae9142f818bade71a960407963be0b6482a6a60ffffffff]\n[key.wx = 0bf19ecfe43ffe289f699f479316145b9a7f7370b9ece5ab1212174f1]\n[key.wy = 73d528949ae9142f818bade71a960407963be0b6482a6a60ffffffff]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004bf19ecfe43ffe289f699f479316145b9a7f7370b9ece5ab1212174f173d528949ae9142f818bade71a960407963be0b6482a6a60ffffffff]\n[sha = SHA-224]\n\n# tcId = 314\n# y-coordinate of the public key has many trailing 1's\nmsg = 4d657373616765\nresult = valid\nsig = 303d021d008ff82699e2e82870be9cfdd8a408bb34f8f38a83a4ac8370f18f2bc8021c7e5008fab6a0d4159200077ef9918dad6592cd8359838852c636ac05\n\n# tcId = 315\n# y-coordinate of the public key has many trailing 1's\nmsg = 4d657373616765\nresult = valid\nsig = 303d021c3f3b60b529ae0f950c517264adf2e481616bc47416742d5103589660021d00f731ebe98e58384b3a64b4696d4cc9619828ad51d7c39980749709a6\n\n# tcId = 316\n# y-coordinate of the public key has many trailing 1's\nmsg = 4d657373616765\nresult = valid\nsig = 303d021d00dc11ffdc6b78754a335f168c4033916a2158d125a3f4fed9dc736661021c6dd84364717d9f4b0790f2b282f9245ecb316874eac025600397f109\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.uncompressed = 0426e5abf135cb54eaaa16b69e4b0b292275344e88a09df6df80000000eab891de54e3f26ff50ab989f333dac551583d468ae623c596434af0]\n[key.wx = 26e5abf135cb54eaaa16b69e4b0b292275344e88a09df6df80000000]\n[key.wy = 0eab891de54e3f26ff50ab989f333dac551583d468ae623c596434af0]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a000426e5abf135cb54eaaa16b69e4b0b292275344e88a09df6df80000000eab891de54e3f26ff50ab989f333dac551583d468ae623c596434af0]\n[sha = SHA-224]\n\n# tcId = 317\n# x-coordinate of the public key has many trailing 0's\nmsg = 4d657373616765\nresult = valid\nsig = 303e021d00a59b25b786d55f26b04dfe90ee02a6bde64ed6e431dc9fbdc3ab360e021d00fc14b5ad20f39da9900e35437936c8626fccf6632e7a3d9e587e3311\n\n# tcId = 318\n# x-coordinate of the public key has many trailing 0's\nmsg = 4d657373616765\nresult = valid\nsig = 303d021c2eda1f96c1a6e3ad8a3321ce82cbb13a5b935b501abf6c06f7fd2b3f021d00e81050c3e5f53a3c7b9d0bdb9ed92a326dfeac44791ba1abe4d6e973\n\n# tcId = 319\n# x-coordinate of the public key has many trailing 0's\nmsg = 4d657373616765\nresult = valid\nsig = 303d021c60f5e093fda08fc14ac99d820a18ad1370c58150bea0aca24fc6db9d021d00c2220a0ebbf4896e68fdb5bd824f88291c1c862b916f9c4af87f8f5f\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.uncompressed = 04ec627f345545d03f8c6dbd08e575527116567fe375f9ecaaffffffff41bf705697d5f716bcf78718d5393b63a98691f4a1f24246375538fd]\n[key.wx = 0ec627f345545d03f8c6dbd08e575527116567fe375f9ecaaffffffff]\n[key.wy = 41bf705697d5f716bcf78718d5393b63a98691f4a1f24246375538fd]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004ec627f345545d03f8c6dbd08e575527116567fe375f9ecaaffffffff41bf705697d5f716bcf78718d5393b63a98691f4a1f24246375538fd]\n[sha = SHA-224]\n\n# tcId = 320\n# x-coordinate of the public key has many trailing 1's\nmsg = 4d657373616765\nresult = valid\nsig = 303d021c2ead37846a5e36a490b75140bdc7b636c6e9f6d8f980f6fadb08f769021d00e1fe130ae1798c196d7be62c7a5ddb3168cf4b8d48b6b6b4dc94ab3b\n\n# tcId = 321\n# x-coordinate of the public key has many trailing 1's\nmsg = 4d657373616765\nresult = valid\nsig = 303d021d00a8a4c9416d72c860573d073281cb08c86ad65313f06b15a329e82eb2021c5a6edd2f0816b7263d915d72c67d50a854e3abee5cde1b679a0cef09\n\n# tcId = 322\n# x-coordinate of the public key has many trailing 1's\nmsg = 4d657373616765\nresult = valid\nsig = 303c021c576bb86c517bfecdc930a4c8501725548d425afbb96d93f5c1e2a0e1021c77248c5ecd620c431438c50e6bee6858091b54a87f8548ae35c21027\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.uncompressed = 0415016e52b36472d536477605fb805dd3903082a062d1ea30af9e555a00000000762d28f1fdc219184f81681fbff566d465b5f1f31e872df5]\n[key.wx = 15016e52b36472d536477605fb805dd3903082a062d1ea30af9e555a]\n[key.wy = 762d28f1fdc219184f81681fbff566d465b5f1f31e872df5]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a000415016e52b36472d536477605fb805dd3903082a062d1ea30af9e555a00000000762d28f1fdc219184f81681fbff566d465b5f1f31e872df5]\n[sha = SHA-224]\n\n# tcId = 323\n# y-coordinate of the public key is small\nmsg = 4d657373616765\nresult = valid\nsig = 303d021c34e41cba628fd8787ba1a528f6015d2cae015c1c9a866e08a7133801021d0083d422ffdd99cc3c6d7096ef927f0b11988d1824e6e93840ff666ccd\n\n# tcId = 324\n# y-coordinate of the public key is small\nmsg = 4d657373616765\nresult = valid\nsig = 303c021c2558a42e79689244bccd5e855f6a1e42b4ff726873f30b532b89ef53021c07f9bd947785187175d848b6e2d79f7ab3bbc1087b42590b0cfb256a\n\n# tcId = 325\n# y-coordinate of the public key is small\nmsg = 4d657373616765\nresult = valid\nsig = 303e021d00d5fe7dd5fb4fd1ea5ce66c0824f53f96ce47fd9b6c63b4d57827fd17021d00bce5bc3af705afaacb81bfa6d552d6198962fece9fba41546c602ddc\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.uncompressed = 0415016e52b36472d536477605fb805dd3903082a062d1ea30af9e555affffffff89d2d70e023de6e7b07e97df400a992b9a4a0e0ce178d20c]\n[key.wx = 15016e52b36472d536477605fb805dd3903082a062d1ea30af9e555a]\n[key.wy = 0ffffffff89d2d70e023de6e7b07e97df400a992b9a4a0e0ce178d20c]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a000415016e52b36472d536477605fb805dd3903082a062d1ea30af9e555affffffff89d2d70e023de6e7b07e97df400a992b9a4a0e0ce178d20c]\n[sha = SHA-224]\n\n# tcId = 326\n# y-coordinate of the public key is large\nmsg = 4d657373616765\nresult = valid\nsig = 303d021d008c1da2f07cdcbce4db8067b863468cfc728df52980229028689e57b6021c32175c1390a4b2cab6359bab9f854957d4fd7976c9c6d920c871c051\n\n# tcId = 327\n# y-coordinate of the public key is large\nmsg = 4d657373616765\nresult = valid\nsig = 303e021d00e46d4f11b86b5a12f6fe781d1f934ef2b30e78f6f9cc86a9996e20c0021d008351974b965526034a0ccef0e7d3bc13d91798151488c91533143f7b\n\n# tcId = 328\n# y-coordinate of the public key is large\nmsg = 4d657373616765\nresult = valid\nsig = 303c021c305ccf0b5d0cf33dc745bb7c7964c233f6cfd8892a1c1ae9f50b2f3f021c785f6e85f5e652587c6e15d0c45c427278cf65bb1429a57d8826ca39\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ",
     "ECPublicKey]\n[key.uncompressed = 0400000000f7e4713d085112112c37cdf4601ff688da796016b71a727ade5a9ec165054cc987f9dc87e9991b92e4fa649ca655eeae9f2a30e1]\n[key.wx = 0f7e4713d085112112c37cdf4601ff688da796016b71a727a]\n[key.wy = 0de5a9ec165054cc987f9dc87e9991b92e4fa649ca655eeae9f2a30e1]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a000400000000f7e4713d085112112c37cdf4601ff688da796016b71a727ade5a9ec165054cc987f9dc87e9991b92e4fa649ca655eeae9f2a30e1]\n[sha = SHA-224]\n\n# tcId = 329\n# x-coordinate of the public key is small\nmsg = 4d657373616765\nresult = valid\nsig = 303d021c0e4fde0ac8d37536505f7b8bdc2d22c5c334b064ac5ed27bea9c179e021d00c4d6bf829dd547000d6f70b9ad9e9c1503bebcf1d95c2608942ca19d\n\n# tcId = 330\n# x-coordinate of the public key is small\nmsg = 4d657373616765\nresult = valid\nsig = 303e021d00818afcaf491da9d08a7cc29318d5e85dce568dcca7018059f44e9b7e021d00bf32a233d5fc6ed8e2d9270b1bdad4bbd2a0f2c293d289bd91ffbcf3\n\n# tcId = 331\n# x-coordinate of the public key is small\nmsg = 4d657373616765\nresult = valid\nsig = 303c021c0e05ed675c673e5e70a4fdd5a47b114c5d542d4f6d7a367597d713ea021c26d70d65c48430373363987810bdcc556e02718eab214403ae008db4\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.uncompressed = 04ffffffffeadf7cee8d34d04cf22c8f7de35674fb2f501d242a76f72586c409309d398e60ce1e0a4c9e05a9d32627577e8ce2cc7f3afa2c3e]\n[key.wx = 0ffffffffeadf7cee8d34d04cf22c8f7de35674fb2f501d242a76f725]\n[key.wy = 086c409309d398e60ce1e0a4c9e05a9d32627577e8ce2cc7f3afa2c3e]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004ffffffffeadf7cee8d34d04cf22c8f7de35674fb2f501d242a76f72586c409309d398e60ce1e0a4c9e05a9d32627577e8ce2cc7f3afa2c3e]\n[sha = SHA-224]\n\n# tcId = 332\n# x-coordinate of the public key is large\nmsg = 4d657373616765\nresult = valid\nsig = 303e021d00ab7a19eecf63e9668278963b65236b2768e57cae0e268cb86a0ddda1021d008829f5d3a3394f9467ba62e66ef1768e3e54f93ed23ec962bc443c2e\n\n# tcId = 333\n# x-coordinate of the public key is large\nmsg = 4d657373616765\nresult = valid\nsig = 303d021c17111a77cf79bead456ed86a7d8a935531440281eb8b15a885e341c0021d00fdc3958d04f037b1d4bb2cee307b5201be062e0d4e089df1c1917668\n\n# tcId = 334\n# x-coordinate of the public key is large\nmsg = 4d657373616765\nresult = valid\nsig = 303d021d00acafa1e33345eeba0c338c2204b4cd8ba21de7ec3e1213317038e968021c0b42fbbaeda98a35da0de4c79546f3a0f7d9dec275d2cd671f93c874\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.uncompressed = 04b0013c6fbff6f09fecda1c263ef65399d4cf989ca5fc4f8fff0fe9e1000000000e2ab0e8495e859eb2afb00769d6e7fe626a119167c0b6bc]\n[key.wx = 0b0013c6fbff6f09fecda1c263ef65399d4cf989ca5fc4f8fff0fe9e1]\n[key.wy = 0e2ab0e8495e859eb2afb00769d6e7fe626a119167c0b6bc]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004b0013c6fbff6f09fecda1c263ef65399d4cf989ca5fc4f8fff0fe9e1000000000e2ab0e8495e859eb2afb00769d6e7fe626a119167c0b6bc]\n[sha = SHA-224]\n\n# tcId = 335\n# y-coordinate of the public key is small\nmsg = 4d657373616765\nresult = valid\nsig = 303d021d00a3fe71a2a56f554e98fd10a8098c2a543c98bc6b3602ef39f2412308021c5d1d68f9a870ef2bc87484b3386549fae95811ab72bc0e3a514720da\n\n# tcId = 336\n# y-coordinate of the public key is small\nmsg = 4d657373616765\nresult = valid\nsig = 303d021c132f7625704756c13f2bfa449e60952f836f4904660b5b1da07e5a9f021d0082b4abafc40e8fd19b0c967f02fff152737ce01153658df445c4d7b7\n\n# tcId = 337\n# y-coordinate of the public key is small\nmsg = 4d657373616765\nresult = valid\nsig = 303e021d00f36a8347c6fe0397a1161a364cbc4bdfb4d8b7894cbaa6edc55a4ff7021d009c9c90515da5e602d62e99f48eac414e913dd0b7cbf680c1a5399952\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.uncompressed = 04b0013c6fbff6f09fecda1c263ef65399d4cf989ca5fc4f8fff0fe9e1fffffffff1d54f17b6a17a614d504ff7962918019d95ee6e983f4945]\n[key.wx = 0b0013c6fbff6f09fecda1c263ef65399d4cf989ca5fc4f8fff0fe9e1]\n[key.wy = 0fffffffff1d54f17b6a17a614d504ff7962918019d95ee6e983f4945]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004b0013c6fbff6f09fecda1c263ef65399d4cf989ca5fc4f8fff0fe9e1fffffffff1d54f17b6a17a614d504ff7962918019d95ee6e983f4945]\n[sha = SHA-224]\n\n# tcId = 338\n# y-coordinate of the public key is large\nmsg = 4d657373616765\nresult = valid\nsig = 303d021c2125ecc08e52e9e39e590117de2145bd879626cb87180e52e9d3ce03021d008f7e838d0e8fb80005fe3c72fca1b7cc08ed321a34487896b0c90b04\n\n# tcId = 339\n# y-coordinate of the public key is large\nmsg = 4d657373616765\nresult = valid\nsig = 303e021d00e485747ac2f3d045e010cdadab4fd5dbd5556c0008445fb73e07cd90021d00e2133a7906aeac504852e09e6d057f29ab21368cfc4e2394be565e68\n\n# tcId = 340\n# y-coordinate of the public key is large\nmsg = 4d657373616765\nresult = valid\nsig = 303d021d00a4de0d931ddab90e667ebc0ad800ce49e971c60543abdc46cefff926021c550816170bd87593b9fb8ad5ed9ab4ddb12403ff6fe032252833bac4\n\n",
 };
-static const size_t kLen67 = 124562;
+static const size_t kLen66 = 124562;
 
-static const char *kData67[] = {
+static const char *kData66[] = {
     "# Imported from Wycheproof's ecdsa_secp224r1_sha256_test.json.\n# This file is generated by convert_wycheproof.go. Do not edit by hand.\n#\n# Algorithm: ECDSA\n# Generator version: 0.4.12\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.uncompressed = 04eada93be10b2449e1e8bb58305d52008013c57107c1a20a317a6cba7eca672340c03d1d2e09663286691df55069fa25490c9dd9f9c0bb2b5]\n[key.wx = 0eada93be10b2449e1e8bb58305d52008013c57107c1a20a317a6cba7]\n[key.wy = 0eca672340c03d1d2e09663286691df55069fa25490c9dd9f9c0bb2b5]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004eada93be10b2449e1e8bb58305d52008013c57107c1a20a317a6cba7eca672340c03d1d2e09663286691df55069fa25490c9dd9f9c0bb2b5]\n[sha = SHA-256]\n\n# tcId = 1\n# signature malleability\nmsg = 313233343030\nresult = valid\nsig = 303d021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021d009e82950ebe102f37ff3645cc7d3c1bab8864e5e03a5011eeba8150bc\n\n# tcId = 2\n# valid\nmsg = 313233343030\nresult = valid\nsig = 303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 3\n# long form encoding of length\nmsg = 313233343030\nresult = invalid\nsig = 30813c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n# This is a signature with correct values for (r, s) but using some alternative\n# BER encoding instead of DER encoding. Implementations should not accept such\n# signatures to limit signature malleability.\n\n# tcId = 4\n# long form encoding of length\nmsg = 313233343030\nresult = invalid\nsig = 303d02811c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n# This is a signature with correct values for (r, s) but using some alternative\n# BER encoding instead of DER encoding. Implementations should not accept such\n# signatures to limit signature malleability.\n\n# tcId = 5\n# long form encoding of length\nmsg = 313233343030\nresult = invalid\nsig = 303d021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a0402811c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n# This is a signature with correct values for (r, s) but using some alternative\n# BER encoding instead of DER encoding. Implementations should not accept such\n# signatures to limit signature malleability.\n\n# tcId = 6\n# length contains leading 0\nmsg = 313233343030\nresult = invalid\nsig = 3082003c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n# This is a signature with correct values for (r, s) but using some alternative\n# BER encoding instead of DER encoding. Implementations should not accept such\n# signatures to limit signature malleability.\n\n# tcId = 7\n# length contains leading 0\nmsg = 313233343030\nresult = invalid\nsig = 303e0282001c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n# This is a signature with correct values for (r, s) but using some alternative\n# BER encoding instead of DER encoding. Implementations should not accept such\n# signatures to limit signature malleability.\n\n# tcId = 8\n# length contains leading 0\nmsg = 313233343030\nresult = invalid\nsig = 303e021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a040282001c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n# This is a signature with correct values for (r, s) but using some alternative\n# BER encoding instead of DER encoding. Implementations should not accept such\n# signatures to limit signature malleability.\n\n# tcId = 9\n# wrong length\nmsg = 313233343030\nresult = invalid\nsig = 303d021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 10\n# wrong length\nmsg = 313233343030\nresult = invalid\nsig = 303b021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 11\n# wrong length\nmsg = 313233343030\nresult = invalid\nsig = 303c021d3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 12\n# wrong length\nmsg = 313233343030\nresult = invalid\nsig = 303c021b3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 13\n# wrong length\nmsg = 313233343030\nresult = invalid\nsig = 303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021d617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 14\n# wrong length\nmsg = 313233343030\nresult = invalid\nsig = 303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021b617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 15\n# uint32 overflow in length\nmsg = 313233343030\nresult = invalid\nsig = 3085010000003c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 16\n# uint32 overflow in length\nmsg = 313233343030\nresult = invalid\nsig = 30410285010000001c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 17\n# uint32 overflow in length\nmsg = 313233343030\nresult = invalid\nsig = 3041021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a040285010000001c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 18\n# uint64 overflow in length\nmsg = 313233343030\nresult = invalid\nsig = 308901000000000000003c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 19\n# uint64 overflow in length\nmsg = 313233343030\nresult = invalid\nsig = 3045028901000000000000001c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 20\n# uint64 overflow in length\nmsg = 313233343030\nresult = invalid\nsig = 3045021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04028901000000000000001c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 21\n# length = 2**31 - 1\nmsg = 313233343030\nresult = invalid\nsig = 30847fffffff021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 22\n# length = 2**31 - 1\nmsg = 313233343030\nresult = invalid\nsig = 304002847fffffff3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 23\n# length = 2**31 - 1\nmsg = 313233343030\nresult = invalid\nsig = 3040021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a0402847fffffff617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 24\n# length = 2**32 - 1\nmsg = 313233343030\nresult = invalid\nsig = 3084ffffffff021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 25\n# length = 2**32 - 1\nmsg = 313233343030\nresult = invalid\nsig = 30400284ffffffff3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 26\n# length = 2**32 - 1\nmsg = 313233343030\nresult = invalid\nsig = 3040021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a040284ffffffff617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 27\n# length = 2**40 - 1\nmsg = 313233343030\nresult = invalid\nsig = 3085ffffffffff021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 28\n# length = 2**40 - 1\nmsg = 313233343030\nresult = invalid\nsig = 30410285ffffffffff3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 29\n# length = 2**40 - 1\nmsg = 313233343030\nresult = invalid\nsig = 3041021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a040285ffffffffff617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 30\n# length = 2**64 - 1\nmsg = 313233343030\nresult = invalid\nsig = 3088ffffffffffffffff021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5d",
     "d98d1756a1dad981\n\n# tcId = 31\n# length = 2**64 - 1\nmsg = 313233343030\nresult = invalid\nsig = 30440288ffffffffffffffff3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 32\n# length = 2**64 - 1\nmsg = 313233343030\nresult = invalid\nsig = 3044021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a040288ffffffffffffffff617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 33\n# incorrect length\nmsg = 313233343030\nresult = invalid\nsig = 30ff021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 34\n# incorrect length\nmsg = 313233343030\nresult = invalid\nsig = 303c02ff3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 35\n# incorrect length\nmsg = 313233343030\nresult = invalid\nsig = 303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a0402ff617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 36\n# indefinite length without termination\nmsg = 313233343030\nresult = invalid\nsig = 3080021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 37\n# indefinite length without termination\nmsg = 313233343030\nresult = invalid\nsig = 303c02803ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 38\n# indefinite length without termination\nmsg = 313233343030\nresult = invalid\nsig = 303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a040280617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 39\n# removing sequence\nmsg = 313233343030\nresult = invalid\nsig = \n\n# tcId = 40\n# lonely sequence tag\nmsg = 313233343030\nresult = invalid\nsig = 30\n\n# tcId = 41\n# appending 0's to sequence\nmsg = 313233343030\nresult = invalid\nsig = 303e021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad9810000\n\n# tcId = 42\n# prepending 0's to sequence\nmsg = 313233343030\nresult = invalid\nsig = 303e0000021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 43\n# appending unused 0's to sequence\nmsg = 313233343030\nresult = invalid\nsig = 303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad9810000\n\n# tcId = 44\n# appending null value to sequence\nmsg = 313233343030\nresult = invalid\nsig = 303e021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad9810500\n\n# tcId = 45\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 3041498177303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 46\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 30402500303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 47\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 303e303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad9810004deadbeef\n\n# tcId = 48\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 30412221498177021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 49\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 304022202500021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 50\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 3044221e021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a040004deadbeef021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 51\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 3041021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a042221498177021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 52\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 3040021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a0422202500021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 53\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 3044021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04221e021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad9810004deadbeef\n\n# tcId = 54\n# including undefined tags\nmsg = 313233343030\nresult = invalid\nsig = 3044aa00bb00cd00303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 55\n# including undefined tags\nmsg = 313233343030\nresult = invalid\nsig = 3042aa02aabb303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 56\n# including undefined tags\nmsg = 313233343030\nresult = invalid\nsig = 30442224aa00bb00cd00021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 57\n# including undefined tags\nmsg = 313233343030\nresult = invalid\nsig = 30422222aa02aabb021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 58\n# including undefined tags\nmsg = 313233343030\nresult = invalid\nsig = 3044021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a042224aa00bb00cd00021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 59\n# including undefined tags\nmsg = 313233343030\nresult = invalid\nsig = 3042021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a042222aa02aabb021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 60\n# truncated length of sequence\nmsg = 313233343030\nresult = invalid\nsig = 3081\n\n# tcId = 61\n# using composition with indefinite length\nmsg = 313233343030\nresult = invalid\nsig = 3080303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad9810000\n\n# tcId = 62\n# using composition with indefinite length\nmsg = 313233343030\nresult = invalid\nsig = 30402280021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a040000021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 63\n# using composition with indefinite length\nmsg = 313233343030\nresult = invalid\nsig = 3040021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a042280021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad9810000\n\n# tcId = 64\n# using composition with wrong tag\nmsg = 313233343030\nresult = invalid\nsig = 3080313c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad9810000\n\n# tcId = 65\n# using composition with wrong tag\nmsg = 313233343030\nresult = invalid\nsig = 30402280031c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a040000021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 66\n# using composition with wrong tag\nmsg = 313233343030\nresult = invalid\nsig = 3040021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a042280031c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad9810000\n\n# tcId = 67\n# Replacing sequence with NULL\nmsg = 313233343030\nresult = invalid\nsig = 0500\n\n# tcId = 68\n# changing tag value of sequence\nmsg = 313233343030\nresult = invalid\nsig = 2e3c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 69\n# changing tag value of sequence\nmsg = 313233343030\nresult = invalid\nsig = 2f3c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 70\n# changing tag value of sequence\nmsg = 313233343030\nresult = invalid\nsig = 313c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 71\n# changing tag value of sequence\nmsg = 31",
     "3233343030\nresult = invalid\nsig = 323c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 72\n# changing tag value of sequence\nmsg = 313233343030\nresult = invalid\nsig = ff3c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 73\n# dropping value of sequence\nmsg = 313233343030\nresult = invalid\nsig = 3000\n\n# tcId = 74\n# using composition for sequence\nmsg = 313233343030\nresult = invalid\nsig = 3040300102303b1c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 75\n# truncate sequence\nmsg = 313233343030\nresult = invalid\nsig = 303b021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad9\n\n# tcId = 76\n# truncate sequence\nmsg = 313233343030\nresult = invalid\nsig = 303b1c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 77\n# indefinite length\nmsg = 313233343030\nresult = invalid\nsig = 3080021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad9810000\n# This is a signature with correct values for (r, s) but using some alternative\n# BER encoding instead of DER encoding. Implementations should not accept such\n# signatures to limit signature malleability.\n\n# tcId = 78\n# indefinite length with truncated delimiter\nmsg = 313233343030\nresult = invalid\nsig = 3080021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad98100\n\n# tcId = 79\n# indefinite length with additional element\nmsg = 313233343030\nresult = invalid\nsig = 3080021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad98105000000\n\n# tcId = 80\n# indefinite length with truncated element\nmsg = 313233343030\nresult = invalid\nsig = 3080021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981060811220000\n\n# tcId = 81\n# indefinite length with garbage\nmsg = 313233343030\nresult = invalid\nsig = 3080021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad9810000fe02beef\n\n# tcId = 82\n# indefinite length with nonempty EOC\nmsg = 313233343030\nresult = invalid\nsig = 3080021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad9810002beef\n\n# tcId = 83\n# prepend empty sequence\nmsg = 313233343030\nresult = invalid\nsig = 303e3000021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 84\n# append empty sequence\nmsg = 313233343030\nresult = invalid\nsig = 303e021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad9813000\n\n# tcId = 85\n# sequence of sequence\nmsg = 313233343030\nresult = invalid\nsig = 303e303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 86\n# truncated sequence\nmsg = 313233343030\nresult = invalid\nsig = 301e021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04\n\n# tcId = 87\n# repeat element in sequence\nmsg = 313233343030\nresult = invalid\nsig = 305a021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 88\n# removing integer\nmsg = 313233343030\nresult = invalid\nsig = 301e021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 89\n# lonely integer tag\nmsg = 313233343030\nresult = invalid\nsig = 301f02021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 90\n# lonely integer tag\nmsg = 313233343030\nresult = invalid\nsig = 301f021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a0402\n\n# tcId = 91\n# appending 0's to integer\nmsg = 313233343030\nresult = invalid\nsig = 303e021e3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a040000021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 92\n# appending 0's to integer\nmsg = 313233343030\nresult = invalid\nsig = 303e021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021e617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad9810000\n\n# tcId = 93\n# prepending 0's to integer\nmsg = 313233343030\nresult = invalid\nsig = 303e021e00003ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n# This is a signature with correct values for (r, s) but using some alternative\n# BER encoding instead of DER encoding. Implementations should not accept such\n# signatures to limit signature malleability.\n\n# tcId = 94\n# prepending 0's to integer\nmsg = 313233343030\nresult = invalid\nsig = 303e021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021e0000617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n# This is a signature with correct values for (r, s) but using some alternative\n# BER encoding instead of DER encoding. Implementations should not accept such\n# signatures to limit signature malleability.\n\n# tcId = 95\n# appending unused 0's to integer\nmsg = 313233343030\nresult = invalid\nsig = 303e021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a040000021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 96\n# appending null value to integer\nmsg = 313233343030\nresult = invalid\nsig = 303e021e3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a040500021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 97\n# appending null value to integer\nmsg = 313233343030\nresult = invalid\nsig = 303e021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021e617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad9810500\n\n# tcId = 98\n# truncated length of integer\nmsg = 313233343030\nresult = invalid\nsig = 30200281021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 99\n# truncated length of integer\nmsg = 313233343030\nresult = invalid\nsig = 3020021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a040281\n\n# tcId = 100\n# Replacing integer with NULL\nmsg = 313233343030\nresult = invalid\nsig = 30200500021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 101\n# Replacing integer with NULL\nmsg = 313233343030\nresult = invalid\nsig = 3020021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a040500\n\n# tcId = 102\n# changing tag value of integer\nmsg = 313233343030\nresult = invalid\nsig = 303c001c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 103\n# changing tag value of integer\nmsg = 313233343030\nresult = invalid\nsig = 303c011c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 104\n# changing tag value of integer\nmsg = 313233343030\nresult = invalid\nsig = 303c031c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 105\n# changing tag value of integer\nmsg = 313233343030\nresult = invalid\nsig = 303c041c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 106\n# changing tag value of integer\nmsg = 313233343030\nresult = invalid\nsig = 303cff1c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 107\n# changing tag value of integer\nmsg = 313233343030\nresult = invalid\nsig = 303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04001c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 108\n# changing tag value of integer\nmsg = 313233343030\nresult = invalid\nsig = 303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04011c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981\n\n# tcId = 109\n# changing tag value of integer\nmsg = 313233343030\nresult = invalid\n",
@@ -3087,9 +3068,9 @@
     "1's\nmsg = 4d657373616765\nresult = valid\nsig = 303c021c36245ef126b5b51e459f84eaaad5a495061f0471dc8c23f1c5f16282021c39e31d72a06ba8e14fcf95778e07bc16a2628e39449da8857d506edc\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.uncompressed = 0426e5abf135cb54eaaa16b69e4b0b292275344e88a09df6df80000000eab891de54e3f26ff50ab989f333dac551583d468ae623c596434af0]\n[key.wx = 26e5abf135cb54eaaa16b69e4b0b292275344e88a09df6df80000000]\n[key.wy = 0eab891de54e3f26ff50ab989f333dac551583d468ae623c596434af0]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a000426e5abf135cb54eaaa16b69e4b0b292275344e88a09df6df80000000eab891de54e3f26ff50ab989f333dac551583d468ae623c596434af0]\n[sha = SHA-256]\n\n# tcId = 344\n# x-coordinate of the public key has many trailing 0's\nmsg = 4d657373616765\nresult = valid\nsig = 303c021c258682975df8bca7f203f771ebeb478ef637360c860fc386cfb21745021c7663e70188047e41469a2a35c8c330dd900f2340ba82aafd22962a96\n\n# tcId = 345\n# x-coordinate of the public key has many trailing 0's\nmsg = 4d657373616765\nresult = valid\nsig = 303e021d0085c98614f36c0d66f8d87834cae978611b7b4eebf59a46bea1b89ae9021d00d1a18e378dda840e06b60f6279bf0a2231d9fa2d8d2c31e88bc1bdd7\n\n# tcId = 346\n# x-coordinate of the public key has many trailing 0's\nmsg = 4d657373616765\nresult = valid\nsig = 303e021d00ca7b7432ba41ff2112e1116fffde89bbd68f5ce67fe5513d16c8e6f7021d00e421b7599e0180798acc2006451603cda2db1d582741116e6033ce5f\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.uncompressed = 04ec627f345545d03f8c6dbd08e575527116567fe375f9ecaaffffffff41bf705697d5f716bcf78718d5393b63a98691f4a1f24246375538fd]\n[key.wx = 0ec627f345545d03f8c6dbd08e575527116567fe375f9ecaaffffffff]\n[key.wy = 41bf705697d5f716bcf78718d5393b63a98691f4a1f24246375538fd]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004ec627f345545d03f8c6dbd08e575527116567fe375f9ecaaffffffff41bf705697d5f716bcf78718d5393b63a98691f4a1f24246375538fd]\n[sha = SHA-256]\n\n# tcId = 347\n# x-coordinate of the public key has many trailing 1's\nmsg = 4d657373616765\nresult = valid\nsig = 303c021c19397fe5d3ecabf80fc624c1bf379564387517c185087dc97d605069021c33b5773e9aaf6c34cb612cfc81efd3bf9c22224e8c4fa1bfccf5c501\n\n# tcId = 348\n# x-coordinate of the public key has many trailing 1's\nmsg = 4d657373616765\nresult = valid\nsig = 303d021c70f24f5c164164bfbb8459aa12a981aa312dbcf00204326ebaaabdc8021d00f5cebee8caedae8662c43501665084b45d2f494fb70d603043543dc4\n\n# tcId = 349\n# x-coordinate of the public key has many trailing 1's\nmsg = 4d657373616765\nresult = valid\nsig = 303d021c0bf2d86ecaa8b56aca5e8f8ebcb45081d078a14555b75f5be8e9b132021d009a55b3ce4734849966b5034ccd9b19f76407ee0241c3f58e7b8fc89a\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.uncompressed = 0415016e52b36472d536477605fb805dd3903082a062d1ea30af9e555a00000000762d28f1fdc219184f81681fbff566d465b5f1f31e872df5]\n[key.wx = 15016e52b36472d536477605fb805dd3903082a062d1ea30af9e555a]\n[key.wy = 762d28f1fdc219184f81681fbff566d465b5f1f31e872df5]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a000415016e52b36472d536477605fb805dd3903082a062d1ea30af9e555a00000000762d28f1fdc219184f81681fbff566d465b5f1f31e872df5]\n[sha = SHA-256]\n\n# tcId = 350\n# y-coordinate of the public key is small\nmsg = 4d657373616765\nresult = valid\nsig = 303e021d00bfc5dc4434cd09369610687d38d2d418b63fd475dea246a456b25a3a021d00b171dfa6cf722f20816370a868785da842b37bac31d7b78e6751fc50\n\n# tcId = 351\n# y-coordinate of the public key is small\nmsg = 4d657373616765\nresult = valid\nsig = 303e021d008fdbe8da646c5642d767c7dbeb3872b1edab6e37365805f0e94ce0a9021d00bcf35ab81222883dd3526cb0cf93138f4687cd0b10c2b0a126385161\n\n# tcId = 352\n# y-coordinate of the public key is small\nmsg = 4d657373616765\nresult = valid\nsig = 303d021d00e23a11275848fd4f8b6f4ac4fc305eae981d3b7dc453e5a980c46422021c1a875693f24a03ea1614c4c3bbd0dd7221429f22b337ea7d98348ca4\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.uncompressed = 0415016e52b36472d536477605fb805dd3903082a062d1ea30af9e555affffffff89d2d70e023de6e7b07e97df400a992b9a4a0e0ce178d20c]\n[key.wx = 15016e52b36472d536477605fb805dd3903082a062d1ea30af9e555a]\n[key.wy = 0ffffffff89d2d70e023de6e7b07e97df400a992b9a4a0e0ce178d20c]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a000415016e52b36472d536477605fb805dd3903082a062d1ea30af9e555affffffff89d2d70e023de6e7b07e97df400a992b9a4a0e0ce178d20c]\n[sha = SHA-256]\n\n# tcId = 353\n# y-coordinate of the public key is large\nmsg = 4d657373616765\nresult = valid\nsig = 303d021c76645164ff9af3a1a9205fda2eef326d2bffc795dcc4829547fe01dd021d00b65bba503719314b27734dd06b1395d540af8396029b78b84e0149eb\n\n# tcId = 354\n# y-coordinate of the public key is large\nmsg = 4d657373616765\nresult = valid\nsig = 303c021c32fa0ca7e07f1f86ac350734994e1f31b6da9c82f93dced2b983c29c021c7b7891282206a45711bdfcb2a102b5d289df84ff5778548603574004\n\n# tcId = 355\n# y-coordinate of the public key is large\nmsg = 4d657373616765\nresult = valid\nsig = 303d021c2d5492478ca64e5111dfd8521867b6477b7e78227849ad090b855694021d00a532f5a2fa3594af81cd5928b81b4057da717be5fb42a3a86c68190d\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.uncompressed = 0400000000f7e4713d085112112c37cdf4601ff688da796016b71a727ade5a9ec165054cc987f9dc87e9991b92e4fa649ca655eeae9f2a30e1]\n[key.wx = 0f7e4713d085112112c37cdf4601ff688da796016b71a727a]\n[key.wy = 0de5a9ec165054cc987f9dc87e9991b92e4fa649ca655eeae9f2a30e1]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a000400000000f7e4713d085112112c37cdf4601ff688da796016b71a727ade5a9ec165054cc987f9dc87e9991b92e4fa649ca655eeae9f2a30e1]\n[sha = SHA-256]\n\n# tcId = 356\n# x-coordinate of the public key is small\nmsg = 4d657373616765\nresult = valid\nsig = 303d021c191eee5daf55cd499e8539cb2cff797cfec5d566d2027bf9f8d64693021d00dadfeae8131f64d96b94fd340197caa2bc04818554812feef3343070\n\n# tcId = 357\n# x-coordinate of the public key is small\nmsg = 4d657373616765\nresult = valid\nsig = 303e021d00e0e2c08180b8a207ee9105a7d379fa112368e8370fa09dfde4a45c45021d00c717bc0860e016e7ce48f8fe6a299b36906a6055adad93b416ce8838\n\n# tcId = 358\n# x-coordinate of the public key is small\nmsg = 4d657373616765\nresult = valid\nsig = 303d021c1b919ef93532292743bb2e1b7b4894fd847c6e5de52a08e1b0f2dcfb021d00c2d30d6b7594d8dbd261491ae1d58779505b075b64e5564dc97a418b\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.uncompressed = 04ffffffffeadf7cee8d34d04cf22c8f7de35674fb2f501d242a76f72586c409309d398e60ce1e0a4c9e05a9d32627577e8ce2cc7f3afa2c3e]\n[key.wx = 0ffffffffeadf7cee8d34d04cf22c8f7de35674fb2f501d242a76f725]\n[key.wy = 086c409309d398e60ce1e0a4c9e05a9d32627577e8ce2cc7f3afa2c3e]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004ffffffffeadf7cee8d34d04cf22c8f7de35674fb2f501d242a76f72586c409309d398e60ce1e0a4c9e05a9d32627577e8ce2cc7f3afa2c3e]\n[sha = SHA-256]\n\n# tcId = 359\n# x-coordinate of the public key is large\nmsg = 4d657373616765\nresult = valid\nsig = 303d021d00e75db49ed33ff2885ea6100cc95b8fe1b9242ea4248db07bcac2e020021c796c866142ae8eb75bb0499c668c6fe45497692fbcc66b37c2e4624f\n\n# tcId = 360\n# x-coordinate of the public key is large\nmsg = 4d657373616765\nresult = valid\nsig = 303c021c1f81cd924362ec825890307b9b3936e0d8f728a7c84bdb43c5cf0433021c39d3e46a03040ad41ac026b18e0629f6145e3dc8d1e6bbe200c8482b\n\n# tcId = 361\n# x-coordinate of the public key is large\nmsg = 4d657373616765\nresult = valid\nsig = 303c021c00fda613aa67ca42673ad4309f3f0f05b2569f3dee63f4aa9cc54cf3021c1e5a64b68a37e5b201c918303dc7a40439aaeacf019c5892a8f6d0ce\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.uncompressed = 04b0013c6fbff6f09fecda1c263ef65399d4cf989ca5fc4f8fff0fe9e1000000000e2ab0e8495e859eb2afb00769d6e7fe626a119167c0b6bc]\n[key.wx = 0b0013c6fbff6f09fecda1c263ef65399d4cf989ca5fc4f8fff0fe9e1]\n[key.wy = 0e2ab0e8495e859eb2afb00769d6e7fe626a119167c0b6bc]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004b0013c6fbff6f09fecda1c263ef65399d4cf989ca5fc4f8fff0fe9e1000000000e2ab0e8495e859eb2afb00769d6e7fe626a119167c0b6bc]\n[sha = SHA-256]\n\n# tcId = 362\n# y-coordinate of the public key is small\nmsg = 4d657373616765\nresult = valid\nsig = 303e021d00b932b3f7e6467e1ec7a561f31160248c7f224550a8508788634b53ce021d00a0c5312acf9e801aff6d6fc98550c",
     "fa712bbf65937165a36f2c32dc9\n\n# tcId = 363\n# y-coordinate of the public key is small\nmsg = 4d657373616765\nresult = valid\nsig = 303d021d00e509593fb09245ee8226ce72786b0cc352be555a7486be628f4fd00c021c0b7abde0061b1e07bf13319150a4ff6a464abab636ab4e297b0d7633\n\n# tcId = 364\n# y-coordinate of the public key is small\nmsg = 4d657373616765\nresult = valid\nsig = 303c021c6e54f941204d4639b863c98a65b7bee318d51ab1900a8f345eac6f07021c0da5054829214ecde5e10579b36a2fe6426c24b064ed77c38590f25c\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.uncompressed = 04b0013c6fbff6f09fecda1c263ef65399d4cf989ca5fc4f8fff0fe9e1fffffffff1d54f17b6a17a614d504ff7962918019d95ee6e983f4945]\n[key.wx = 0b0013c6fbff6f09fecda1c263ef65399d4cf989ca5fc4f8fff0fe9e1]\n[key.wy = 0fffffffff1d54f17b6a17a614d504ff7962918019d95ee6e983f4945]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004b0013c6fbff6f09fecda1c263ef65399d4cf989ca5fc4f8fff0fe9e1fffffffff1d54f17b6a17a614d504ff7962918019d95ee6e983f4945]\n[sha = SHA-256]\n\n# tcId = 365\n# y-coordinate of the public key is large\nmsg = 4d657373616765\nresult = valid\nsig = 303d021d0085ea4ab3ffdc992330c0ca8152faf991386bce82877dbb239ba654f6021c0806c6baf0ebea4c1aaa190e7d4325d46d1f7789d550632b70b5fc9b\n\n# tcId = 366\n# y-coordinate of the public key is large\nmsg = 4d657373616765\nresult = valid\nsig = 303d021c44d53debb646b73485402eab2d099081b97b1243c025b624f0dd67ea021d00e5de789a7d4b77eac6d7bba41658e6e4dc347dabed2f9680c04a6f55\n\n# tcId = 367\n# y-coordinate of the public key is large\nmsg = 4d657373616765\nresult = valid\nsig = 303c021c1526eb2f657ebea9af4ca184b975c02372c88e24e835f3f5774c0e12021c1f1ecce38ee52372cb201907794de17b6d6c1afa13c316c51cb07bc7\n\n",
 };
-static const size_t kLen68 = 139779;
+static const size_t kLen67 = 139779;
 
-static const char *kData68[] = {
+static const char *kData67[] = {
     "# Imported from Wycheproof's ecdsa_secp224r1_sha512_test.json.\n# This file is generated by convert_wycheproof.go. Do not edit by hand.\n#\n# Algorithm: ECDSA\n# Generator version: 0.4.12\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.uncompressed = 04eada93be10b2449e1e8bb58305d52008013c57107c1a20a317a6cba7eca672340c03d1d2e09663286691df55069fa25490c9dd9f9c0bb2b5]\n[key.wx = 0eada93be10b2449e1e8bb58305d52008013c57107c1a20a317a6cba7]\n[key.wy = 0eca672340c03d1d2e09663286691df55069fa25490c9dd9f9c0bb2b5]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004eada93be10b2449e1e8bb58305d52008013c57107c1a20a317a6cba7eca672340c03d1d2e09663286691df55069fa25490c9dd9f9c0bb2b5]\n[sha = SHA-512]\n\n# tcId = 1\n# signature malleability\nmsg = 313233343030\nresult = valid\nsig = 303c021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021c394766fb67a65fe0af6c154f7cbd285ea180b4c6150cdafafb0f6f0f\n\n# tcId = 2\n# Legacy:ASN encoding of s misses leading 0\nmsg = 313233343030\nresult = acceptable\nsig = 303c021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021cc6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e\n# Some implementations of ECDSA and DSA incorrectly encode r and s by not\n# including leading zeros in the ASN encoding of integers when necessary. Hence,\n# some implementations (e.g. jdk) allow signatures with incorrect ASN encodings\n# assuming that the signature is otherwise valid.\n\n# tcId = 3\n# valid\nmsg = 313233343030\nresult = valid\nsig = 303d021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e\n\n# tcId = 4\n# long form encoding of length\nmsg = 313233343030\nresult = invalid\nsig = 30813d021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e\n# This is a signature with correct values for (r, s) but using some alternative\n# BER encoding instead of DER encoding. Implementations should not accept such\n# signatures to limit signature malleability.\n\n# tcId = 5\n# long form encoding of length\nmsg = 313233343030\nresult = invalid\nsig = 303e02811c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e\n# This is a signature with correct values for (r, s) but using some alternative\n# BER encoding instead of DER encoding. Implementations should not accept such\n# signatures to limit signature malleability.\n\n# tcId = 6\n# long form encoding of length\nmsg = 313233343030\nresult = invalid\nsig = 303e021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab02811d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e\n# This is a signature with correct values for (r, s) but using some alternative\n# BER encoding instead of DER encoding. Implementations should not accept such\n# signatures to limit signature malleability.\n\n# tcId = 7\n# length contains leading 0\nmsg = 313233343030\nresult = invalid\nsig = 3082003d021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e\n# This is a signature with correct values for (r, s) but using some alternative\n# BER encoding instead of DER encoding. Implementations should not accept such\n# signatures to limit signature malleability.\n\n# tcId = 8\n# length contains leading 0\nmsg = 313233343030\nresult = invalid\nsig = 303f0282001c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e\n# This is a signature with correct values for (r, s) but using some alternative\n# BER encoding instead of DER encoding. Implementations should not accept such\n# signatures to limit signature malleability.\n\n# tcId = 9\n# length contains leading 0\nmsg = 313233343030\nresult = invalid\nsig = 303f021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab0282001d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e\n# This is a signature with correct values for (r, s) but using some alternative\n# BER encoding instead of DER encoding. Implementations should not accept such\n# signatures to limit signature malleability.\n\n# tcId = 10\n# wrong length\nmsg = 313233343030\nresult = invalid\nsig = 303e021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e\n\n# tcId = 11\n# wrong length\nmsg = 313233343030\nresult = invalid\nsig = 303c021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e\n\n# tcId = 12\n# wrong length\nmsg = 313233343030\nresult = invalid\nsig = 303d021d691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e\n\n# tcId = 13\n# wrong length\nmsg = 313233343030\nresult = invalid\nsig = 303d021b691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e\n\n# tcId = 14\n# wrong length\nmsg = 313233343030\nresult = invalid\nsig = 303d021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021e00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e\n\n# tcId = 15\n# wrong length\nmsg = 313233343030\nresult = invalid\nsig = 303d021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021c00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e\n\n# tcId = 16\n# uint32 overflow in length\nmsg = 313233343030\nresult = invalid\nsig = 3085010000003d021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e\n\n# tcId = 17\n# uint32 overflow in length\nmsg = 313233343030\nresult = invalid\nsig = 30420285010000001c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e\n\n# tcId = 18\n# uint32 overflow in length\nmsg = 313233343030\nresult = invalid\nsig = 3042021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab0285010000001d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e\n\n# tcId = 19\n# uint64 overflow in length\nmsg = 313233343030\nresult = invalid\nsig = 308901000000000000003d021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e\n\n# tcId = 20\n# uint64 overflow in length\nmsg = 313233343030\nresult = invalid\nsig = 3046028901000000000000001c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e\n\n# tcId = 21\n# uint64 overflow in length\nmsg = 313233343030\nresult = invalid\nsig = 3046021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab028901000000000000001d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e\n\n# tcId = 22\n# length = 2**31 - 1\nmsg = 313233343030\nresult = invalid\nsig = 30847fffffff021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e\n\n# tcId = 23\n# length = 2**31 - 1\nmsg = 313233343030\nresult = invalid\nsig = 304102847fffffff691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e\n\n# tcId = 24\n# length = 2**31 - 1\nmsg = 313233343030\nresult = invalid\nsig = 3041021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab02847fffffff00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e\n\n# tcId = 25\n# length = 2**32 - 1\nmsg = 313233343030\nresult = invalid\nsig = 3084ffffffff021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e\n\n# tcId = 26\n# length = 2**32 - 1\nmsg = 313233343030\nresult = invalid\nsig = 30410284ffffffff691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e\n\n# tcId = 27\n# length = 2**32 - 1\nmsg = 313233343030\nresult = invalid\nsig = 3041021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab0284ffffffff00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e\n\n# tcId = 28\n# length = 2**40 - 1\nmsg = 313233343030\nresult = invalid\nsig = 3085ffffffffff021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e\n\n# tcId = 29\n# length = 2**40 - 1\nmsg = 313233343030\nresult ",
     "= invalid\nsig = 30420285ffffffffff691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e\n\n# tcId = 30\n# length = 2**40 - 1\nmsg = 313233343030\nresult = invalid\nsig = 3042021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab0285ffffffffff00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e\n\n# tcId = 31\n# length = 2**64 - 1\nmsg = 313233343030\nresult = invalid\nsig = 3088ffffffffffffffff021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e\n\n# tcId = 32\n# length = 2**64 - 1\nmsg = 313233343030\nresult = invalid\nsig = 30450288ffffffffffffffff691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e\n\n# tcId = 33\n# length = 2**64 - 1\nmsg = 313233343030\nresult = invalid\nsig = 3045021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab0288ffffffffffffffff00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e\n\n# tcId = 34\n# incorrect length\nmsg = 313233343030\nresult = invalid\nsig = 30ff021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e\n\n# tcId = 35\n# incorrect length\nmsg = 313233343030\nresult = invalid\nsig = 303d02ff691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e\n\n# tcId = 36\n# incorrect length\nmsg = 313233343030\nresult = invalid\nsig = 303d021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab02ff00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e\n\n# tcId = 37\n# indefinite length without termination\nmsg = 313233343030\nresult = invalid\nsig = 3080021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e\n\n# tcId = 38\n# indefinite length without termination\nmsg = 313233343030\nresult = invalid\nsig = 303d0280691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e\n\n# tcId = 39\n# indefinite length without termination\nmsg = 313233343030\nresult = invalid\nsig = 303d021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab028000c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e\n\n# tcId = 40\n# removing sequence\nmsg = 313233343030\nresult = invalid\nsig = \n\n# tcId = 41\n# lonely sequence tag\nmsg = 313233343030\nresult = invalid\nsig = 30\n\n# tcId = 42\n# appending 0's to sequence\nmsg = 313233343030\nresult = invalid\nsig = 303f021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e0000\n\n# tcId = 43\n# prepending 0's to sequence\nmsg = 313233343030\nresult = invalid\nsig = 303f0000021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e\n\n# tcId = 44\n# appending unused 0's to sequence\nmsg = 313233343030\nresult = invalid\nsig = 303d021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e0000\n\n# tcId = 45\n# appending null value to sequence\nmsg = 313233343030\nresult = invalid\nsig = 303f021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e0500\n\n# tcId = 46\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 3042498177303d021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e\n\n# tcId = 47\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 30412500303d021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e\n\n# tcId = 48\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 303f303d021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e0004deadbeef\n\n# tcId = 49\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 30422221498177021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e\n\n# tcId = 50\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 304122202500021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e\n\n# tcId = 51\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 3045221e021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab0004deadbeef021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e\n\n# tcId = 52\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 3042021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab2222498177021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e\n\n# tcId = 53\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 3041021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab22212500021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e\n\n# tcId = 54\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 3045021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab221f021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e0004deadbeef\n\n# tcId = 55\n# including undefined tags\nmsg = 313233343030\nresult = invalid\nsig = 3045aa00bb00cd00303d021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e\n\n# tcId = 56\n# including undefined tags\nmsg = 313233343030\nresult = invalid\nsig = 3043aa02aabb303d021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e\n\n# tcId = 57\n# including undefined tags\nmsg = 313233343030\nresult = invalid\nsig = 30452224aa00bb00cd00021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e\n\n# tcId = 58\n# including undefined tags\nmsg = 313233343030\nresult = invalid\nsig = 30432222aa02aabb021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e\n\n# tcId = 59\n# including undefined tags\nmsg = 313233343030\nresult = invalid\nsig = 3045021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab2225aa00bb00cd00021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e\n\n# tcId = 60\n# including undefined tags\nmsg = 313233343030\nresult = invalid\nsig = 3043021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab2223aa02aabb021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e\n\n# tcId = 61\n# truncated length of sequence\nmsg = 313233343030\nresult = invalid\nsig = 3081\n\n# tcId = 62\n# using composition with indefinite length\nmsg = 313233343030\nresult = invalid\nsig = 3080303d021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e0000\n\n# tcId = 63\n# using composition with indefinite length\nmsg = 313233343030\nresult = invalid\nsig = 30412280021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab0000021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e\n\n# tcId = 64\n# using composition with indefinite length\nmsg = 313233343030\nresult = invalid\nsig = 3041021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab2280021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e0000\n\n# tcId = 65\n# using composition with wrong tag\nmsg = 313233343030\nresult = invalid\nsig = 3080313d021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e0000\n\n# tcId = 66\n# using composition with wrong tag\nmsg = 313233343030\nresult = invalid\nsig = 30412280031c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab0000021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e\n\n# tcId = 67\n# using composition with wrong tag\nmsg = 313233343030\nresult = invalid\nsig = 3041021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab2280031d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e0000\n\n# tcId = 68\n# Replacing sequence with NULL\nmsg = 313233343030\nresult = invalid\nsig = 0500\n\n# tcId = 69\n# changing tag value of sequence\nmsg = 3132333",
     "43030\nresult = invalid\nsig = 2e3d021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e\n\n# tcId = 70\n# changing tag value of sequence\nmsg = 313233343030\nresult = invalid\nsig = 2f3d021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e\n\n# tcId = 71\n# changing tag value of sequence\nmsg = 313233343030\nresult = invalid\nsig = 313d021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e\n\n# tcId = 72\n# changing tag value of sequence\nmsg = 313233343030\nresult = invalid\nsig = 323d021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e\n\n# tcId = 73\n# changing tag value of sequence\nmsg = 313233343030\nresult = invalid\nsig = ff3d021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e\n\n# tcId = 74\n# dropping value of sequence\nmsg = 313233343030\nresult = invalid\nsig = 3000\n\n# tcId = 75\n# using composition for sequence\nmsg = 313233343030\nresult = invalid\nsig = 3041300102303c1c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e\n\n# tcId = 76\n# truncate sequence\nmsg = 313233343030\nresult = invalid\nsig = 303c021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb\n\n# tcId = 77\n# truncate sequence\nmsg = 313233343030\nresult = invalid\nsig = 303c1c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e\n\n# tcId = 78\n# indefinite length\nmsg = 313233343030\nresult = invalid\nsig = 3080021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e0000\n# This is a signature with correct values for (r, s) but using some alternative\n# BER encoding instead of DER encoding. Implementations should not accept such\n# signatures to limit signature malleability.\n\n# tcId = 79\n# indefinite length with truncated delimiter\nmsg = 313233343030\nresult = invalid\nsig = 3080021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e00\n\n# tcId = 80\n# indefinite length with additional element\nmsg = 313233343030\nresult = invalid\nsig = 3080021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e05000000\n\n# tcId = 81\n# indefinite length with truncated element\nmsg = 313233343030\nresult = invalid\nsig = 3080021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e060811220000\n\n# tcId = 82\n# indefinite length with garbage\nmsg = 313233343030\nresult = invalid\nsig = 3080021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e0000fe02beef\n\n# tcId = 83\n# indefinite length with nonempty EOC\nmsg = 313233343030\nresult = invalid\nsig = 3080021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e0002beef\n\n# tcId = 84\n# prepend empty sequence\nmsg = 313233343030\nresult = invalid\nsig = 303f3000021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e\n\n# tcId = 85\n# append empty sequence\nmsg = 313233343030\nresult = invalid\nsig = 303f021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e3000\n\n# tcId = 86\n# sequence of sequence\nmsg = 313233343030\nresult = invalid\nsig = 303f303d021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e\n\n# tcId = 87\n# truncated sequence\nmsg = 313233343030\nresult = invalid\nsig = 301e021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab\n\n# tcId = 88\n# repeat element in sequence\nmsg = 313233343030\nresult = invalid\nsig = 305c021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e\n\n# tcId = 89\n# removing integer\nmsg = 313233343030\nresult = invalid\nsig = 301f021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e\n\n# tcId = 90\n# lonely integer tag\nmsg = 313233343030\nresult = invalid\nsig = 302002021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e\n\n# tcId = 91\n# lonely integer tag\nmsg = 313233343030\nresult = invalid\nsig = 301f021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab02\n\n# tcId = 92\n# appending 0's to integer\nmsg = 313233343030\nresult = invalid\nsig = 303f021e691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab0000021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e\n\n# tcId = 93\n# appending 0's to integer\nmsg = 313233343030\nresult = invalid\nsig = 303f021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021f00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e0000\n\n# tcId = 94\n# prepending 0's to integer\nmsg = 313233343030\nresult = invalid\nsig = 303f021e0000691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e\n# This is a signature with correct values for (r, s) but using some alternative\n# BER encoding instead of DER encoding. Implementations should not accept such\n# signatures to limit signature malleability.\n\n# tcId = 95\n# prepending 0's to integer\nmsg = 313233343030\nresult = invalid\nsig = 303f021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021f000000c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e\n# This is a signature with correct values for (r, s) but using some alternative\n# BER encoding instead of DER encoding. Implementations should not accept such\n# signatures to limit signature malleability.\n\n# tcId = 96\n# appending unused 0's to integer\nmsg = 313233343030\nresult = invalid\nsig = 303f021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab0000021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e\n\n# tcId = 97\n# appending null value to integer\nmsg = 313233343030\nresult = invalid\nsig = 303f021e691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab0500021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e\n\n# tcId = 98\n# appending null value to integer\nmsg = 313233343030\nresult = invalid\nsig = 303f021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021f00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e0500\n\n# tcId = 99\n# truncated length of integer\nmsg = 313233343030\nresult = invalid\nsig = 30210281021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e\n\n# tcId = 100\n# truncated length of integer\nmsg = 313233343030\nresult = invalid\nsig = 3020021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab0281\n\n# tcId = 101\n# Replacing integer with NULL\nmsg = 313233343030\nresult = invalid\nsig = 30210500021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e\n\n# tcId = 102\n# Replacing integer with NULL\nmsg = 313233343030\nresult = invalid\nsig = 3020021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab0500\n\n# tcId = 103\n# changing tag value of integer\nmsg = 313233343030\nresult = invalid\nsig = 303d001c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e\n\n# tcId = 104\n# changing tag value of integer\nmsg = 313233343030\nresult = invalid\nsig = 303d011c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e\n\n# tcId = 105\n# changing tag value of integer\nmsg = 313233343030\nresult = invalid\nsig = 303d031c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e\n\n# tcId = 106\n# changing tag value of integer\nmsg = 313233343030\nresult = invalid\nsig = 303d041c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e\n\n# tcId = 107\n# ch",
@@ -3109,9 +3090,9 @@
     "bb2cc91259\n\n# tcId = 416\n# x-coordinate of the public key has many trailing 0's\nmsg = 4d657373616765\nresult = valid\nsig = 303c021c689fce4b33d8212a663640a1ae0efaa7a7d7711beba719374fe634ee021c04bd9981fa52293063076f0fd70fc31875d580ef94f020d2f95440e0\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.uncompressed = 04ec627f345545d03f8c6dbd08e575527116567fe375f9ecaaffffffff41bf705697d5f716bcf78718d5393b63a98691f4a1f24246375538fd]\n[key.wx = 0ec627f345545d03f8c6dbd08e575527116567fe375f9ecaaffffffff]\n[key.wy = 41bf705697d5f716bcf78718d5393b63a98691f4a1f24246375538fd]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004ec627f345545d03f8c6dbd08e575527116567fe375f9ecaaffffffff41bf705697d5f716bcf78718d5393b63a98691f4a1f24246375538fd]\n[sha = SHA-512]\n\n# tcId = 417\n# x-coordinate of the public key has many trailing 1's\nmsg = 4d657373616765\nresult = valid\nsig = 303c021c2a4287e01510e7fb5fed2e1ccc3f2a6929cf7d03850e49d7ae8a504a021c355c3915f3fa9637dc8001438a8c04e15d14934cabd430feb0cb5ba5\n\n# tcId = 418\n# x-coordinate of the public key has many trailing 1's\nmsg = 4d657373616765\nresult = valid\nsig = 303d021d00b5bf795a38adb052b401468ffcab81103d2d9fca2e15b8d08ab98ce8021c5ec0d2c6aec71888c941af324c7272bec192abb292f9df82a24e8a41\n\n# tcId = 419\n# x-coordinate of the public key has many trailing 1's\nmsg = 4d657373616765\nresult = valid\nsig = 303d021c100ed07f467133bf10917f7a15ab2bfda519bdbc2653b95955e22211021d00b38a081f7c2e2b775d1da868d0381c09ba1559c9613b5be7159363ad\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.uncompressed = 0415016e52b36472d536477605fb805dd3903082a062d1ea30af9e555a00000000762d28f1fdc219184f81681fbff566d465b5f1f31e872df5]\n[key.wx = 15016e52b36472d536477605fb805dd3903082a062d1ea30af9e555a]\n[key.wy = 762d28f1fdc219184f81681fbff566d465b5f1f31e872df5]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a000415016e52b36472d536477605fb805dd3903082a062d1ea30af9e555a00000000762d28f1fdc219184f81681fbff566d465b5f1f31e872df5]\n[sha = SHA-512]\n\n# tcId = 420\n# y-coordinate of the public key is small\nmsg = 4d657373616765\nresult = valid\nsig = 303c021c54e6add8ac910e52c6228fe3980d8f586218334d8d859ba9a3329917021c5836cc79ec88519eab4a6b2614c501628c9fee32fbafd93e32158409\n\n# tcId = 421\n# y-coordinate of the public key is small\nmsg = 4d657373616765\nresult = valid\nsig = 303c021c1230d5409f379584b4d548b7bccba64baf81d512a9f2e6398c4e3a66021c1937a298f8cbdfa85b8e6fcf0a12be4966d80270cade85a0c37ee6f3\n\n# tcId = 422\n# y-coordinate of the public key is small\nmsg = 4d657373616765\nresult = valid\nsig = 303e021d00862f43b044fb32adb45e00378ba083ae761c84452054f17b1341bf5b021d0095d8d8e5e3a6cc2b0a06c792252ca11a642257721831578520f96b9e\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.uncompressed = 0415016e52b36472d536477605fb805dd3903082a062d1ea30af9e555affffffff89d2d70e023de6e7b07e97df400a992b9a4a0e0ce178d20c]\n[key.wx = 15016e52b36472d536477605fb805dd3903082a062d1ea30af9e555a]\n[key.wy = 0ffffffff89d2d70e023de6e7b07e97df400a992b9a4a0e0ce178d20c]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a000415016e52b36472d536477605fb805dd3903082a062d1ea30af9e555affffffff89d2d70e023de6e7b07e97df400a992b9a4a0e0ce178d20c]\n[sha = SHA-512]\n\n# tcId = 423\n# y-coordinate of the public key is large\nmsg = 4d657373616765\nresult = valid\nsig = 303d021d00cb5cabb1ca01b847a6bc70558d1e5d3a204d1741bbe800f4b159af35021c3580cc85f218394130bddf1c4eac04fe96f59f14fb436686950398be\n\n# tcId = 424\n# y-coordinate of the public key is large\nmsg = 4d657373616765\nresult = valid\nsig = 303d021d00c9d83dc04cf4ee89c405045d0fd1d704f627ca5bbe350f40b826bbc1021c74fedc9e55045e9759f2124460fdfb991dc620cfee6effc0b4adaa9e\n\n# tcId = 425\n# y-coordinate of the public key is large\nmsg = 4d657373616765\nresult = valid\nsig = 303d021c46dd65b6e7f10c0841841b01033a5befd3a0e78c85f1f390bb3cdf25021d00f33acea3d47cf0dd5273735b004104f6512ed641052509422c0325a7\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.uncompressed = 0400000000f7e4713d085112112c37cdf4601ff688da796016b71a727ade5a9ec165054cc987f9dc87e9991b92e4fa649ca655eeae9f2a30e1]\n[key.wx = 0f7e4713d085112112c37cdf4601ff688da796016b71a727a]\n[key.wy = 0de5a9ec165054cc987f9dc87e9991b92e4fa649ca655eeae9f2a30e1]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a000400000000f7e4713d085112112c37cdf4601ff688da796016b71a727ade5a9ec165054cc987f9dc87e9991b92e4fa649ca655eeae9f2a30e1]\n[sha = SHA-512]\n\n# tcId = 426\n# x-coordinate of the public key is small\nmsg = 4d657373616765\nresult = valid\nsig = 303e021d00ddb4a7e400a1e98118f474722da3f421f65a76eec61f4f7b699faf07021d00db80cba199859cdfe916d6ab3deb91d76aaf0ed554c8f9ed7e5aa59d\n\n# tcId = 427\n# x-coordinate of the public key is small\nmsg = 4d657373616765\nresult = valid\nsig = 303d021c4c260b546280604e4c80384721c9e803ef704e7fb70168e6730fc1f3021d00a8aceae219ac25c9f04231b4e0c171413db1d26df1c1e8430062eb2b\n\n# tcId = 428\n# x-coordinate of the public key is small\nmsg = 4d657373616765\nresult = valid\nsig = 303e021d00f4098d2c0240e78fceabb0183df0b39e7ad3e7f5d6da1587fa09853c021d00d42412b2abaa614c95eb11f9b9346282ce3a1c93aac35ce7aa372f4a\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.uncompressed = 04ffffffffeadf7cee8d34d04cf22c8f7de35674fb2f501d242a76f72586c409309d398e60ce1e0a4c9e05a9d32627577e8ce2cc7f3afa2c3e]\n[key.wx = 0ffffffffeadf7cee8d34d04cf22c8f7de35674fb2f501d242a76f725]\n[key.wy = 086c409309d398e60ce1e0a4c9e05a9d32627577e8ce2cc7f3afa2c3e]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004ffffffffeadf7cee8d34d04cf22c8f7de35674fb2f501d242a76f72586c409309d398e60ce1e0a4c9e05a9d32627577e8ce2cc7f3afa2c3e]\n[sha = SHA-512]\n\n# tcId = 429\n# x-coordinate of the public key is large\nmsg = 4d657373616765\nresult = valid\nsig = 303d021c48ddc497f9a4732c677e46c0e2bdabec54fc9d27e46ab595056db4d9021d00b8219ebbfaebc2fe4311efab0c35d4392751351bcc1971e8d01941e4\n\n# tcId = 430\n# x-coordinate of the public key is large\nmsg = 4d657373616765\nresult = valid\nsig = 303d021d00e1abaf51d27a6d7d4c9b28078325cac2d7ce3d5403916c68903760b7021c2c45a99e2770f782fee5ca1d713eaecf07e62d53c64b7cf93de9900d\n\n# tcId = 431\n# x-coordinate of the public key is large\nmsg = 4d657373616765\nresult = valid\nsig = 303d021d00868cd127c99e1149f7fc8d878cdfa986b62e99addea281149611ff15021c16e5953820135b7d462ce5434ef85920e973eec9e4d14d7cb3cc2a3f\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.uncompressed = 04b0013c6fbff6f09fecda1c263ef65399d4cf989ca5fc4f8fff0fe9e1000000000e2ab0e8495e859eb2afb00769d6e7fe626a119167c0b6bc]\n[key.wx = 0b0013c6fbff6f09fecda1c263ef65399d4cf989ca5fc4f8fff0fe9e1]\n[key.wy = 0e2ab0e8495e859eb2afb00769d6e7fe626a119167c0b6bc]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004b0013c6fbff6f09fecda1c263ef65399d4cf989ca5fc4f8fff0fe9e1000000000e2ab0e8495e859eb2afb00769d6e7fe626a119167c0b6bc]\n[sha = SHA-512]\n\n# tcId = 432\n# y-coordinate of the public key is small\nmsg = 4d657373616765\nresult = valid\nsig = 303e021d00a375929718ec4e6ada9c9370c51df6bdaee7ebab2a70675d42a0b6b3021d009eaf4802efaf7ca082ffbf5ed774af43792d9b3fd711c6b1c36112ff\n\n# tcId = 433\n# y-coordinate of the public key is small\nmsg = 4d657373616765\nresult = valid\nsig = 303d021d00d97b32f3bf8bc11ec2672dd6320418beeed99527a63fe4c52199ec61021c68dd9006b03319ccbe651d0bdaf84c63356f03cb007a6865ee3e0206\n\n# tcId = 434\n# y-coordinate of the public key is small\nmsg = 4d657373616765\nresult = valid\nsig = 303d021d008ee5794dc2e66f2584910ea1d8361e5b53db535adcf5c1c35e128309021c5d1d8b9b996c0a488e05af14421b86e9841f0cba706027fc827d4d95\n\n[key.curve = secp224r1]\n[key.keySize = 224]\n[key.type = ECPublicKey]\n[key.uncompressed = 04b0013c6fbff6f09fecda1c263ef65399d4cf989ca5fc4f8fff0fe9e1fffffffff1d54f17b6a17a614d504ff7962918019d95ee6e983f4945]\n[key.wx = 0b0013c6fbff6f09fecda1c263ef65399d4cf989ca5fc4f8fff0fe9e1]\n[key.wy = 0fffffffff1d54f17b6a17a614d504ff7962918019d95ee6e983f4945]\n[keyDer = 304e301006072a8648ce3d020106052b81040021033a0004b0013c6fbff6f09fecda1c263ef65399d4cf989ca5fc4f8fff0fe9e1fffffffff1d54f17b6a17a614d504ff7962918019d95ee6e983f4945]\n[sha = SHA-512]\n\n# tcId = 435\n# y-coordinate of the public key is large\nmsg = 4d657373616765\nresult = valid\nsig = 303d021c7999727c0cc02d88ef274012a762afcbb19e7fce19091a02acd00",
     "564021d00dbfacf67999f22c499d48a60a6fe4bbb746199c29957a1ec7a0900e0\n\n# tcId = 436\n# y-coordinate of the public key is large\nmsg = 4d657373616765\nresult = valid\nsig = 303c021c5797c21c0162e42f69693c6c0244dfdf9218c01e9235760177b61a54021c5452c887b27fb342a8a00d27579c7195dddb73df399233ed0dea567b\n\n# tcId = 437\n# y-coordinate of the public key is large\nmsg = 4d657373616765\nresult = valid\nsig = 303d021c0eb9dc5d67bb0d4009544f8654977907dfe770e7fae4571d31d7b4fa021d00ab5cda53e868bff5198be4be3681b186cb0c1396d272c71f093f8b12\n\n",
 };
-static const size_t kLen69 = 138649;
+static const size_t kLen68 = 138649;
 
-static const char *kData69[] = {
+static const char *kData68[] = {
     "# Imported from Wycheproof's ecdsa_secp256r1_sha256_test.json.\n# This file is generated by convert_wycheproof.go. Do not edit by hand.\n#\n# Algorithm: ECDSA\n# Generator version: 0.4.12\n\n[key.curve = secp256r1]\n[key.keySize = 256]\n[key.type = ECPublicKey]\n[key.uncompressed = 042927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e]\n[key.wx = 2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838]\n[key.wy = 0c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e]\n[keyDer = 3059301306072a8648ce3d020106082a8648ce3d030107034200042927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e]\n[sha = SHA-256]\n\n# tcId = 1\n# signature malleability\nmsg = 313233343030\nresult = valid\nsig = 304402202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e1802204cd60b855d442f5b3c7b11eb6c4e0ae7525fe710fab9aa7c77a67f79e6fadd76\n\n# tcId = 2\n# Legacy:ASN encoding of s misses leading 0\nmsg = 313233343030\nresult = acceptable\nsig = 304402202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180220b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n# Some implementations of ECDSA and DSA incorrectly encode r and s by not\n# including leading zeros in the ASN encoding of integers when necessary. Hence,\n# some implementations (e.g. jdk) allow signatures with incorrect ASN encodings\n# assuming that the signature is otherwise valid.\n\n# tcId = 3\n# valid\nmsg = 313233343030\nresult = valid\nsig = 304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 4\n# long form encoding of length\nmsg = 313233343030\nresult = invalid\nsig = 30814502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n# This is a signature with correct values for (r, s) but using some alternative\n# BER encoding instead of DER encoding. Implementations should not accept such\n# signatures to limit signature malleability.\n\n# tcId = 5\n# long form encoding of length\nmsg = 313233343030\nresult = invalid\nsig = 30460281202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n# This is a signature with correct values for (r, s) but using some alternative\n# BER encoding instead of DER encoding. Implementations should not accept such\n# signatures to limit signature malleability.\n\n# tcId = 6\n# long form encoding of length\nmsg = 313233343030\nresult = invalid\nsig = 304602202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e1802812100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n# This is a signature with correct values for (r, s) but using some alternative\n# BER encoding instead of DER encoding. Implementations should not accept such\n# signatures to limit signature malleability.\n\n# tcId = 7\n# length contains leading 0\nmsg = 313233343030\nresult = invalid\nsig = 3082004502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n# This is a signature with correct values for (r, s) but using some alternative\n# BER encoding instead of DER encoding. Implementations should not accept such\n# signatures to limit signature malleability.\n\n# tcId = 8\n# length contains leading 0\nmsg = 313233343030\nresult = invalid\nsig = 3047028200202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n# This is a signature with correct values for (r, s) but using some alternative\n# BER encoding instead of DER encoding. Implementations should not accept such\n# signatures to limit signature malleability.\n\n# tcId = 9\n# length contains leading 0\nmsg = 313233343030\nresult = invalid\nsig = 304702202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180282002100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n# This is a signature with correct values for (r, s) but using some alternative\n# BER encoding instead of DER encoding. Implementations should not accept such\n# signatures to limit signature malleability.\n\n# tcId = 10\n# wrong length\nmsg = 313233343030\nresult = invalid\nsig = 304602202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 11\n# wrong length\nmsg = 313233343030\nresult = invalid\nsig = 304402202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 12\n# wrong length\nmsg = 313233343030\nresult = invalid\nsig = 304502212ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 13\n# wrong length\nmsg = 313233343030\nresult = invalid\nsig = 3045021f2ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 14\n# wrong length\nmsg = 313233343030\nresult = invalid\nsig = 304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022200b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 15\n# wrong length\nmsg = 313233343030\nresult = invalid\nsig = 304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022000b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 16\n# uint32 overflow in length\nmsg = 313233343030\nresult = invalid\nsig = 3085010000004502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 17\n# uint32 overflow in length\nmsg = 313233343030\nresult = invalid\nsig = 304a028501000000202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 18\n# uint32 overflow in length\nmsg = 313233343030\nresult = invalid\nsig = 304a02202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180285010000002100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 19\n# uint64 overflow in length\nmsg = 313233343030\nresult = invalid\nsig = 308901000000000000004502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 20\n# uint64 overflow in length\nmsg = 313233343030\nresult = invalid\nsig = 304e02890100000000000000202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 21\n# uint64 overflow in length\nmsg = 313233343030\nresult = invalid\nsig = 304e02202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18028901000000000000002100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 22\n# length = 2**31 - 1\nmsg = 313233343030\nresult = invalid\nsig = 30847fffffff02202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 23\n# length = 2**31 - 1\nmsg = 313233343030\nresult = invalid\nsig = 304902847fffffff2ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 24\n# length = 2**31 - 1\nmsg = 313233343030\nresult = invalid\nsig = 304902202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e1802847fffffff00b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 25\n# length = 2**32 - 1\nmsg = 313233343030\nresult = invalid\nsig = 3084ffffffff02202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 26\n# length = 2**32 - 1\nmsg = 313233343030\nresult = invalid\nsig = 30490284ffffffff2ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 27\n# ",
     "length = 2**32 - 1\nmsg = 313233343030\nresult = invalid\nsig = 304902202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180284ffffffff00b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 28\n# length = 2**40 - 1\nmsg = 313233343030\nresult = invalid\nsig = 3085ffffffffff02202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 29\n# length = 2**40 - 1\nmsg = 313233343030\nresult = invalid\nsig = 304a0285ffffffffff2ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 30\n# length = 2**40 - 1\nmsg = 313233343030\nresult = invalid\nsig = 304a02202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180285ffffffffff00b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 31\n# length = 2**64 - 1\nmsg = 313233343030\nresult = invalid\nsig = 3088ffffffffffffffff02202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 32\n# length = 2**64 - 1\nmsg = 313233343030\nresult = invalid\nsig = 304d0288ffffffffffffffff2ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 33\n# length = 2**64 - 1\nmsg = 313233343030\nresult = invalid\nsig = 304d02202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180288ffffffffffffffff00b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 34\n# incorrect length\nmsg = 313233343030\nresult = invalid\nsig = 30ff02202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 35\n# incorrect length\nmsg = 313233343030\nresult = invalid\nsig = 304502ff2ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 36\n# incorrect length\nmsg = 313233343030\nresult = invalid\nsig = 304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e1802ff00b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 37\n# indefinite length without termination\nmsg = 313233343030\nresult = invalid\nsig = 308002202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 38\n# indefinite length without termination\nmsg = 313233343030\nresult = invalid\nsig = 304502802ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 39\n# indefinite length without termination\nmsg = 313233343030\nresult = invalid\nsig = 304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18028000b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 40\n# removing sequence\nmsg = 313233343030\nresult = invalid\nsig = \n\n# tcId = 41\n# lonely sequence tag\nmsg = 313233343030\nresult = invalid\nsig = 30\n\n# tcId = 42\n# appending 0's to sequence\nmsg = 313233343030\nresult = invalid\nsig = 304702202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db0000\n\n# tcId = 43\n# prepending 0's to sequence\nmsg = 313233343030\nresult = invalid\nsig = 3047000002202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 44\n# appending unused 0's to sequence\nmsg = 313233343030\nresult = invalid\nsig = 304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db0000\n\n# tcId = 45\n# appending null value to sequence\nmsg = 313233343030\nresult = invalid\nsig = 304702202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db0500\n\n# tcId = 46\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 304a498177304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 47\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 30492500304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 48\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 3047304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db0004deadbeef\n\n# tcId = 49\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 304a222549817702202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 50\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 30492224250002202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 51\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 304d222202202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180004deadbeef022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 52\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 304a02202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e182226498177022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 53\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 304902202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e1822252500022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 54\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 304d02202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e182223022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db0004deadbeef\n\n# tcId = 55\n# including undefined tags\nmsg = 313233343030\nresult = invalid\nsig = 304daa00bb00cd00304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 56\n# including undefined tags\nmsg = 313233343030\nresult = invalid\nsig = 304baa02aabb304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 57\n# including undefined tags\nmsg = 313233343030\nresult = invalid\nsig = 304d2228aa00bb00cd0002202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 58\n# including undefined tags\nmsg = 313233343030\nresult = invalid\nsig = 304b2226aa02aabb02202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 59\n# including undefined tags\nmsg = 313233343030\nresult = invalid\nsig = 304d02202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e182229aa00bb00cd00022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 60\n# including undefined tags\nmsg = 313233343030\nresult = invalid\nsig = 304b02202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e182227aa02aabb022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 61\n# truncated length of sequence\nmsg = 313233343030\nresult = invalid\nsig = 3081\n\n# tcId = 62\n# using composition with indefinite length\nmsg = 313233343030\nresult = invalid\nsig = 3080304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db0000\n\n# tcId = 63\n# using composition with indefinite length\nmsg = 313233343030\nresult = invalid\nsig = 3049228002202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180000022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 64\n# using composition with indefin",
     "ite length\nmsg = 313233343030\nresult = invalid\nsig = 304902202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e182280022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db0000\n\n# tcId = 65\n# using composition with wrong tag\nmsg = 313233343030\nresult = invalid\nsig = 3080314502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db0000\n\n# tcId = 66\n# using composition with wrong tag\nmsg = 313233343030\nresult = invalid\nsig = 3049228003202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180000022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 67\n# using composition with wrong tag\nmsg = 313233343030\nresult = invalid\nsig = 304902202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e182280032100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db0000\n\n# tcId = 68\n# Replacing sequence with NULL\nmsg = 313233343030\nresult = invalid\nsig = 0500\n\n# tcId = 69\n# changing tag value of sequence\nmsg = 313233343030\nresult = invalid\nsig = 2e4502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 70\n# changing tag value of sequence\nmsg = 313233343030\nresult = invalid\nsig = 2f4502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 71\n# changing tag value of sequence\nmsg = 313233343030\nresult = invalid\nsig = 314502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 72\n# changing tag value of sequence\nmsg = 313233343030\nresult = invalid\nsig = 324502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 73\n# changing tag value of sequence\nmsg = 313233343030\nresult = invalid\nsig = ff4502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 74\n# dropping value of sequence\nmsg = 313233343030\nresult = invalid\nsig = 3000\n\n# tcId = 75\n# using composition for sequence\nmsg = 313233343030\nresult = invalid\nsig = 30493001023044202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 76\n# truncate sequence\nmsg = 313233343030\nresult = invalid\nsig = 304402202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847\n\n# tcId = 77\n# truncate sequence\nmsg = 313233343030\nresult = invalid\nsig = 3044202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 78\n# indefinite length\nmsg = 313233343030\nresult = invalid\nsig = 308002202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db0000\n# This is a signature with correct values for (r, s) but using some alternative\n# BER encoding instead of DER encoding. Implementations should not accept such\n# signatures to limit signature malleability.\n\n# tcId = 79\n# indefinite length with truncated delimiter\nmsg = 313233343030\nresult = invalid\nsig = 308002202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db00\n\n# tcId = 80\n# indefinite length with additional element\nmsg = 313233343030\nresult = invalid\nsig = 308002202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db05000000\n\n# tcId = 81\n# indefinite length with truncated element\nmsg = 313233343030\nresult = invalid\nsig = 308002202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db060811220000\n\n# tcId = 82\n# indefinite length with garbage\nmsg = 313233343030\nresult = invalid\nsig = 308002202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db0000fe02beef\n\n# tcId = 83\n# indefinite length with nonempty EOC\nmsg = 313233343030\nresult = invalid\nsig = 308002202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db0002beef\n\n# tcId = 84\n# prepend empty sequence\nmsg = 313233343030\nresult = invalid\nsig = 3047300002202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 85\n# append empty sequence\nmsg = 313233343030\nresult = invalid\nsig = 304702202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db3000\n\n# tcId = 86\n# sequence of sequence\nmsg = 313233343030\nresult = invalid\nsig = 3047304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 87\n# truncated sequence\nmsg = 313233343030\nresult = invalid\nsig = 302202202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18\n\n# tcId = 88\n# repeat element in sequence\nmsg = 313233343030\nresult = invalid\nsig = 306802202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 89\n# removing integer\nmsg = 313233343030\nresult = invalid\nsig = 3023022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 90\n# lonely integer tag\nmsg = 313233343030\nresult = invalid\nsig = 302402022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 91\n# lonely integer tag\nmsg = 313233343030\nresult = invalid\nsig = 302302202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e1802\n\n# tcId = 92\n# appending 0's to integer\nmsg = 313233343030\nresult = invalid\nsig = 304702222ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180000022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 93\n# appending 0's to integer\nmsg = 313233343030\nresult = invalid\nsig = 304702202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022300b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db0000\n\n# tcId = 94\n# prepending 0's to integer\nmsg = 313233343030\nresult = invalid\nsig = 3047022200002ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n# This is a signature with correct values for (r, s) but using some alternative\n# BER encoding instead of DER encoding. Implementations should not accept such\n# signatures to limit signature malleability.\n\n# tcId = 95\n# prepending 0's to integer\nmsg = 313233343030\nresult = invalid\nsig = 304702202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180223000000b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n# This is a signature with correct values for (r, s) but using some alternative\n# BER encoding instead of DER encoding. Implementations should not accept such\n# signatures to limit signature malleability.\n\n# tcId = 96\n# appending unused 0's to integer\nmsg = 313233343030\nresult = invalid\nsig = 304702202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180000022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 97\n# appending null value to integer\nmsg = 313233343030\nresult = invalid\nsig = 304702222ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180500022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db\n\n# tcId = 98\n# appending null value to integer\nmsg = 313233343030\nresult = invalid\nsig = 304702202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022300b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134",
@@ -3130,9 +3111,9 @@
     "e = secp256r1]\n[key.keySize = 256]\n[key.type = ECPublicKey]\n[key.uncompressed = 04a6c885ade1a4c566f9bb010d066974abb281797fa701288c721bcbd23663a9b72e424b690957168d193a6096fc77a2b004a9c7d467e007e1f2058458f98af316]\n[key.wx = 0a6c885ade1a4c566f9bb010d066974abb281797fa701288c721bcbd23663a9b7]\n[key.wy = 2e424b690957168d193a6096fc77a2b004a9c7d467e007e1f2058458f98af316]\n[keyDer = 3059301306072a8648ce3d020106082a8648ce3d03010703420004a6c885ade1a4c566f9bb010d066974abb281797fa701288c721bcbd23663a9b72e424b690957168d193a6096fc77a2b004a9c7d467e007e1f2058458f98af316]\n[sha = SHA-256]\n\n# tcId = 338\n# extreme value for k and s^-1\nmsg = 313233343030\nresult = valid\nsig = 304402206b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296022049249248db6db6dbb6db6db6db6db6db5a8b230d0b2b51dcd7ebf0c9fef7c185\n\n[key.curve = secp256r1]\n[key.keySize = 256]\n[key.type = ECPublicKey]\n[key.uncompressed = 048d3c2c2c3b765ba8289e6ac3812572a25bf75df62d87ab7330c3bdbad9ebfa5c4c6845442d66935b238578d43aec54f7caa1621d1af241d4632e0b780c423f5d]\n[key.wx = 08d3c2c2c3b765ba8289e6ac3812572a25bf75df62d87ab7330c3bdbad9ebfa5c]\n[key.wy = 4c6845442d66935b238578d43aec54f7caa1621d1af241d4632e0b780c423f5d]\n[keyDer = 3059301306072a8648ce3d020106082a8648ce3d030107034200048d3c2c2c3b765ba8289e6ac3812572a25bf75df62d87ab7330c3bdbad9ebfa5c4c6845442d66935b238578d43aec54f7caa1621d1af241d4632e0b780c423f5d]\n[sha = SHA-256]\n\n# tcId = 339\n# extreme value for k\nmsg = 313233343030\nresult = valid\nsig = 304402206b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296022016a4502e2781e11ac82cbc9d1edd8c981584d13e18411e2f6e0478c34416e3bb\n\n[key.curve = secp256r1]\n[key.keySize = 256]\n[key.type = ECPublicKey]\n[key.uncompressed = 046b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5]\n[key.wx = 6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296]\n[key.wy = 4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5]\n[keyDer = 3059301306072a8648ce3d020106082a8648ce3d030107034200046b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5]\n[sha = SHA-256]\n\n# tcId = 340\n# testing point duplication\nmsg = 313233343030\nresult = invalid\nsig = 3045022100bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050230220249249246db6db6ddb6db6db6db6db6dad4591868595a8ee6bf5f864ff7be0c2\n\n# tcId = 341\n# testing point duplication\nmsg = 313233343030\nresult = invalid\nsig = 3044022044a5ad0ad0636d9f12bc9e0a6bdd5e1cbcb012ea7bf091fcec15b0c43202d52e0220249249246db6db6ddb6db6db6db6db6dad4591868595a8ee6bf5f864ff7be0c2\n\n[key.curve = secp256r1]\n[key.keySize = 256]\n[key.type = ECPublicKey]\n[key.uncompressed = 046b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296b01cbd1c01e58065711814b583f061e9d431cca994cea1313449bf97c840ae0a]\n[key.wx = 6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296]\n[key.wy = 0b01cbd1c01e58065711814b583f061e9d431cca994cea1313449bf97c840ae0a]\n[keyDer = 3059301306072a8648ce3d020106082a8648ce3d030107034200046b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296b01cbd1c01e58065711814b583f061e9d431cca994cea1313449bf97c840ae0a]\n[sha = SHA-256]\n\n# tcId = 342\n# testing point duplication\nmsg = 313233343030\nresult = invalid\nsig = 3045022100bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050230220249249246db6db6ddb6db6db6db6db6dad4591868595a8ee6bf5f864ff7be0c2\n\n# tcId = 343\n# testing point duplication\nmsg = 313233343030\nresult = invalid\nsig = 3044022044a5ad0ad0636d9f12bc9e0a6bdd5e1cbcb012ea7bf091fcec15b0c43202d52e0220249249246db6db6ddb6db6db6db6db6dad4591868595a8ee6bf5f864ff7be0c2\n\n[key.curve = secp256r1]\n[key.keySize = 256]\n[key.type = ECPublicKey]\n[key.uncompressed = 0404aaec73635726f213fb8a9e64da3b8632e41495a944d0045b522eba7240fad587d9315798aaa3a5ba01775787ced05eaaf7b4e09fc81d6d1aa546e8365d525d]\n[key.wx = 4aaec73635726f213fb8a9e64da3b8632e41495a944d0045b522eba7240fad5]\n[key.wy = 087d9315798aaa3a5ba01775787ced05eaaf7b4e09fc81d6d1aa546e8365d525d]\n[keyDer = 3059301306072a8648ce3d020106082a8648ce3d0301070342000404aaec73635726f213fb8a9e64da3b8632e41495a944d0045b522eba7240fad587d9315798aaa3a5ba01775787ced05eaaf7b4e09fc81d6d1aa546e8365d525d]\n[sha = SHA-256]\n\n# tcId = 344\n# pseudorandom signature\nmsg = \nresult = valid\nsig = 3045022100b292a619339f6e567a305c951c0dcbcc42d16e47f219f9e98e76e09d8770b34a02200177e60492c5a8242f76f07bfe3661bde59ec2a17ce5bd2dab2abebdf89a62e2\n\n# tcId = 345\n# pseudorandom signature\nmsg = 4d7367\nresult = valid\nsig = 30450220530bd6b0c9af2d69ba897f6b5fb59695cfbf33afe66dbadcf5b8d2a2a6538e23022100d85e489cb7a161fd55ededcedbf4cc0c0987e3e3f0f242cae934c72caa3f43e9\n\n# tcId = 346\n# pseudorandom signature\nmsg = 313233343030\nresult = valid\nsig = 3046022100a8ea150cb80125d7381c4c1f1da8e9de2711f9917060406a73d7904519e51388022100f3ab9fa68bd47973a73b2d40480c2ba50c22c9d76ec217257288293285449b86\n\n# tcId = 347\n# pseudorandom signature\nmsg = 0000000000000000000000000000000000000000\nresult = valid\nsig = 3045022100986e65933ef2ed4ee5aada139f52b70539aaf63f00a91f29c69178490d57fb7102203dafedfb8da6189d372308cbf1489bbbdabf0c0217d1c0ff0f701aaa7a694b9c\n\n[key.curve = secp256r1]\n[key.keySize = 256]\n[key.type = ECPublicKey]\n[key.uncompressed = 044f337ccfd67726a805e4f1600ae2849df3807eca117380239fbd816900000000ed9dea124cc8c396416411e988c30f427eb504af43a3146cd5df7ea60666d685]\n[key.wx = 4f337ccfd67726a805e4f1600ae2849df3807eca117380239fbd816900000000]\n[key.wy = 0ed9dea124cc8c396416411e988c30f427eb504af43a3146cd5df7ea60666d685]\n[keyDer = 3059301306072a8648ce3d020106082a8648ce3d030107034200044f337ccfd67726a805e4f1600ae2849df3807eca117380239fbd816900000000ed9dea124cc8c396416411e988c30f427eb504af43a3146cd5df7ea60666d685]\n[sha = SHA-256]\n\n# tcId = 348\n# x-coordinate of the public key has many trailing 0's\nmsg = 4d657373616765\nresult = valid\nsig = 3046022100d434e262a49eab7781e353a3565e482550dd0fd5defa013c7f29745eff3569f10221009b0c0a93f267fb6052fd8077be769c2b98953195d7bc10de844218305c6ba17a\n\n# tcId = 349\n# x-coordinate of the public key has many trailing 0's\nmsg = 4d657373616765\nresult = valid\nsig = 304402200fe774355c04d060f76d79fd7a772e421463489221bf0a33add0be9b1979110b0220500dcba1c69a8fbd43fa4f57f743ce124ca8b91a1f325f3fac6181175df55737\n\n# tcId = 350\n# x-coordinate of the public key has many trailing 0's\nmsg = 4d657373616765\nresult = valid\nsig = 3045022100bb40bf217bed3fb3950c7d39f03d36dc8e3b2cd79693f125bfd06595ee1135e30220541bf3532351ebb032710bdb6a1bf1bfc89a1e291ac692b3fa4780745bb55677\n\n[key.curve = secp256r1]\n[key.keySize = 256]\n[key.type = ECPublicKey]\n[key.uncompressed = 043cf03d614d8939cfd499a07873fac281618f06b8ff87e8015c3f49726500493584fa174d791c72bf2ce3880a8960dd2a7c7a1338a82f85a9e59cdbde80000000]\n[key.wx = 3cf03d614d8939cfd499a07873fac281618f06b8ff87e8015c3f497265004935]\n[key.wy = 084fa174d791c72bf2ce3880a8960dd2a7c7a1338a82f85a9e59cdbde80000000]\n[keyDer = 3059301306072a8648ce3d020106082a8648ce3d030107034200043cf03d614d8939cfd499a07873fac281618f06b8ff87e8015c3f49726500493584fa174d791c72bf2ce3880a8960dd2a7c7a1338a82f85a9e59cdbde80000000]\n[sha = SHA-256]\n\n# tcId = 351\n# y-coordinate of the public key has many trailing 0's\nmsg = 4d657373616765\nresult = valid\nsig = 30440220664eb7ee6db84a34df3c86ea31389a5405badd5ca99231ff556d3e75a233e73a022059f3c752e52eca46137642490a51560ce0badc678754b8f72e51a2901426a1bd\n\n# tcId = 352\n# y-coordinate of the public key has many trailing 0's\nmsg = 4d657373616765\nresult = valid\nsig = 304502204cd0429bbabd2827009d6fcd843d4ce39c3e42e2d1631fd001985a79d1fd8b430221009638bf12dd682f60be7ef1d0e0d98f08b7bca77a1a2b869ae466189d2acdabe3\n\n# tcId = 353\n# y-coordinate of the public key has many trailing 0's\nmsg = 4d657373616765\nresult = valid\nsig = 3046022100e56c6ea2d1b017091c44d8b6cb62b9f460e3ce9aed5e5fd41e8added97c56c04022100a308ec31f281e955be20b457e463440b4fcf2b80258078207fc1378180f89b55\n\n[key.curve = secp256r1]\n[key.keySize = 256]\n[key.type = ECPublicKey]\n[key.uncompressed = 043cf03d614d8939cfd499a07873fac281618f06b8ff87e8015c3f4972650049357b05e8b186e38d41d31c77f5769f22d58385ecc857d07a561a6324217fffffff]\n[key.wx = 3cf03d614d8939cfd499a07873fac281618f06b8ff87e8015c3f497265004935]\n[key.wy = 7b05e8b186e38d41d31c77f5769f22",
     "d58385ecc857d07a561a6324217fffffff]\n[keyDer = 3059301306072a8648ce3d020106082a8648ce3d030107034200043cf03d614d8939cfd499a07873fac281618f06b8ff87e8015c3f4972650049357b05e8b186e38d41d31c77f5769f22d58385ecc857d07a561a6324217fffffff]\n[sha = SHA-256]\n\n# tcId = 354\n# y-coordinate of the public key has many trailing 1's\nmsg = 4d657373616765\nresult = valid\nsig = 304402201158a08d291500b4cabed3346d891eee57c176356a2624fb011f8fbbf34668300220228a8c486a736006e082325b85290c5bc91f378b75d487dda46798c18f285519\n\n# tcId = 355\n# y-coordinate of the public key has many trailing 1's\nmsg = 4d657373616765\nresult = valid\nsig = 3045022100b1db9289649f59410ea36b0c0fc8d6aa2687b29176939dd23e0dde56d309fa9d02203e1535e4280559015b0dbd987366dcf43a6d1af5c23c7d584e1c3f48a1251336\n\n# tcId = 356\n# y-coordinate of the public key has many trailing 1's\nmsg = 4d657373616765\nresult = valid\nsig = 3046022100b7b16e762286cb96446aa8d4e6e7578b0a341a79f2dd1a220ac6f0ca4e24ed86022100ddc60a700a139b04661c547d07bbb0721780146df799ccf55e55234ecb8f12bc\n\n[key.curve = secp256r1]\n[key.keySize = 256]\n[key.type = ECPublicKey]\n[key.uncompressed = 042829c31faa2e400e344ed94bca3fcd0545956ebcfe8ad0f6dfa5ff8effffffffa01aafaf000e52585855afa7676ade284113099052df57e7eb3bd37ebeb9222e]\n[key.wx = 2829c31faa2e400e344ed94bca3fcd0545956ebcfe8ad0f6dfa5ff8effffffff]\n[key.wy = 0a01aafaf000e52585855afa7676ade284113099052df57e7eb3bd37ebeb9222e]\n[keyDer = 3059301306072a8648ce3d020106082a8648ce3d030107034200042829c31faa2e400e344ed94bca3fcd0545956ebcfe8ad0f6dfa5ff8effffffffa01aafaf000e52585855afa7676ade284113099052df57e7eb3bd37ebeb9222e]\n[sha = SHA-256]\n\n# tcId = 357\n# x-coordinate of the public key has many trailing 1's\nmsg = 4d657373616765\nresult = valid\nsig = 3045022100d82a7c2717261187c8e00d8df963ff35d796edad36bc6e6bd1c91c670d9105b402203dcabddaf8fcaa61f4603e7cbac0f3c0351ecd5988efb23f680d07debd139929\n\n# tcId = 358\n# x-coordinate of the public key has many trailing 1's\nmsg = 4d657373616765\nresult = valid\nsig = 304402205eb9c8845de68eb13d5befe719f462d77787802baff30ce96a5cba063254af7802202c026ae9be2e2a5e7ca0ff9bbd92fb6e44972186228ee9a62b87ddbe2ef66fb5\n\n# tcId = 359\n# x-coordinate of the public key has many trailing 1's\nmsg = 4d657373616765\nresult = valid\nsig = 304602210096843dd03c22abd2f3b782b170239f90f277921becc117d0404a8e4e36230c28022100f2be378f526f74a543f67165976de9ed9a31214eb4d7e6db19e1ede123dd991d\n\n[key.curve = secp256r1]\n[key.keySize = 256]\n[key.type = ECPublicKey]\n[key.uncompressed = 04fffffff948081e6a0458dd8f9e738f2665ff9059ad6aac0708318c4ca9a7a4f55a8abcba2dda8474311ee54149b973cae0c0fb89557ad0bf78e6529a1663bd73]\n[key.wx = 0fffffff948081e6a0458dd8f9e738f2665ff9059ad6aac0708318c4ca9a7a4f5]\n[key.wy = 5a8abcba2dda8474311ee54149b973cae0c0fb89557ad0bf78e6529a1663bd73]\n[keyDer = 3059301306072a8648ce3d020106082a8648ce3d03010703420004fffffff948081e6a0458dd8f9e738f2665ff9059ad6aac0708318c4ca9a7a4f55a8abcba2dda8474311ee54149b973cae0c0fb89557ad0bf78e6529a1663bd73]\n[sha = SHA-256]\n\n# tcId = 360\n# x-coordinate of the public key is large\nmsg = 4d657373616765\nresult = valid\nsig = 30440220766456dce1857c906f9996af729339464d27e9d98edc2d0e3b760297067421f60220402385ecadae0d8081dccaf5d19037ec4e55376eced699e93646bfbbf19d0b41\n\n# tcId = 361\n# x-coordinate of the public key is large\nmsg = 4d657373616765\nresult = valid\nsig = 3046022100c605c4b2edeab20419e6518a11b2dbc2b97ed8b07cced0b19c34f777de7b9fd9022100edf0f612c5f46e03c719647bc8af1b29b2cde2eda700fb1cff5e159d47326dba\n\n# tcId = 362\n# x-coordinate of the public key is large\nmsg = 4d657373616765\nresult = valid\nsig = 3046022100d48b68e6cabfe03cf6141c9ac54141f210e64485d9929ad7b732bfe3b7eb8a84022100feedae50c61bd00e19dc26f9b7e2265e4508c389109ad2f208f0772315b6c941\n\n[key.curve = secp256r1]\n[key.keySize = 256]\n[key.type = ECPublicKey]\n[key.uncompressed = 0400000003fa15f963949d5f03a6f5c7f86f9e0015eeb23aebbff1173937ba748e1099872070e8e87c555fa13659cca5d7fadcfcb0023ea889548ca48af2ba7e71]\n[key.wx = 3fa15f963949d5f03a6f5c7f86f9e0015eeb23aebbff1173937ba748e]\n[key.wy = 1099872070e8e87c555fa13659cca5d7fadcfcb0023ea889548ca48af2ba7e71]\n[keyDer = 3059301306072a8648ce3d020106082a8648ce3d0301070342000400000003fa15f963949d5f03a6f5c7f86f9e0015eeb23aebbff1173937ba748e1099872070e8e87c555fa13659cca5d7fadcfcb0023ea889548ca48af2ba7e71]\n[sha = SHA-256]\n\n# tcId = 363\n# x-coordinate of the public key is small\nmsg = 4d657373616765\nresult = valid\nsig = 3046022100b7c81457d4aeb6aa65957098569f0479710ad7f6595d5874c35a93d12a5dd4c7022100b7961a0b652878c2d568069a432ca18a1a9199f2ca574dad4b9e3a05c0a1cdb3\n\n# tcId = 364\n# x-coordinate of the public key is small\nmsg = 4d657373616765\nresult = valid\nsig = 304402206b01332ddb6edfa9a30a1321d5858e1ee3cf97e263e669f8de5e9652e76ff3f702205939545fced457309a6a04ace2bd0f70139c8f7d86b02cb1cc58f9e69e96cd5a\n\n# tcId = 365\n# x-coordinate of the public key is small\nmsg = 4d657373616765\nresult = valid\nsig = 3046022100efdb884720eaeadc349f9fc356b6c0344101cd2fd8436b7d0e6a4fb93f106361022100f24bee6ad5dc05f7613975473aadf3aacba9e77de7d69b6ce48cb60d8113385d\n\n[key.curve = secp256r1]\n[key.keySize = 256]\n[key.type = ECPublicKey]\n[key.uncompressed = 04bcbb2914c79f045eaa6ecbbc612816b3be5d2d6796707d8125e9f851c18af015000000001352bb4a0fa2ea4cceb9ab63dd684ade5a1127bcf300a698a7193bc2]\n[key.wx = 0bcbb2914c79f045eaa6ecbbc612816b3be5d2d6796707d8125e9f851c18af015]\n[key.wy = 1352bb4a0fa2ea4cceb9ab63dd684ade5a1127bcf300a698a7193bc2]\n[keyDer = 3059301306072a8648ce3d020106082a8648ce3d03010703420004bcbb2914c79f045eaa6ecbbc612816b3be5d2d6796707d8125e9f851c18af015000000001352bb4a0fa2ea4cceb9ab63dd684ade5a1127bcf300a698a7193bc2]\n[sha = SHA-256]\n\n# tcId = 366\n# y-coordinate of the public key is small\nmsg = 4d657373616765\nresult = valid\nsig = 3044022031230428405560dcb88fb5a646836aea9b23a23dd973dcbe8014c87b8b20eb0702200f9344d6e812ce166646747694a41b0aaf97374e19f3c5fb8bd7ae3d9bd0beff\n\n# tcId = 367\n# y-coordinate of the public key is small\nmsg = 4d657373616765\nresult = valid\nsig = 3046022100caa797da65b320ab0d5c470cda0b36b294359c7db9841d679174db34c4855743022100cf543a62f23e212745391aaf7505f345123d2685ee3b941d3de6d9b36242e5a0\n\n# tcId = 368\n# y-coordinate of the public key is small\nmsg = 4d657373616765\nresult = valid\nsig = 304502207e5f0ab5d900d3d3d7867657e5d6d36519bc54084536e7d21c336ed8001859450221009450c07f201faec94b82dfb322e5ac676688294aad35aa72e727ff0b19b646aa\n\n[key.curve = secp256r1]\n[key.keySize = 256]\n[key.type = ECPublicKey]\n[key.uncompressed = 04bcbb2914c79f045eaa6ecbbc612816b3be5d2d6796707d8125e9f851c18af015fffffffeecad44b6f05d15b33146549c2297b522a5eed8430cff596758e6c43d]\n[key.wx = 0bcbb2914c79f045eaa6ecbbc612816b3be5d2d6796707d8125e9f851c18af015]\n[key.wy = 0fffffffeecad44b6f05d15b33146549c2297b522a5eed8430cff596758e6c43d]\n[keyDer = 3059301306072a8648ce3d020106082a8648ce3d03010703420004bcbb2914c79f045eaa6ecbbc612816b3be5d2d6796707d8125e9f851c18af015fffffffeecad44b6f05d15b33146549c2297b522a5eed8430cff596758e6c43d]\n[sha = SHA-256]\n\n# tcId = 369\n# y-coordinate of the public key is large\nmsg = 4d657373616765\nresult = valid\nsig = 3046022100d7d70c581ae9e3f66dc6a480bf037ae23f8a1e4a2136fe4b03aa69f0ca25b35602210089c460f8a5a5c2bbba962c8a3ee833a413e85658e62a59e2af41d9127cc47224\n\n# tcId = 370\n# y-coordinate of the public key is large\nmsg = 4d657373616765\nresult = valid\nsig = 30440220341c1b9ff3c83dd5e0dfa0bf68bcdf4bb7aa20c625975e5eeee34bb396266b34022072b69f061b750fd5121b22b11366fad549c634e77765a017902a67099e0a4469\n\n# tcId = 371\n# y-coordinate of the public key is large\nmsg = 4d657373616765\nresult = valid\nsig = 3045022070bebe684cdcb5ca72a42f0d873879359bd1781a591809947628d313a3814f67022100aec03aca8f5587a4d535fa31027bbe9cc0e464b1c3577f4c2dcde6b2094798a9\n\n",
 };
-static const size_t kLen70 = 154185;
+static const size_t kLen69 = 154185;
 
-static const char *kData70[] = {
+static const char *kData69[] = {
     "# Imported from Wycheproof's ecdsa_secp256r1_sha512_test.json.\n# This file is generated by convert_wycheproof.go. Do not edit by hand.\n#\n# Algorithm: ECDSA\n# Generator version: 0.4.12\n\n[key.curve = secp256r1]\n[key.keySize = 256]\n[key.type = ECPublicKey]\n[key.uncompressed = 042927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e]\n[key.wx = 2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838]\n[key.wy = 0c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e]\n[keyDer = 3059301306072a8648ce3d020106082a8648ce3d030107034200042927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e]\n[sha = SHA-512]\n\n# tcId = 1\n# signature malleability\nmsg = 313233343030\nresult = valid\nsig = 304402202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c002205f85a63a5be977ad714cea16b10035f07cadf7513ae8cca86f35b7692aafd69f\n\n# tcId = 2\n# Legacy:ASN encoding of s misses leading 0\nmsg = 313233343030\nresult = acceptable\nsig = 304402202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c00220a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2\n# Some implementations of ECDSA and DSA incorrectly encode r and s by not\n# including leading zeros in the ASN encoding of integers when necessary. Hence,\n# some implementations (e.g. jdk) allow signatures with incorrect ASN encodings\n# assuming that the signature is otherwise valid.\n\n# tcId = 3\n# valid\nmsg = 313233343030\nresult = valid\nsig = 304502202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2\n\n# tcId = 4\n# long form encoding of length\nmsg = 313233343030\nresult = invalid\nsig = 30814502202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2\n# This is a signature with correct values for (r, s) but using some alternative\n# BER encoding instead of DER encoding. Implementations should not accept such\n# signatures to limit signature malleability.\n\n# tcId = 5\n# long form encoding of length\nmsg = 313233343030\nresult = invalid\nsig = 30460281202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2\n# This is a signature with correct values for (r, s) but using some alternative\n# BER encoding instead of DER encoding. Implementations should not accept such\n# signatures to limit signature malleability.\n\n# tcId = 6\n# long form encoding of length\nmsg = 313233343030\nresult = invalid\nsig = 304602202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c002812100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2\n# This is a signature with correct values for (r, s) but using some alternative\n# BER encoding instead of DER encoding. Implementations should not accept such\n# signatures to limit signature malleability.\n\n# tcId = 7\n# length contains leading 0\nmsg = 313233343030\nresult = invalid\nsig = 3082004502202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2\n# This is a signature with correct values for (r, s) but using some alternative\n# BER encoding instead of DER encoding. Implementations should not accept such\n# signatures to limit signature malleability.\n\n# tcId = 8\n# length contains leading 0\nmsg = 313233343030\nresult = invalid\nsig = 3047028200202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2\n# This is a signature with correct values for (r, s) but using some alternative\n# BER encoding instead of DER encoding. Implementations should not accept such\n# signatures to limit signature malleability.\n\n# tcId = 9\n# length contains leading 0\nmsg = 313233343030\nresult = invalid\nsig = 304702202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c00282002100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2\n# This is a signature with correct values for (r, s) but using some alternative\n# BER encoding instead of DER encoding. Implementations should not accept such\n# signatures to limit signature malleability.\n\n# tcId = 10\n# wrong length\nmsg = 313233343030\nresult = invalid\nsig = 304602202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2\n\n# tcId = 11\n# wrong length\nmsg = 313233343030\nresult = invalid\nsig = 304402202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2\n\n# tcId = 12\n# wrong length\nmsg = 313233343030\nresult = invalid\nsig = 304502212478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2\n\n# tcId = 13\n# wrong length\nmsg = 313233343030\nresult = invalid\nsig = 3045021f2478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2\n\n# tcId = 14\n# wrong length\nmsg = 313233343030\nresult = invalid\nsig = 304502202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022200a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2\n\n# tcId = 15\n# wrong length\nmsg = 313233343030\nresult = invalid\nsig = 304502202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022000a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2\n\n# tcId = 16\n# uint32 overflow in length\nmsg = 313233343030\nresult = invalid\nsig = 3085010000004502202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2\n\n# tcId = 17\n# uint32 overflow in length\nmsg = 313233343030\nresult = invalid\nsig = 304a028501000000202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2\n\n# tcId = 18\n# uint32 overflow in length\nmsg = 313233343030\nresult = invalid\nsig = 304a02202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c00285010000002100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2\n\n# tcId = 19\n# uint64 overflow in length\nmsg = 313233343030\nresult = invalid\nsig = 308901000000000000004502202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2\n\n# tcId = 20\n# uint64 overflow in length\nmsg = 313233343030\nresult = invalid\nsig = 304e02890100000000000000202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2\n\n# tcId = 21\n# uint64 overflow in length\nmsg = 313233343030\nresult = invalid\nsig = 304e02202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0028901000000000000002100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2\n\n# tcId = 22\n# length = 2**31 - 1\nmsg = 313233343030\nresult = invalid\nsig = 30847fffffff02202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2\n\n# tcId = 23\n# length = 2**31 - 1\nmsg = 313233343030\nresult = invalid\nsig = 304902847fffffff2478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2\n\n# tcId = 24\n# length = 2**31 - 1\nmsg = 313233343030\nresult = invalid\nsig = 304902202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c002847fffffff00a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2\n\n# tcId = 25\n# length = 2**32 - 1\nmsg = 313233343030\nresult = invalid\nsig = 3084ffffffff02202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2\n\n# tcId = 26\n# length = 2**32 - 1\nmsg = 313233343030\nresult = invalid\nsig = 30490284ffffffff2478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2\n\n# tcId = 27\n# ",
     "length = 2**32 - 1\nmsg = 313233343030\nresult = invalid\nsig = 304902202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c00284ffffffff00a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2\n\n# tcId = 28\n# length = 2**40 - 1\nmsg = 313233343030\nresult = invalid\nsig = 3085ffffffffff02202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2\n\n# tcId = 29\n# length = 2**40 - 1\nmsg = 313233343030\nresult = invalid\nsig = 304a0285ffffffffff2478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2\n\n# tcId = 30\n# length = 2**40 - 1\nmsg = 313233343030\nresult = invalid\nsig = 304a02202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c00285ffffffffff00a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2\n\n# tcId = 31\n# length = 2**64 - 1\nmsg = 313233343030\nresult = invalid\nsig = 3088ffffffffffffffff02202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2\n\n# tcId = 32\n# length = 2**64 - 1\nmsg = 313233343030\nresult = invalid\nsig = 304d0288ffffffffffffffff2478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2\n\n# tcId = 33\n# length = 2**64 - 1\nmsg = 313233343030\nresult = invalid\nsig = 304d02202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c00288ffffffffffffffff00a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2\n\n# tcId = 34\n# incorrect length\nmsg = 313233343030\nresult = invalid\nsig = 30ff02202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2\n\n# tcId = 35\n# incorrect length\nmsg = 313233343030\nresult = invalid\nsig = 304502ff2478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2\n\n# tcId = 36\n# incorrect length\nmsg = 313233343030\nresult = invalid\nsig = 304502202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c002ff00a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2\n\n# tcId = 37\n# indefinite length without termination\nmsg = 313233343030\nresult = invalid\nsig = 308002202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2\n\n# tcId = 38\n# indefinite length without termination\nmsg = 313233343030\nresult = invalid\nsig = 304502802478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2\n\n# tcId = 39\n# indefinite length without termination\nmsg = 313233343030\nresult = invalid\nsig = 304502202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0028000a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2\n\n# tcId = 40\n# removing sequence\nmsg = 313233343030\nresult = invalid\nsig = \n\n# tcId = 41\n# lonely sequence tag\nmsg = 313233343030\nresult = invalid\nsig = 30\n\n# tcId = 42\n# appending 0's to sequence\nmsg = 313233343030\nresult = invalid\nsig = 304702202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb20000\n\n# tcId = 43\n# prepending 0's to sequence\nmsg = 313233343030\nresult = invalid\nsig = 3047000002202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2\n\n# tcId = 44\n# appending unused 0's to sequence\nmsg = 313233343030\nresult = invalid\nsig = 304502202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb20000\n\n# tcId = 45\n# appending null value to sequence\nmsg = 313233343030\nresult = invalid\nsig = 304702202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb20500\n\n# tcId = 46\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 304a498177304502202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2\n\n# tcId = 47\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 30492500304502202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2\n\n# tcId = 48\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 3047304502202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb20004deadbeef\n\n# tcId = 49\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 304a222549817702202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2\n\n# tcId = 50\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 30492224250002202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2\n\n# tcId = 51\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 304d222202202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c00004deadbeef022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2\n\n# tcId = 52\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 304a02202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c02226498177022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2\n\n# tcId = 53\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 304902202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c022252500022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2\n\n# tcId = 54\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 304d02202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c02223022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb20004deadbeef\n\n# tcId = 55\n# including undefined tags\nmsg = 313233343030\nresult = invalid\nsig = 304daa00bb00cd00304502202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2\n\n# tcId = 56\n# including undefined tags\nmsg = 313233343030\nresult = invalid\nsig = 304baa02aabb304502202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2\n\n# tcId = 57\n# including undefined tags\nmsg = 313233343030\nresult = invalid\nsig = 304d2228aa00bb00cd0002202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2\n\n# tcId = 58\n# including undefined tags\nmsg = 313233343030\nresult = invalid\nsig = 304b2226aa02aabb02202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2\n\n# tcId = 59\n# including undefined tags\nmsg = 313233343030\nresult = invalid\nsig = 304d02202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c02229aa00bb00cd00022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2\n\n# tcId = 60\n# including undefined tags\nmsg = 313233343030\nresult = invalid\nsig = 304b02202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c02227aa02aabb022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2\n\n# tcId = 61\n# truncated length of sequence\nmsg = 313233343030\nresult = invalid\nsig = 3081\n\n# tcId = 62\n# using composition with indefinite length\nmsg = 313233343030\nresult = invalid\nsig = 3080304502202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb20000\n\n# tcId = 63\n# using composition with indefinite length\nmsg = 313233343030\nresult = invalid\nsig = 3049228002202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c00000022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2\n\n# tcId = 64\n# using composition with indefin",
     "ite length\nmsg = 313233343030\nresult = invalid\nsig = 304902202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c02280022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb20000\n\n# tcId = 65\n# using composition with wrong tag\nmsg = 313233343030\nresult = invalid\nsig = 3080314502202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb20000\n\n# tcId = 66\n# using composition with wrong tag\nmsg = 313233343030\nresult = invalid\nsig = 3049228003202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c00000022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2\n\n# tcId = 67\n# using composition with wrong tag\nmsg = 313233343030\nresult = invalid\nsig = 304902202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c02280032100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb20000\n\n# tcId = 68\n# Replacing sequence with NULL\nmsg = 313233343030\nresult = invalid\nsig = 0500\n\n# tcId = 69\n# changing tag value of sequence\nmsg = 313233343030\nresult = invalid\nsig = 2e4502202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2\n\n# tcId = 70\n# changing tag value of sequence\nmsg = 313233343030\nresult = invalid\nsig = 2f4502202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2\n\n# tcId = 71\n# changing tag value of sequence\nmsg = 313233343030\nresult = invalid\nsig = 314502202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2\n\n# tcId = 72\n# changing tag value of sequence\nmsg = 313233343030\nresult = invalid\nsig = 324502202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2\n\n# tcId = 73\n# changing tag value of sequence\nmsg = 313233343030\nresult = invalid\nsig = ff4502202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2\n\n# tcId = 74\n# dropping value of sequence\nmsg = 313233343030\nresult = invalid\nsig = 3000\n\n# tcId = 75\n# using composition for sequence\nmsg = 313233343030\nresult = invalid\nsig = 30493001023044202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2\n\n# tcId = 76\n# truncate sequence\nmsg = 313233343030\nresult = invalid\nsig = 304402202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34e\n\n# tcId = 77\n# truncate sequence\nmsg = 313233343030\nresult = invalid\nsig = 3044202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2\n\n# tcId = 78\n# indefinite length\nmsg = 313233343030\nresult = invalid\nsig = 308002202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb20000\n# This is a signature with correct values for (r, s) but using some alternative\n# BER encoding instead of DER encoding. Implementations should not accept such\n# signatures to limit signature malleability.\n\n# tcId = 79\n# indefinite length with truncated delimiter\nmsg = 313233343030\nresult = invalid\nsig = 308002202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb200\n\n# tcId = 80\n# indefinite length with additional element\nmsg = 313233343030\nresult = invalid\nsig = 308002202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb205000000\n\n# tcId = 81\n# indefinite length with truncated element\nmsg = 313233343030\nresult = invalid\nsig = 308002202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2060811220000\n\n# tcId = 82\n# indefinite length with garbage\nmsg = 313233343030\nresult = invalid\nsig = 308002202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb20000fe02beef\n\n# tcId = 83\n# indefinite length with nonempty EOC\nmsg = 313233343030\nresult = invalid\nsig = 308002202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb20002beef\n\n# tcId = 84\n# prepend empty sequence\nmsg = 313233343030\nresult = invalid\nsig = 3047300002202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2\n\n# tcId = 85\n# append empty sequence\nmsg = 313233343030\nresult = invalid\nsig = 304702202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb23000\n\n# tcId = 86\n# sequence of sequence\nmsg = 313233343030\nresult = invalid\nsig = 3047304502202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2\n\n# tcId = 87\n# truncated sequence\nmsg = 313233343030\nresult = invalid\nsig = 302202202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0\n\n# tcId = 88\n# repeat element in sequence\nmsg = 313233343030\nresult = invalid\nsig = 306802202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2\n\n# tcId = 89\n# removing integer\nmsg = 313233343030\nresult = invalid\nsig = 3023022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2\n\n# tcId = 90\n# lonely integer tag\nmsg = 313233343030\nresult = invalid\nsig = 302402022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2\n\n# tcId = 91\n# lonely integer tag\nmsg = 313233343030\nresult = invalid\nsig = 302302202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c002\n\n# tcId = 92\n# appending 0's to integer\nmsg = 313233343030\nresult = invalid\nsig = 304702222478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c00000022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2\n\n# tcId = 93\n# appending 0's to integer\nmsg = 313233343030\nresult = invalid\nsig = 304702202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022300a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb20000\n\n# tcId = 94\n# prepending 0's to integer\nmsg = 313233343030\nresult = invalid\nsig = 3047022200002478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2\n# This is a signature with correct values for (r, s) but using some alternative\n# BER encoding instead of DER encoding. Implementations should not accept such\n# signatures to limit signature malleability.\n\n# tcId = 95\n# prepending 0's to integer\nmsg = 313233343030\nresult = invalid\nsig = 304702202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c00223000000a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2\n# This is a signature with correct values for (r, s) but using some alternative\n# BER encoding instead of DER encoding. Implementations should not accept such\n# signatures to limit signature malleability.\n\n# tcId = 96\n# appending unused 0's to integer\nmsg = 313233343030\nresult = invalid\nsig = 304702202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c00000022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2\n\n# tcId = 97\n# appending null value to integer\nmsg = 313233343030\nresult = invalid\nsig = 304702222478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c00500022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2\n\n# tcId = 98\n# appending null value to integer\nmsg = 313233343030\nresult = invalid\nsig = 304702202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022300a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841",
@@ -3153,9 +3134,9 @@
     "6]\n[key.type = ECPublicKey]\n[key.uncompressed = 04f7c54a585a904300d05b53ef3b854e71999a344b89adc0caaa28e254db9bc7c7c161a79f38ff446051303577e40638fb020329940a63c241bb32c2205eb57b7d]\n[key.wx = 0f7c54a585a904300d05b53ef3b854e71999a344b89adc0caaa28e254db9bc7c7]\n[key.wy = 0c161a79f38ff446051303577e40638fb020329940a63c241bb32c2205eb57b7d]\n[keyDer = 3059301306072a8648ce3d020106082a8648ce3d03010703420004f7c54a585a904300d05b53ef3b854e71999a344b89adc0caaa28e254db9bc7c7c161a79f38ff446051303577e40638fb020329940a63c241bb32c2205eb57b7d]\n[sha = SHA-512]\n\n# tcId = 408\n# extreme value for k\nmsg = 313233343030\nresult = valid\nsig = 304402206b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296022016a4502e2781e11ac82cbc9d1edd8c981584d13e18411e2f6e0478c34416e3bb\n\n[key.curve = secp256r1]\n[key.keySize = 256]\n[key.type = ECPublicKey]\n[key.uncompressed = 046b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5]\n[key.wx = 6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296]\n[key.wy = 4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5]\n[keyDer = 3059301306072a8648ce3d020106082a8648ce3d030107034200046b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5]\n[sha = SHA-512]\n\n# tcId = 409\n# testing point duplication\nmsg = 313233343030\nresult = invalid\nsig = 3044022043f800fbeaf9238c58af795bcdad04bc49cd850c394d3382953356b0232102810220249249246db6db6ddb6db6db6db6db6dad4591868595a8ee6bf5f864ff7be0c2\n\n# tcId = 410\n# testing point duplication\nmsg = 313233343030\nresult = invalid\nsig = 3045022100bc07ff031506dc74a75086a43252fb43731975a16dca6b025e867412d94222d00220249249246db6db6ddb6db6db6db6db6dad4591868595a8ee6bf5f864ff7be0c2\n\n[key.curve = secp256r1]\n[key.keySize = 256]\n[key.type = ECPublicKey]\n[key.uncompressed = 046b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296b01cbd1c01e58065711814b583f061e9d431cca994cea1313449bf97c840ae0a]\n[key.wx = 6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296]\n[key.wy = 0b01cbd1c01e58065711814b583f061e9d431cca994cea1313449bf97c840ae0a]\n[keyDer = 3059301306072a8648ce3d020106082a8648ce3d030107034200046b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296b01cbd1c01e58065711814b583f061e9d431cca994cea1313449bf97c840ae0a]\n[sha = SHA-512]\n\n# tcId = 411\n# testing point duplication\nmsg = 313233343030\nresult = invalid\nsig = 3044022043f800fbeaf9238c58af795bcdad04bc49cd850c394d3382953356b0232102810220249249246db6db6ddb6db6db6db6db6dad4591868595a8ee6bf5f864ff7be0c2\n\n# tcId = 412\n# testing point duplication\nmsg = 313233343030\nresult = invalid\nsig = 3045022100bc07ff031506dc74a75086a43252fb43731975a16dca6b025e867412d94222d00220249249246db6db6ddb6db6db6db6db6dad4591868595a8ee6bf5f864ff7be0c2\n\n[key.curve = secp256r1]\n[key.keySize = 256]\n[key.type = ECPublicKey]\n[key.uncompressed = 0404aaec73635726f213fb8a9e64da3b8632e41495a944d0045b522eba7240fad587d9315798aaa3a5ba01775787ced05eaaf7b4e09fc81d6d1aa546e8365d525d]\n[key.wx = 4aaec73635726f213fb8a9e64da3b8632e41495a944d0045b522eba7240fad5]\n[key.wy = 087d9315798aaa3a5ba01775787ced05eaaf7b4e09fc81d6d1aa546e8365d525d]\n[keyDer = 3059301306072a8648ce3d020106082a8648ce3d0301070342000404aaec73635726f213fb8a9e64da3b8632e41495a944d0045b522eba7240fad587d9315798aaa3a5ba01775787ced05eaaf7b4e09fc81d6d1aa546e8365d525d]\n[sha = SHA-512]\n\n# tcId = 413\n# pseudorandom signature\nmsg = \nresult = valid\nsig = 30440220093f3825c0cf820cced816a3a67446c85606a6d529e43857643fccc11e1f705f0220769782888c63058630f97a5891c8700e82979e4f233586bfc5042fa73cb70a4e\n\n# tcId = 414\n# pseudorandom signature\nmsg = 4d7367\nresult = valid\nsig = 3046022100e8564e3e515a09f9f35258442b99e162d27e10975fcb7963d3c26319dc093f84022100c3af01ed0fd0148749ca323364846c862fc6f4beb682b7ead3b2d89b9da8bad4\n\n# tcId = 415\n# pseudorandom signature\nmsg = 313233343030\nresult = valid\nsig = 304502201412254f8c1dd2742a00ddee5192e7baa288741026871f3057ad9f983b5ab114022100bcdf878fa156f37040922698ad6fb6928601ddc26c40448ea660e67c25eda090\n\n# tcId = 416\n# pseudorandom signature\nmsg = 0000000000000000000000000000000000000000\nresult = valid\nsig = 30450221009e0676048381839bb0a4703a0ae38facfe1e2c61bd25950c896aa975cd6ec86902206ea0cedf96f11fff0e746941183492f4d17272c92449afd20e34041a6894ee82\n\n[key.curve = secp256r1]\n[key.keySize = 256]\n[key.type = ECPublicKey]\n[key.uncompressed = 044f337ccfd67726a805e4f1600ae2849df3807eca117380239fbd816900000000ed9dea124cc8c396416411e988c30f427eb504af43a3146cd5df7ea60666d685]\n[key.wx = 4f337ccfd67726a805e4f1600ae2849df3807eca117380239fbd816900000000]\n[key.wy = 0ed9dea124cc8c396416411e988c30f427eb504af43a3146cd5df7ea60666d685]\n[keyDer = 3059301306072a8648ce3d020106082a8648ce3d030107034200044f337ccfd67726a805e4f1600ae2849df3807eca117380239fbd816900000000ed9dea124cc8c396416411e988c30f427eb504af43a3146cd5df7ea60666d685]\n[sha = SHA-512]\n\n# tcId = 417\n# x-coordinate of the public key has many trailing 0's\nmsg = 4d657373616765\nresult = valid\nsig = 30440220554482404173a5582884b0d168a32ef8033d7eb780936c390e8eedf720c7f56402200a15413f9ed0d454b92ab901119e7251a4d444ba1421ba639fa57e0d8cf6b313\n\n# tcId = 418\n# x-coordinate of the public key has many trailing 0's\nmsg = 4d657373616765\nresult = valid\nsig = 304502200b1d838dd54a462745e2c8d5f32637f26fb16dde20a385e45f8a20a8a1f8370e022100ae855e0a10ef087075fda0ed84e2bc5786a681172ea9834e53351316df332bbd\n\n# tcId = 419\n# x-coordinate of the public key has many trailing 0's\nmsg = 4d657373616765\nresult = valid\nsig = 3045022100af89e4f2b03e5d1f0352e258ef71493040c17d70c36cfd044128302df2ed5e4a0220420f04148c3e6f06561bd448362d6c6fa3f9aeeb7e42843b4674e7ddfd0ba901\n\n[key.curve = secp256r1]\n[key.keySize = 256]\n[key.type = ECPublicKey]\n[key.uncompressed = 043cf03d614d8939cfd499a07873fac281618f06b8ff87e8015c3f49726500493584fa174d791c72bf2ce3880a8960dd2a7c7a1338a82f85a9e59cdbde80000000]\n[key.wx = 3cf03d614d8939cfd499a07873fac281618f06b8ff87e8015c3f497265004935]\n[key.wy = 084fa174d791c72bf2ce3880a8960dd2a7c7a1338a82f85a9e59cdbde80000000]\n[keyDer = 3059301306072a8648ce3d020106082a8648ce3d030107034200043cf03d614d8939cfd499a07873fac281618f06b8ff87e8015c3f49726500493584fa174d791c72bf2ce3880a8960dd2a7c7a1338a82f85a9e59cdbde80000000]\n[sha = SHA-512]\n\n# tcId = 420\n# y-coordinate of the public key has many trailing 0's\nmsg = 4d657373616765\nresult = valid\nsig = 304402206c1581f1485ccc4e657606fa1a38cf227e3870dc9f41e26b84e28483635e321b02201b3e3c22af23e919b30330f8710f6ef3760c0e2237a9a9f5cf30a1d9f5bbd464\n\n# tcId = 421\n# y-coordinate of the public key has many trailing 0's\nmsg = 4d657373616765\nresult = valid\nsig = 3045022100dc83bf97ca28db0e04104a16fe3de694311a6cd9f230a300504ae71d8ec755b1022064a83af0ab3e6037003a1f4240dffd8a342afdee50604ed1afa416fd009e4668\n\n# tcId = 422\n# y-coordinate of the public key has many trailing 0's\nmsg = 4d657373616765\nresult = valid\nsig = 30450220575b70b4375684291b95d81e3c820ed9bde9e5b7343036e4951f3c46894a6d9d022100f10d716efbfeba953701b603fc9ef6ff6e47edef38c9eeef2d55e6486bc4d6e6\n\n[key.curve = secp256r1]\n[key.keySize = 256]\n[key.type = ECPublicKey]\n[key.uncompressed = 043cf03d614d8939cfd499a07873fac281618f06b8ff87e8015c3f4972650049357b05e8b186e38d41d31c77f5769f22d58385ecc857d07a561a6324217fffffff]\n[key.wx = 3cf03d614d8939cfd499a07873fac281618f06b8ff87e8015c3f497265004935]\n[key.wy = 7b05e8b186e38d41d31c77f5769f22d58385ecc857d07a561a6324217fffffff]\n[keyDer = 3059301306072a8648ce3d020106082a8648ce3d030107034200043cf03d614d8939cfd499a07873fac281618f06b8ff87e8015c3f4972650049357b05e8b186e38d41d31c77f5769f22d58385ecc857d07a561a6324217fffffff]\n[sha = SHA-512]\n\n# tcId = 423\n# y-coordinate of the public key has many trailing 1's\nmsg = 4d657373616765\nresult = valid\nsig = 30450221008d4f113189dfd3d3239e331f76d3fca9cef86fcd5dc9b4ab2ca38aeba56c178b022078389c3cf11dcff6d6c7f5efd277d480060691144b568a6f090c8902557bfc61\n\n# tcId = 424\n# y-coordinate of the public key has many trailing 1's\nmsg = 4d657373616765\nresult = valid\nsig = 3046022100834d10ec2d2d50eeebfecd6328f03fafbb488fc043c362cbc67880ec0ebd04b302210094c026feaf6e68759146fe5b6fd52eaa3c3c5552d83719d2cb900615e2a634db\n\n# tcId = 425\n# y-coordinate of the public key has many trailing 1's\nmsg = 4d657373616765\nre",
     "sult = valid\nsig = 304502206894de495e7bb5566807d475d96a0d414a94f4f02c3ab7c2edc2916deafc1e1f022100a603642c20fabc07182867fcc6923d35be23ad3f97a5f93c6ec5b9cce8239569\n\n[key.curve = secp256r1]\n[key.keySize = 256]\n[key.type = ECPublicKey]\n[key.uncompressed = 042829c31faa2e400e344ed94bca3fcd0545956ebcfe8ad0f6dfa5ff8effffffffa01aafaf000e52585855afa7676ade284113099052df57e7eb3bd37ebeb9222e]\n[key.wx = 2829c31faa2e400e344ed94bca3fcd0545956ebcfe8ad0f6dfa5ff8effffffff]\n[key.wy = 0a01aafaf000e52585855afa7676ade284113099052df57e7eb3bd37ebeb9222e]\n[keyDer = 3059301306072a8648ce3d020106082a8648ce3d030107034200042829c31faa2e400e344ed94bca3fcd0545956ebcfe8ad0f6dfa5ff8effffffffa01aafaf000e52585855afa7676ade284113099052df57e7eb3bd37ebeb9222e]\n[sha = SHA-512]\n\n# tcId = 426\n# x-coordinate of the public key has many trailing 1's\nmsg = 4d657373616765\nresult = valid\nsig = 3046022100e500c086fedd59e090ce7bfb615751ed9abe4c09b839ee8f05320245b9796f3e022100807b1d0638c86ef6113fff0d63497800e1b848b5a303a54c748e45ca8f35d7d7\n\n# tcId = 427\n# x-coordinate of the public key has many trailing 1's\nmsg = 4d657373616765\nresult = valid\nsig = 3046022100b922c1abe1a8309c0acf90e586c6de8c33e37057673390a97ff098f71680b32b022100f86d92b051b7923d82555c205e21b54eab869766c716209648c3e6cc2629057d\n\n# tcId = 428\n# x-coordinate of the public key has many trailing 1's\nmsg = 4d657373616765\nresult = valid\nsig = 3046022100823c37e46c74ec8497d89245fde3bf53ddb462c00d840e983dcb1b72bbf8bf27022100c4552f2425d14f0f0fa988778403d60a58962e7c548715af83b2edabbb24a49f\n\n[key.curve = secp256r1]\n[key.keySize = 256]\n[key.type = ECPublicKey]\n[key.uncompressed = 04fffffff948081e6a0458dd8f9e738f2665ff9059ad6aac0708318c4ca9a7a4f55a8abcba2dda8474311ee54149b973cae0c0fb89557ad0bf78e6529a1663bd73]\n[key.wx = 0fffffff948081e6a0458dd8f9e738f2665ff9059ad6aac0708318c4ca9a7a4f5]\n[key.wy = 5a8abcba2dda8474311ee54149b973cae0c0fb89557ad0bf78e6529a1663bd73]\n[keyDer = 3059301306072a8648ce3d020106082a8648ce3d03010703420004fffffff948081e6a0458dd8f9e738f2665ff9059ad6aac0708318c4ca9a7a4f55a8abcba2dda8474311ee54149b973cae0c0fb89557ad0bf78e6529a1663bd73]\n[sha = SHA-512]\n\n# tcId = 429\n# x-coordinate of the public key is large\nmsg = 4d657373616765\nresult = valid\nsig = 30450220577a08a95db6dcda9985109942d3786630f640190f920b95bd4d5d84e0f163ef022100d762286e92925973fd38b67ef944a99c0ec5b499b7175cbb4369e053c1fcbb10\n\n# tcId = 430\n# x-coordinate of the public key is large\nmsg = 4d657373616765\nresult = valid\nsig = 304402207ba458cfe952326922c7aa2854bdc673ce3daaf65d464dfb9f700701503056b102200df8821c92d20546fa741fb426bf56728a53182691964225c9b380b56b22ee6d\n\n# tcId = 431\n# x-coordinate of the public key is large\nmsg = 4d657373616765\nresult = valid\nsig = 304402205cd60c3b021b4be116f06f1d447f65e458329a8bbae1d9b5977d18cf5618486102204c635cd7aa9aebb5716d5ae09e57f8c481a741a029b40f71ec47344ef883e86e\n\n[key.curve = secp256r1]\n[key.keySize = 256]\n[key.type = ECPublicKey]\n[key.uncompressed = 0400000003fa15f963949d5f03a6f5c7f86f9e0015eeb23aebbff1173937ba748e1099872070e8e87c555fa13659cca5d7fadcfcb0023ea889548ca48af2ba7e71]\n[key.wx = 3fa15f963949d5f03a6f5c7f86f9e0015eeb23aebbff1173937ba748e]\n[key.wy = 1099872070e8e87c555fa13659cca5d7fadcfcb0023ea889548ca48af2ba7e71]\n[keyDer = 3059301306072a8648ce3d020106082a8648ce3d0301070342000400000003fa15f963949d5f03a6f5c7f86f9e0015eeb23aebbff1173937ba748e1099872070e8e87c555fa13659cca5d7fadcfcb0023ea889548ca48af2ba7e71]\n[sha = SHA-512]\n\n# tcId = 432\n# x-coordinate of the public key is small\nmsg = 4d657373616765\nresult = valid\nsig = 304402204b50e1e8cf830e04c17e7472caf60da8150ffa568e2c64498cc972a379e542e502202e3adaa5afab89cca91693609555f40543578852cde29c21cb037c0c0b78478e\n\n# tcId = 433\n# x-coordinate of the public key is small\nmsg = 4d657373616765\nresult = valid\nsig = 304402205aea930c7d8fffcd5c6df2c9430ef76f8b5ed58a8b9c95847288abf8f09a1ac202207ddfef7688a6053ce4eeeeefd6f1a9d71381b7548925f6682aa0a9d05cf5a3a3\n\n# tcId = 434\n# x-coordinate of the public key is small\nmsg = 4d657373616765\nresult = valid\nsig = 304602210098b092c2d14b5b14a23e9368e0ce1be744dfae9f9a5cdaba51e7872099df96f202210090d3e4f87bd7bc94589f8150b6b01045cd8759a00af78b24d7de771887610df5\n\n[key.curve = secp256r1]\n[key.keySize = 256]\n[key.type = ECPublicKey]\n[key.uncompressed = 04bcbb2914c79f045eaa6ecbbc612816b3be5d2d6796707d8125e9f851c18af015000000001352bb4a0fa2ea4cceb9ab63dd684ade5a1127bcf300a698a7193bc2]\n[key.wx = 0bcbb2914c79f045eaa6ecbbc612816b3be5d2d6796707d8125e9f851c18af015]\n[key.wy = 1352bb4a0fa2ea4cceb9ab63dd684ade5a1127bcf300a698a7193bc2]\n[keyDer = 3059301306072a8648ce3d020106082a8648ce3d03010703420004bcbb2914c79f045eaa6ecbbc612816b3be5d2d6796707d8125e9f851c18af015000000001352bb4a0fa2ea4cceb9ab63dd684ade5a1127bcf300a698a7193bc2]\n[sha = SHA-512]\n\n# tcId = 435\n# y-coordinate of the public key is small\nmsg = 4d657373616765\nresult = valid\nsig = 30460221009e95f2856a9fff9a172b07817c8c60fe185cd3ce9582678f8cc4b02bc444621a022100c54ca51d8117d904f0d3773911cb2792348fae21c2da7dad25f990d122376e4c\n\n# tcId = 436\n# y-coordinate of the public key is small\nmsg = 4d657373616765\nresult = valid\nsig = 3046022100e77df8f9782696344c33de29ebdc9f8d3fcf463d950cdbe256fd4fc2fd44877e02210087028850c962cf2fb450ffe6b983981e499dc498fbd654fa454c9e07c8cb5ca8\n\n# tcId = 437\n# y-coordinate of the public key is small\nmsg = 4d657373616765\nresult = valid\nsig = 3045022100bd2dd6f5026d2b5ad7ead74bdf52b8cbcabc08facee0a1c8584658a85ed0c5dc02203e8543e819bdae47d872e29a85ba38addf3eaeaad8786d79c3fb027f6f1ff4bf\n\n[key.curve = secp256r1]\n[key.keySize = 256]\n[key.type = ECPublicKey]\n[key.uncompressed = 04bcbb2914c79f045eaa6ecbbc612816b3be5d2d6796707d8125e9f851c18af015fffffffeecad44b6f05d15b33146549c2297b522a5eed8430cff596758e6c43d]\n[key.wx = 0bcbb2914c79f045eaa6ecbbc612816b3be5d2d6796707d8125e9f851c18af015]\n[key.wy = 0fffffffeecad44b6f05d15b33146549c2297b522a5eed8430cff596758e6c43d]\n[keyDer = 3059301306072a8648ce3d020106082a8648ce3d03010703420004bcbb2914c79f045eaa6ecbbc612816b3be5d2d6796707d8125e9f851c18af015fffffffeecad44b6f05d15b33146549c2297b522a5eed8430cff596758e6c43d]\n[sha = SHA-512]\n\n# tcId = 438\n# y-coordinate of the public key is large\nmsg = 4d657373616765\nresult = valid\nsig = 3045022100bd5c0294acc28c15c5d1ebc7274c9ca21a081c8a67da430a34a7fff1a564fabb02207ec103a2385b4ff38b47d306434e9091de24dc9f1a25967ee06f8a0a53ac0181\n\n# tcId = 439\n# y-coordinate of the public key is large\nmsg = 4d657373616765\nresult = valid\nsig = 304402203c7dbfb43dd80379ee2c23ad5472873a22c8a0179ac8f381ad9e0f193231dc1f02207cf8e07530ade503b3d43a84b75a2a76fc40763daed4e9734e745c58c9ae72d3\n\n# tcId = 440\n# y-coordinate of the public key is large\nmsg = 4d657373616765\nresult = valid\nsig = 3045022100b38ca4dac6d949be5e5f969860269f0eedff2eb92f45bfc02470300cc96dd52602201c7b22992bb13749cc0c5bc25330a17446e40db734203f9035172725fc70f863\n\n",
 };
-static const size_t kLen71 = 174442;
+static const size_t kLen70 = 174442;
 
-static const char *kData71[] = {
+static const char *kData70[] = {
     "# Imported from Wycheproof's ecdsa_secp384r1_sha384_test.json.\n# This file is generated by convert_wycheproof.go. Do not edit by hand.\n#\n# Algorithm: ECDSA\n# Generator version: 0.4.12\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.uncompressed = 042da57dda1089276a543f9ffdac0bff0d976cad71eb7280e7d9bfd9fee4bdb2f20f47ff888274389772d98cc5752138aa4b6d054d69dcf3e25ec49df870715e34883b1836197d76f8ad962e78f6571bbc7407b0d6091f9e4d88f014274406174f]\n[key.wx = 2da57dda1089276a543f9ffdac0bff0d976cad71eb7280e7d9bfd9fee4bdb2f20f47ff888274389772d98cc5752138aa]\n[key.wy = 4b6d054d69dcf3e25ec49df870715e34883b1836197d76f8ad962e78f6571bbc7407b0d6091f9e4d88f014274406174f]\n[keyDer = 3076301006072a8648ce3d020106052b81040022036200042da57dda1089276a543f9ffdac0bff0d976cad71eb7280e7d9bfd9fee4bdb2f20f47ff888274389772d98cc5752138aa4b6d054d69dcf3e25ec49df870715e34883b1836197d76f8ad962e78f6571bbc7407b0d6091f9e4d88f014274406174f]\n[sha = SHA-384]\n\n# tcId = 1\n# signature malleability\nmsg = 313233343030\nresult = valid\nsig = 3064023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d702301840da9fc1d2f8f8900cf485d5413b8c2574ee3a8d4ca03995ca30240e09513805bf6209b58ac7aa9cff54eecd82b9f1\n\n# tcId = 2\n# Legacy:ASN encoding of s misses leading 0\nmsg = 313233343030\nresult = acceptable\nsig = 3064023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d70230e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n# Some implementations of ECDSA and DSA incorrectly encode r and s by not\n# including leading zeros in the ASN encoding of integers when necessary. Hence,\n# some implementations (e.g. jdk) allow signatures with incorrect ASN encodings\n# assuming that the signature is otherwise valid.\n\n# tcId = 3\n# valid\nmsg = 313233343030\nresult = valid\nsig = 3065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 4\n# long form encoding of length\nmsg = 313233343030\nresult = invalid\nsig = 308165023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n# This is a signature with correct values for (r, s) but using some alternative\n# BER encoding instead of DER encoding. Implementations should not accept such\n# signatures to limit signature malleability.\n\n# tcId = 5\n# long form encoding of length\nmsg = 313233343030\nresult = invalid\nsig = 306602813012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n# This is a signature with correct values for (r, s) but using some alternative\n# BER encoding instead of DER encoding. Implementations should not accept such\n# signatures to limit signature malleability.\n\n# tcId = 6\n# long form encoding of length\nmsg = 313233343030\nresult = invalid\nsig = 3066023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d702813100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n# This is a signature with correct values for (r, s) but using some alternative\n# BER encoding instead of DER encoding. Implementations should not accept such\n# signatures to limit signature malleability.\n\n# tcId = 7\n# length contains leading 0\nmsg = 313233343030\nresult = invalid\nsig = 30820065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n# This is a signature with correct values for (r, s) but using some alternative\n# BER encoding instead of DER encoding. Implementations should not accept such\n# signatures to limit signature malleability.\n\n# tcId = 8\n# length contains leading 0\nmsg = 313233343030\nresult = invalid\nsig = 30670282003012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n# This is a signature with correct values for (r, s) but using some alternative\n# BER encoding instead of DER encoding. Implementations should not accept such\n# signatures to limit signature malleability.\n\n# tcId = 9\n# length contains leading 0\nmsg = 313233343030\nresult = invalid\nsig = 3067023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d70282003100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n# This is a signature with correct values for (r, s) but using some alternative\n# BER encoding instead of DER encoding. Implementations should not accept such\n# signatures to limit signature malleability.\n\n# tcId = 10\n# wrong length\nmsg = 313233343030\nresult = invalid\nsig = 3066023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 11\n# wrong length\nmsg = 313233343030\nresult = invalid\nsig = 3064023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 12\n# wrong length\nmsg = 313233343030\nresult = invalid\nsig = 3065023112b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 13\n# wrong length\nmsg = 313233343030\nresult = invalid\nsig = 3065022f12b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 14\n# wrong length\nmsg = 313233343030\nresult = invalid\nsig = 3065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023200e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 15\n# wrong length\nmsg = 313233343030\nresult = invalid\nsig = 3065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023000e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 16\n# uint32 overflow in length\nmsg = 313233343030\nresult = invalid\nsig = 30850100000065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 17\n# uint32 overflow in length\nmsg = 313233343030\nresult = invalid\nsig = 306a0285010000003012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 18\n# uint32 overflow in length\nmsg = 313233343030\nresult = invalid\nsig = 306a023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d70285010000003100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 19\n# uint64 overflow in length\nmsg = 313233343030\nresult = invalid\nsig = 3089010000000000000065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 20\n# uint64 overflow in length\nmsg = 313233343030\nresult = invalid\nsig = 306e028901000000000000003012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2a",
     "bec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 21\n# uint64 overflow in length\nmsg = 313233343030\nresult = invalid\nsig = 306e023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7028901000000000000003100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 22\n# length = 2**31 - 1\nmsg = 313233343030\nresult = invalid\nsig = 30847fffffff023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 23\n# length = 2**31 - 1\nmsg = 313233343030\nresult = invalid\nsig = 306902847fffffff12b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 24\n# length = 2**31 - 1\nmsg = 313233343030\nresult = invalid\nsig = 3069023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d702847fffffff00e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 25\n# length = 2**32 - 1\nmsg = 313233343030\nresult = invalid\nsig = 3084ffffffff023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 26\n# length = 2**32 - 1\nmsg = 313233343030\nresult = invalid\nsig = 30690284ffffffff12b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 27\n# length = 2**32 - 1\nmsg = 313233343030\nresult = invalid\nsig = 3069023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d70284ffffffff00e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 28\n# length = 2**40 - 1\nmsg = 313233343030\nresult = invalid\nsig = 3085ffffffffff023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 29\n# length = 2**40 - 1\nmsg = 313233343030\nresult = invalid\nsig = 306a0285ffffffffff12b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 30\n# length = 2**40 - 1\nmsg = 313233343030\nresult = invalid\nsig = 306a023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d70285ffffffffff00e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 31\n# length = 2**64 - 1\nmsg = 313233343030\nresult = invalid\nsig = 3088ffffffffffffffff023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 32\n# length = 2**64 - 1\nmsg = 313233343030\nresult = invalid\nsig = 306d0288ffffffffffffffff12b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 33\n# length = 2**64 - 1\nmsg = 313233343030\nresult = invalid\nsig = 306d023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d70288ffffffffffffffff00e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 34\n# incorrect length\nmsg = 313233343030\nresult = invalid\nsig = 30ff023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 35\n# incorrect length\nmsg = 313233343030\nresult = invalid\nsig = 306502ff12b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 36\n# incorrect length\nmsg = 313233343030\nresult = invalid\nsig = 3065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d702ff00e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 37\n# indefinite length without termination\nmsg = 313233343030\nresult = invalid\nsig = 3080023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 38\n# indefinite length without termination\nmsg = 313233343030\nresult = invalid\nsig = 3065028012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 39\n# indefinite length without termination\nmsg = 313233343030\nresult = invalid\nsig = 3065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7028000e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 40\n# removing sequence\nmsg = 313233343030\nresult = invalid\nsig = \n\n# tcId = 41\n# lonely sequence tag\nmsg = 313233343030\nresult = invalid\nsig = 30\n\n# tcId = 42\n# appending 0's to sequence\nmsg = 313233343030\nresult = invalid\nsig = 3067023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f820000\n\n# tcId = 43\n# prepending 0's to sequence\nmsg = 313233343030\nresult = invalid\nsig = 30670000023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 44\n# appending unused 0's to sequence\nmsg = 313233343030\nresult = invalid\nsig = 3065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f820000\n\n# tcId = 45\n# appending null value to sequence\nmsg = 313233343030\nresult = invalid\nsig = 3067023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f820500\n\n# tcId = 46\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 306a4981773065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 47\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 306925003065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 48\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 30673065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f820004deadbeef\n\n# tcId = 49\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 306a2235498177023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 50\n# includin",
     "g garbage\nmsg = 313233343030\nresult = invalid\nsig = 306922342500023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 51\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 306d2232023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d70004deadbeef023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 52\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 306a023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d72236498177023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 53\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 3069023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d722352500023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 54\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 306d023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d72233023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f820004deadbeef\n\n# tcId = 55\n# including undefined tags\nmsg = 313233343030\nresult = invalid\nsig = 306daa00bb00cd003065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 56\n# including undefined tags\nmsg = 313233343030\nresult = invalid\nsig = 306baa02aabb3065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 57\n# including undefined tags\nmsg = 313233343030\nresult = invalid\nsig = 306d2238aa00bb00cd00023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 58\n# including undefined tags\nmsg = 313233343030\nresult = invalid\nsig = 306b2236aa02aabb023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 59\n# including undefined tags\nmsg = 313233343030\nresult = invalid\nsig = 306d023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d72239aa00bb00cd00023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 60\n# including undefined tags\nmsg = 313233343030\nresult = invalid\nsig = 306b023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d72237aa02aabb023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 61\n# truncated length of sequence\nmsg = 313233343030\nresult = invalid\nsig = 3081\n\n# tcId = 62\n# using composition with indefinite length\nmsg = 313233343030\nresult = invalid\nsig = 30803065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f820000\n\n# tcId = 63\n# using composition with indefinite length\nmsg = 313233343030\nresult = invalid\nsig = 30692280023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d70000023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 64\n# using composition with indefinite length\nmsg = 313233343030\nresult = invalid\nsig = 3069023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d72280023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f820000\n\n# tcId = 65\n# using composition with wrong tag\nmsg = 313233343030\nresult = invalid\nsig = 30803165023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f820000\n\n# tcId = 66\n# using composition with wrong tag\nmsg = 313233343030\nresult = invalid\nsig = 30692280033012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d70000023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 67\n# using composition with wrong tag\nmsg = 313233343030\nresult = invalid\nsig = 3069023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d72280033100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f820000\n\n# tcId = 68\n# Replacing sequence with NULL\nmsg = 313233343030\nresult = invalid\nsig = 0500\n\n# tcId = 69\n# changing tag value of sequence\nmsg = 313233343030\nresult = invalid\nsig = 2e65023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 70\n# changing tag value of sequence\nmsg = 313233343030\nresult = invalid\nsig = 2f65023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 71\n# changing tag value of sequence\nmsg = 313233343030\nresult = invalid\nsig = 3165023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 72\n# changing tag value of sequence\nmsg = 313233343030\nresult = invalid\nsig = 3265023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 73\n# changing tag value of sequence\nmsg = 313233343030\nresult = invalid\nsig = ff65023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 74\n# dropping value of sequence\nmsg = 313233343030\nresult = invalid\nsig = 3000\n\n# tcId = 75\n# using composition for sequence\nmsg = 313233343030\nresult = invalid\nsig = 306930010230643012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 76\n# truncate sequence\nmsg = 313233343030\nresult = invalid\nsig = 3064023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f\n\n# tcId = 77\n# truncate sequence\nmsg = 313233343030\nresult = invalid\nsig = 30643012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82\n\n# tcId = 78\n# indefinite length\nmsg = 313233343030\nresult = invalid\nsig = 3080023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f820000\n# This is a signature with correct values for (r, s) but using some alternative\n# BER encoding instead of DER encoding. Implementations should not accept such\n# signatures to limit",
@@ -3179,9 +3160,9 @@
     "705498c023100cd7b9b766b97b53d1a80fc0b760af16a11bf4a59c7c367c6c7275dfb6e18a88091eed3734bf5cf41b3dc6fecd6d3baaf\n\n# tcId = 374\n# pseudorandom signature\nmsg = 0000000000000000000000000000000000000000\nresult = valid\nsig = 306502305cad9ae1565f2588f86d821c2cc1b4d0fdf874331326568f5b0e130e4e0c0ec497f8f5f564212bd2a26ecb782cf0a18d023100bf2e9d0980fbb00696673e7fbb03e1f854b9d7596b759a17bf6e6e67a95ea6c1664f82dc449ae5ea779abd99c78e6840\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.uncompressed = 04ffffffffaa63f1a239ac70197c6ebfcea5756dc012123f82c51fa874d66028be00e976a1080606737cc75c40bdfe4aacacbd85389088a62a6398384c22b52d492f23f46e4a27a4724ad55551da5c483438095a247cb0c3378f1f52c3425ff9f1]\n[key.wx = 0ffffffffaa63f1a239ac70197c6ebfcea5756dc012123f82c51fa874d66028be00e976a1080606737cc75c40bdfe4aac]\n[key.wy = 0acbd85389088a62a6398384c22b52d492f23f46e4a27a4724ad55551da5c483438095a247cb0c3378f1f52c3425ff9f1]\n[keyDer = 3076301006072a8648ce3d020106052b8104002203620004ffffffffaa63f1a239ac70197c6ebfcea5756dc012123f82c51fa874d66028be00e976a1080606737cc75c40bdfe4aacacbd85389088a62a6398384c22b52d492f23f46e4a27a4724ad55551da5c483438095a247cb0c3378f1f52c3425ff9f1]\n[sha = SHA-384]\n\n# tcId = 375\n# x-coordinate of the public key is large\nmsg = 4d657373616765\nresult = valid\nsig = 3065023007648b6660d01ba2520a09d298adf3b1a02c32744bd2877208f5a4162f6c984373139d800a4cdc1ffea15bce4871a0ed02310099fd367012cb9e02cde2749455e0d495c52818f3c14f6e6aad105b0925e2a7290ac4a06d9fadf4b15b578556fe332a5f\n\n# tcId = 376\n# x-coordinate of the public key is large\nmsg = 4d657373616765\nresult = valid\nsig = 3065023100a049dcd96c72e4f36144a51bba30417b451a305dd01c9e30a5e04df94342617dc383f17727708e3277cd7246ca44074102303970e264d85b228bf9e9b9c4947c5dd041ea8b5bde30b93aa59fedf2c428d3e2540a54e0530688acccb83ac7b29b79a2\n\n# tcId = 377\n# x-coordinate of the public key is large\nmsg = 4d657373616765\nresult = valid\nsig = 30650230441800ea9377c27865be000ad008eb3d7502bdd105824b26d15cf3d06452969a9d0607a915a8fe989215fc4d61af6e05023100dce29faa5137f75ad77e03918c8ee6747cc7a39b0a69f8b915654cac4cf4bfd9c87cc46ae1631b5c6baebd4fc08ff8fd\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.uncompressed = 04d1827fc6f6f12f21992c5a409a0653b121d2ef02b2b0ab01a9161ce956280740b1e356b255701b0a6ddc9ec2ca8a9422c6ed5d2ced8d8ab7560fa5bb88c738e74541883d8a2b1c0e2ba7e36d030fc4d9bfb8b22f24db897ebac49dd400000000]\n[key.wx = 0d1827fc6f6f12f21992c5a409a0653b121d2ef02b2b0ab01a9161ce956280740b1e356b255701b0a6ddc9ec2ca8a9422]\n[key.wy = 0c6ed5d2ced8d8ab7560fa5bb88c738e74541883d8a2b1c0e2ba7e36d030fc4d9bfb8b22f24db897ebac49dd400000000]\n[keyDer = 3076301006072a8648ce3d020106052b8104002203620004d1827fc6f6f12f21992c5a409a0653b121d2ef02b2b0ab01a9161ce956280740b1e356b255701b0a6ddc9ec2ca8a9422c6ed5d2ced8d8ab7560fa5bb88c738e74541883d8a2b1c0e2ba7e36d030fc4d9bfb8b22f24db897ebac49dd400000000]\n[sha = SHA-384]\n\n# tcId = 378\n# y-coordinate of the public key has many trailing 0's\nmsg = 4d657373616765\nresult = valid\nsig = 306402303244768016457c463b74f2097f216d9670b191f76281c74bc6a1a1971d19f209bf4696468f5eb75d6326a0a43c0a65290230501e0ad985ed9f95697bd17fdbe3f9ca92e0f76426d3664e6896648d9c750bf588d0ce7d011c1a1e8d6c2e082422dc93\n\n# tcId = 379\n# y-coordinate of the public key has many trailing 0's\nmsg = 4d657373616765\nresult = valid\nsig = 306402305e1af40f2480e3d97c4ae4bfd34a9f45269241356f3a46becd86a4a7c9716d73ca5aebdb3db1a7765650666683bc856b02307e7c4b473a2baaa4953785be8aa2a10006f6d36b400ab981864d69cecec046718d0404b9647454b159aa5a92d76d7955\n\n# tcId = 380\n# y-coordinate of the public key has many trailing 0's\nmsg = 4d657373616765\nresult = valid\nsig = 306502306688e36a26f15bdc1c3f91367f8a7667f7bb3e30a335d6f0900e9534eb88b260cb29344c723fedfbe7ac9c5a33f4bf0d023100aa35fddf0fdc9017860b378f801cd806f3e2d754cd2fd94eb7bb36a46ce828cef87e9ebbf447068e630b87fee385ad8f\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.uncompressed = 041099bb45100f55f5a85cca3de2b3bd5e250f4f6fad6631a3156c2e52a33d7d615dd279f79f8b4baff7c713ac00000000e6c9b736a8929f2ed7be0c753a54cbb48b8469e0411eaf93a4a82459ba0b681bba8f5fb383b4906d4901a3303e2f1557]\n[key.wx = 1099bb45100f55f5a85cca3de2b3bd5e250f4f6fad6631a3156c2e52a33d7d615dd279f79f8b4baff7c713ac00000000]\n[key.wy = 0e6c9b736a8929f2ed7be0c753a54cbb48b8469e0411eaf93a4a82459ba0b681bba8f5fb383b4906d4901a3303e2f1557]\n[keyDer = 3076301006072a8648ce3d020106052b81040022036200041099bb45100f55f5a85cca3de2b3bd5e250f4f6fad6631a3156c2e52a33d7d615dd279f79f8b4baff7c713ac00000000e6c9b736a8929f2ed7be0c753a54cbb48b8469e0411eaf93a4a82459ba0b681bba8f5fb383b4906d4901a3303e2f1557]\n[sha = SHA-384]\n\n# tcId = 381\n# x-coordinate of the public key has many trailing 0's\nmsg = 4d657373616765\nresult = valid\nsig = 3065023100d4a8f3b0b4d3a5769e3a0bbc644b35f1d509355ed1fe401e170f667b661f693b32598e8c143a817a958982845042bb48023004cc07578bbd1981dbf6e8a97a354c98d41b8b6f6e8a2c2b1763c7c2a29d79e24f8476075c9aed9aec6c64dff50461ae\n\n# tcId = 382\n# x-coordinate of the public key has many trailing 0's\nmsg = 4d657373616765\nresult = valid\nsig = 3065023100c286d1928e9c79fdd3bebdf22a1dbd37c8105e8ecf41e9e3777fe341b6b8d5a89b9d986827d6d1dbb381cd8239484a220230201119ae305b9360aa9b5e5d1567e0674c09e4f025556ebf81b987466b0f421b8d31f72bbe95f3ce2aa9874a84edfd40\n\n# tcId = 383\n# x-coordinate of the public key has many trailing 0's\nmsg = 4d657373616765\nresult = valid\nsig = 3065023100d9c678550167f10c511e62acb4bd0a3f7f336bc090c94e6c6b02622439c348a2159c5f41f9b5aa4b470590d40dcd7cc202301fd5eaee295abb4081cb626745f4ad279ceb44604062830b58e6c0465c562d41f02ba588fc0db1ebbe339cdc008d7a1b\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.uncompressed = 04000000002b089edd754169010145f263f334fc167cc19dae8225970ae19cc8cb7ec73593d6a465c370f5478b0e539d69d1951d597b56a67345acb25809581f07cd0eb78d9538a3f8a65f300e68a1eb78507df76de650e8f8ee63a5f0c5687c98]\n[key.wx = 2b089edd754169010145f263f334fc167cc19dae8225970ae19cc8cb7ec73593d6a465c370f5478b0e539d69]\n[key.wy = 0d1951d597b56a67345acb25809581f07cd0eb78d9538a3f8a65f300e68a1eb78507df76de650e8f8ee63a5f0c5687c98]\n[keyDer = 3076301006072a8648ce3d020106052b8104002203620004000000002b089edd754169010145f263f334fc167cc19dae8225970ae19cc8cb7ec73593d6a465c370f5478b0e539d69d1951d597b56a67345acb25809581f07cd0eb78d9538a3f8a65f300e68a1eb78507df76de650e8f8ee63a5f0c5687c98]\n[sha = SHA-384]\n\n# tcId = 384\n# x-coordinate of the public key is small\nmsg = 4d657373616765\nresult = valid\nsig = 3065023020fee7c71b6cb0d1da3641ec6622c055a3b16a1f596c64b34da1b2d0b868b66a8f0a0d0db983b3dc7e53bb7295da81970231008141a931d3579aec1cac9887d2fff9c6f12d47a27e4aab8cf262a9d14a715bca0b2057cbc3f18b6fd3d1df76f7410f16\n\n# tcId = 385\n# x-coordinate of the public key is small\nmsg = 4d657373616765\nresult = valid\nsig = 3065023100913eecc559b3cf7108a65d6cc3076bfdf36c6f94dcc6693d06690470f34a2e81564241e1de5f5f51421de30af467f10f0230649bd3717244e8ef3c6b0eda983f84dca5ea86d1bec15386b9c473ec43a8cd0ba558eee819f791d9ff9272b9afd59551\n\n# tcId = 386\n# x-coordinate of the public key is small\nmsg = 4d657373616765\nresult = valid\nsig = 3064023023855c46403a97b76cbb316ec3fe7e2c422b818387604bda8c3d91121b4f20179d9107c5f92dedc8b620d7db87fccccd023050f57343ab148e50662320c4161e44543c35bc992011ea5b1680b94382cf224ea0ec5da511e102f566cb67201f30a2ee\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.uncompressed = 04fb01baad5f0b8f79b9cd104d12aab9310146add7d6b4c022d87ae6711178b94d618ca7b3af13854b1c588879e877b33600000000208b3f5ad3b3937acc9d606cc5ececab4a701f75ed42957ea4d7858d33f5c26c6ae20a9cccda56996700d6b4]\n[key.wx = 0fb01baad5f0b8f79b9cd104d12aab9310146add7d6b4c022d87ae6711178b94d618ca7b3af13854b1c588879e877b336]\n[key.wy = 208b3f5ad3b3937acc9d606cc5ececab4a701f75ed42957ea4d7858d33f5c26c6ae20a9cccda56996700d6b4]\n[keyDer = 3076301006072a8648ce3d020106052b8104002203620004fb01baad5f0b8f79b9cd104d12aab9310146add7d6b4c022d87ae6711178b94d618ca7b3af13854b1c588879e877b33600000000208b3f5ad3b3937acc9d606cc5ececab4a701f75ed42957ea4d7858d33f5c26c6ae20a9cccda56996700d6b4]\n[sha = SHA-384]\n\n# tcId = 387\n# y-coordinate of the public key is small\nmsg = 4d657373616765\nresult = valid\nsig = 3066023100d200958d491fcebde667cd736c9dba0961c70db2ecaf573c31dd7fa41ecca32b40b5896f9a0ddf272110e3d",
     "21e84593a023100c2ecf73943b9adce596bac14fce62495ae93825c5ff6f61c247d1d8afcba52082fc96f63a26e55bccfc3779f88cfd799\n\n# tcId = 388\n# y-coordinate of the public key is small\nmsg = 4d657373616765\nresult = valid\nsig = 306402306ac17d71260c79f81a7566124738cb3ee5d0aa690e73a98ae9e766f1336691e500cad51ba1302366c09cc06b8f7049e0023032ca965d6d7012ec187c7cab9544334d66c2a7658ddefa67e4ad40429815518ecc87b1492ddd57333bd2300b4660a835\n\n# tcId = 389\n# y-coordinate of the public key is small\nmsg = 4d657373616765\nresult = valid\nsig = 3065023100e19a4646f0ed8a271fe86ba533f8be4fd81bbf4674716f668efa89a40cac51eec2a6cfbd92327d25efe91ca4ff712bc502304a86b2e8e12378e633dec2691e3b1eed4e932cc48b28e45fa3d464cc0e948c02cc9decf2bb43b25937fcf37e9ad86ef0\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.uncompressed = 04fb01baad5f0b8f79b9cd104d12aab9310146add7d6b4c022d87ae6711178b94d618ca7b3af13854b1c588879e877b336ffffffffdf74c0a52c4c6c8533629f933a131354b58fe08a12bd6a815b287a71cc0a3d92951df5633325a96798ff294b]\n[key.wx = 0fb01baad5f0b8f79b9cd104d12aab9310146add7d6b4c022d87ae6711178b94d618ca7b3af13854b1c588879e877b336]\n[key.wy = 0ffffffffdf74c0a52c4c6c8533629f933a131354b58fe08a12bd6a815b287a71cc0a3d92951df5633325a96798ff294b]\n[keyDer = 3076301006072a8648ce3d020106052b8104002203620004fb01baad5f0b8f79b9cd104d12aab9310146add7d6b4c022d87ae6711178b94d618ca7b3af13854b1c588879e877b336ffffffffdf74c0a52c4c6c8533629f933a131354b58fe08a12bd6a815b287a71cc0a3d92951df5633325a96798ff294b]\n[sha = SHA-384]\n\n# tcId = 390\n# y-coordinate of the public key is large\nmsg = 4d657373616765\nresult = valid\nsig = 3064023015aac6c0f435cb662d110db5cf686caee53c64fe2d6d600a83ebe505a0e6fc62dc5705160477c47528c8c903fa865b5d02307f94ddc01a603f9bec5d10c9f2c89fb23b3ffab6b2b68d0f04336d499085e32d22bf3ab67a49a74c743f72473172b59f\n\n# tcId = 391\n# y-coordinate of the public key is large\nmsg = 4d657373616765\nresult = valid\nsig = 306602310090b95a7d194b73498fba5afc95c1aea9be073162a9edc57c4d12f459f0a1730baf2f87d7d6624aea7b931ec53370fe47023100cbc1ef470e666010604c609384b872db7fa7b8a5a9f20fdefd656be2fcc75db53948102f7ab203ea1860a6a32af246a1\n\n# tcId = 392\n# y-coordinate of the public key is large\nmsg = 4d657373616765\nresult = valid\nsig = 3066023100dd4391ce7557cbd005e3d5d727cd264399dcc3c6501e4547505b6d57b40bbf0a7fac794dcc8d4233159dd0aa40d4e0b9023100a77fa1374fd60aa91600912200fc83c6aa447f8171ecea72ae322df32dccd68951dc5caf6c50380e400e45bf5c0e626b\n\n",
 };
-static const size_t kLen72 = 186011;
+static const size_t kLen71 = 186011;
 
-static const char *kData72[] = {
+static const char *kData71[] = {
     "# Imported from Wycheproof's ecdsa_secp384r1_sha512_test.json.\n# This file is generated by convert_wycheproof.go. Do not edit by hand.\n#\n# Algorithm: ECDSA\n# Generator version: 0.4.12\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.uncompressed = 042da57dda1089276a543f9ffdac0bff0d976cad71eb7280e7d9bfd9fee4bdb2f20f47ff888274389772d98cc5752138aa4b6d054d69dcf3e25ec49df870715e34883b1836197d76f8ad962e78f6571bbc7407b0d6091f9e4d88f014274406174f]\n[key.wx = 2da57dda1089276a543f9ffdac0bff0d976cad71eb7280e7d9bfd9fee4bdb2f20f47ff888274389772d98cc5752138aa]\n[key.wy = 4b6d054d69dcf3e25ec49df870715e34883b1836197d76f8ad962e78f6571bbc7407b0d6091f9e4d88f014274406174f]\n[keyDer = 3076301006072a8648ce3d020106052b81040022036200042da57dda1089276a543f9ffdac0bff0d976cad71eb7280e7d9bfd9fee4bdb2f20f47ff888274389772d98cc5752138aa4b6d054d69dcf3e25ec49df870715e34883b1836197d76f8ad962e78f6571bbc7407b0d6091f9e4d88f014274406174f]\n[sha = SHA-512]\n\n# tcId = 1\n# signature malleability\nmsg = 313233343030\nresult = valid\nsig = 3065023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202307b0a10ee2dd0dd2fab75095af240d095e446faba7a50a19fbb197e4c4250926e30c5303a2c2d34250f17fcf5ab3181a6\n\n# tcId = 2\n# Legacy:ASN encoding of r misses leading 0\nmsg = 313233343030\nresult = acceptable\nsig = 30650230814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n# Some implementations of ECDSA and DSA incorrectly encode r and s by not\n# including leading zeros in the ASN encoding of integers when necessary. Hence,\n# some implementations (e.g. jdk) allow signatures with incorrect ASN encodings\n# assuming that the signature is otherwise valid.\n\n# tcId = 3\n# Legacy:ASN encoding of s misses leading 0\nmsg = 313233343030\nresult = acceptable\nsig = 3065023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e2023084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n# Some implementations of ECDSA and DSA incorrectly encode r and s by not\n# including leading zeros in the ASN encoding of integers when necessary. Hence,\n# some implementations (e.g. jdk) allow signatures with incorrect ASN encodings\n# assuming that the signature is otherwise valid.\n\n# tcId = 4\n# valid\nmsg = 313233343030\nresult = valid\nsig = 3066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 5\n# long form encoding of length\nmsg = 313233343030\nresult = invalid\nsig = 308166023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n# This is a signature with correct values for (r, s) but using some alternative\n# BER encoding instead of DER encoding. Implementations should not accept such\n# signatures to limit signature malleability.\n\n# tcId = 6\n# long form encoding of length\nmsg = 313233343030\nresult = invalid\nsig = 306702813100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n# This is a signature with correct values for (r, s) but using some alternative\n# BER encoding instead of DER encoding. Implementations should not accept such\n# signatures to limit signature malleability.\n\n# tcId = 7\n# long form encoding of length\nmsg = 313233343030\nresult = invalid\nsig = 3067023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e20281310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n# This is a signature with correct values for (r, s) but using some alternative\n# BER encoding instead of DER encoding. Implementations should not accept such\n# signatures to limit signature malleability.\n\n# tcId = 8\n# length contains leading 0\nmsg = 313233343030\nresult = invalid\nsig = 30820066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n# This is a signature with correct values for (r, s) but using some alternative\n# BER encoding instead of DER encoding. Implementations should not accept such\n# signatures to limit signature malleability.\n\n# tcId = 9\n# length contains leading 0\nmsg = 313233343030\nresult = invalid\nsig = 30680282003100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n# This is a signature with correct values for (r, s) but using some alternative\n# BER encoding instead of DER encoding. Implementations should not accept such\n# signatures to limit signature malleability.\n\n# tcId = 10\n# length contains leading 0\nmsg = 313233343030\nresult = invalid\nsig = 3068023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e2028200310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n# This is a signature with correct values for (r, s) but using some alternative\n# BER encoding instead of DER encoding. Implementations should not accept such\n# signatures to limit signature malleability.\n\n# tcId = 11\n# wrong length\nmsg = 313233343030\nresult = invalid\nsig = 3067023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 12\n# wrong length\nmsg = 313233343030\nresult = invalid\nsig = 3065023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 13\n# wrong length\nmsg = 313233343030\nresult = invalid\nsig = 3066023200814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 14\n# wrong length\nmsg = 313233343030\nresult = invalid\nsig = 3066023000814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 15\n# wrong length\nmsg = 313233343030\nresult = invalid\nsig = 3066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202320084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 16\n# wrong length\nmsg = 313233343030\nresult = invalid\nsig = 3066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202300084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 17\n# uint32 overflow in length\nmsg = 313233343030\nresult = invalid\nsig = 30850100000066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 18\n# uint32 overflow in length\nmsg = 313233343030\nresult = invalid\nsig = 306b0285010000003100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 19\n# uint32 overflow in length\nmsg = 313233343030\nresult = invalid\nsig = 306b023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e2028501000000310084f5ef11d22f",
     "22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 20\n# uint64 overflow in length\nmsg = 313233343030\nresult = invalid\nsig = 3089010000000000000066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 21\n# uint64 overflow in length\nmsg = 313233343030\nresult = invalid\nsig = 306f028901000000000000003100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 22\n# uint64 overflow in length\nmsg = 313233343030\nresult = invalid\nsig = 306f023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202890100000000000000310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 23\n# length = 2**31 - 1\nmsg = 313233343030\nresult = invalid\nsig = 30847fffffff023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 24\n# length = 2**31 - 1\nmsg = 313233343030\nresult = invalid\nsig = 306a02847fffffff00814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 25\n# length = 2**31 - 1\nmsg = 313233343030\nresult = invalid\nsig = 306a023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202847fffffff0084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 26\n# length = 2**32 - 1\nmsg = 313233343030\nresult = invalid\nsig = 3084ffffffff023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 27\n# length = 2**32 - 1\nmsg = 313233343030\nresult = invalid\nsig = 306a0284ffffffff00814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 28\n# length = 2**32 - 1\nmsg = 313233343030\nresult = invalid\nsig = 306a023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e20284ffffffff0084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 29\n# length = 2**40 - 1\nmsg = 313233343030\nresult = invalid\nsig = 3085ffffffffff023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 30\n# length = 2**40 - 1\nmsg = 313233343030\nresult = invalid\nsig = 306b0285ffffffffff00814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 31\n# length = 2**40 - 1\nmsg = 313233343030\nresult = invalid\nsig = 306b023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e20285ffffffffff0084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 32\n# length = 2**64 - 1\nmsg = 313233343030\nresult = invalid\nsig = 3088ffffffffffffffff023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 33\n# length = 2**64 - 1\nmsg = 313233343030\nresult = invalid\nsig = 306e0288ffffffffffffffff00814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 34\n# length = 2**64 - 1\nmsg = 313233343030\nresult = invalid\nsig = 306e023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e20288ffffffffffffffff0084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 35\n# incorrect length\nmsg = 313233343030\nresult = invalid\nsig = 30ff023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 36\n# incorrect length\nmsg = 313233343030\nresult = invalid\nsig = 306602ff00814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 37\n# incorrect length\nmsg = 313233343030\nresult = invalid\nsig = 3066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202ff0084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 38\n# indefinite length without termination\nmsg = 313233343030\nresult = invalid\nsig = 3080023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 39\n# indefinite length without termination\nmsg = 313233343030\nresult = invalid\nsig = 3066028000814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 40\n# indefinite length without termination\nmsg = 313233343030\nresult = invalid\nsig = 3066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202800084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 41\n# removing sequence\nmsg = 313233343030\nresult = invalid\nsig = \n\n# tcId = 42\n# lonely sequence tag\nmsg = 313233343030\nresult = invalid\nsig = 30\n\n# tcId = 43\n# appending 0's to sequence\nmsg = 313233343030\nresult = invalid\nsig = 3068023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd0000\n\n# tcId = 44\n# prepending 0's to sequence\nmsg = 313233343030\nresult = invalid\nsig = 30680000023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 45\n# appending unused 0's to sequence\nmsg = 313233343030\nresult = invalid\nsig = 3066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd0000\n\n# tcId = 46\n# appending null value to sequence\nmsg = 313233343030\nresult = invalid\nsig = 3068023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd0500\n\n# tcId = 47\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 306b4981773066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 48\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 306a25003066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50d",
     "bf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 49\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 30683066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd0004deadbeef\n\n# tcId = 50\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 306b2236498177023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 51\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 306a22352500023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 52\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 306e2233023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e20004deadbeef02310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 53\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 306b023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e2223649817702310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 54\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 306a023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e22235250002310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 55\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 306e023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e2223302310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd0004deadbeef\n\n# tcId = 56\n# including undefined tags\nmsg = 313233343030\nresult = invalid\nsig = 306eaa00bb00cd003066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 57\n# including undefined tags\nmsg = 313233343030\nresult = invalid\nsig = 306caa02aabb3066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 58\n# including undefined tags\nmsg = 313233343030\nresult = invalid\nsig = 306e2239aa00bb00cd00023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 59\n# including undefined tags\nmsg = 313233343030\nresult = invalid\nsig = 306c2237aa02aabb023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 60\n# including undefined tags\nmsg = 313233343030\nresult = invalid\nsig = 306e023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e22239aa00bb00cd0002310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 61\n# including undefined tags\nmsg = 313233343030\nresult = invalid\nsig = 306c023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e22237aa02aabb02310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 62\n# truncated length of sequence\nmsg = 313233343030\nresult = invalid\nsig = 3081\n\n# tcId = 63\n# using composition with indefinite length\nmsg = 313233343030\nresult = invalid\nsig = 30803066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd0000\n\n# tcId = 64\n# using composition with indefinite length\nmsg = 313233343030\nresult = invalid\nsig = 306a2280023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e2000002310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 65\n# using composition with indefinite length\nmsg = 313233343030\nresult = invalid\nsig = 306a023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e2228002310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd0000\n\n# tcId = 66\n# using composition with wrong tag\nmsg = 313233343030\nresult = invalid\nsig = 30803166023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd0000\n\n# tcId = 67\n# using composition with wrong tag\nmsg = 313233343030\nresult = invalid\nsig = 306a2280033100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e2000002310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 68\n# using composition with wrong tag\nmsg = 313233343030\nresult = invalid\nsig = 306a023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e2228003310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd0000\n\n# tcId = 69\n# Replacing sequence with NULL\nmsg = 313233343030\nresult = invalid\nsig = 0500\n\n# tcId = 70\n# changing tag value of sequence\nmsg = 313233343030\nresult = invalid\nsig = 2e66023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 71\n# changing tag value of sequence\nmsg = 313233343030\nresult = invalid\nsig = 2f66023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 72\n# changing tag value of sequence\nmsg = 313233343030\nresult = invalid\nsig = 3166023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 73\n# changing tag value of sequence\nmsg = 313233343030\nresult = invalid\nsig = 3266023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 74\n# changing tag value of sequence\nmsg = 313233343030\nresult = invalid\nsig = ff66023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 75\n# dropping value of sequence\nmsg = 313233343030\nresult = invalid\nsig = 3000\n\n# tcId = 76\n# using composition for sequence\nmsg = 313233343030\nresult = invalid\nsig = 306a30010230653100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd\n\n# tcId = 77\n# truncate sequence\nmsg = 313233343030\nresult = invalid\nsig = 3065023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7\n\n# tcId = ",
@@ -3206,9 +3187,9 @@
     "t = invalid\nsig = 3064023043f800fbeaf9238c58af795bcdad04bc49cd850c394d3382953356b023210281757b30e19218a37cbd612086fbc158ca02302492492492492492492492492492492492492492492492491c7be680477598d6c3716fabc13dcec86afd2833d41c2a7e\n\n# tcId = 406\n# testing point duplication\nmsg = 313233343030\nresult = invalid\nsig = 3065023100bc07ff041506dc73a75086a43252fb43b6327af3c6b2cc7d322ff6d1d1162b5de29edcd0b69803fe2f8af8e3d103d0a902302492492492492492492492492492492492492492492492491c7be680477598d6c3716fabc13dcec86afd2833d41c2a7e\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.uncompressed = 04aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab7c9e821b569d9d390a26167406d6d23d6070be242d765eb831625ceec4a0f473ef59f4e30e2817e6285bce2846f15f1a0]\n[key.wx = 0aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab7]\n[key.wy = 0c9e821b569d9d390a26167406d6d23d6070be242d765eb831625ceec4a0f473ef59f4e30e2817e6285bce2846f15f1a0]\n[keyDer = 3076301006072a8648ce3d020106052b8104002203620004aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab7c9e821b569d9d390a26167406d6d23d6070be242d765eb831625ceec4a0f473ef59f4e30e2817e6285bce2846f15f1a0]\n[sha = SHA-512]\n\n# tcId = 407\n# testing point duplication\nmsg = 313233343030\nresult = invalid\nsig = 3064023043f800fbeaf9238c58af795bcdad04bc49cd850c394d3382953356b023210281757b30e19218a37cbd612086fbc158ca02302492492492492492492492492492492492492492492492491c7be680477598d6c3716fabc13dcec86afd2833d41c2a7e\n\n# tcId = 408\n# testing point duplication\nmsg = 313233343030\nresult = invalid\nsig = 3065023100bc07ff041506dc73a75086a43252fb43b6327af3c6b2cc7d322ff6d1d1162b5de29edcd0b69803fe2f8af8e3d103d0a902302492492492492492492492492492492492492492492492491c7be680477598d6c3716fabc13dcec86afd2833d41c2a7e\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.uncompressed = 0429bdb76d5fa741bfd70233cb3a66cc7d44beb3b0663d92a8136650478bcefb61ef182e155a54345a5e8e5e88f064e5bc9a525ab7f764dad3dae1468c2b419f3b62b9ba917d5e8c4fb1ec47404a3fc76474b2713081be9db4c00e043ada9fc4a3]\n[key.wx = 29bdb76d5fa741bfd70233cb3a66cc7d44beb3b0663d92a8136650478bcefb61ef182e155a54345a5e8e5e88f064e5bc]\n[key.wy = 09a525ab7f764dad3dae1468c2b419f3b62b9ba917d5e8c4fb1ec47404a3fc76474b2713081be9db4c00e043ada9fc4a3]\n[keyDer = 3076301006072a8648ce3d020106052b810400220362000429bdb76d5fa741bfd70233cb3a66cc7d44beb3b0663d92a8136650478bcefb61ef182e155a54345a5e8e5e88f064e5bc9a525ab7f764dad3dae1468c2b419f3b62b9ba917d5e8c4fb1ec47404a3fc76474b2713081be9db4c00e043ada9fc4a3]\n[sha = SHA-512]\n\n# tcId = 409\n# pseudorandom signature\nmsg = \nresult = valid\nsig = 306402302290c886bbad8f53089583d543a269a727665626d6b94a3796324c62d08988f66f6011e845811a03589e92abe1f17faf023066e2cb4380997f4e7f85022541adb22d24d1196be68a3db888b03eb3d2d40b0d9a3a6a00a1a4782ee0a00e8410ba2d86\n\n# tcId = 410\n# pseudorandom signature\nmsg = 4d7367\nresult = valid\nsig = 30650231008071d8cf9df9efef696ebafc59f74db90c1f1ecf5ccde18858de22fe4d7df2a25cb3001695d706dfd7984b39df65a0f4023027291e6339c2a7fed7a174bb97ffe41d8cfdc20c1260c6ec85d7259f0cc7781bf2ae7a6e6fb4c08e0d75b7381bb7d9b8\n\n# tcId = 411\n# pseudorandom signature\nmsg = 313233343030\nresult = valid\nsig = 30650230470014ccd7a1a5e5333d301c8ea528ac3b07b01944af30cec60f4bad94db108509e45ba381818b5bdfaf9daf0d372301023100e3d49d6a05a755aa871d7cb96fffb79fed7625f83f69498ba07c0d65166a67107c9a17ae6e1028e244377a44096217b2\n\n# tcId = 412\n# pseudorandom signature\nmsg = 0000000000000000000000000000000000000000\nresult = valid\nsig = 30640230377044d343f900175ac6833071be74964cd636417039e10e837da94b6919bffc3f5a517b945a450852af3259f5cbf108023032ea25006375c153581e80c09f53ad585c736f823c70147aba4fb47bb0a224fae4d8819adad80d4c144ecc2380954a9e\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.uncompressed = 04ffffffffaa63f1a239ac70197c6ebfcea5756dc012123f82c51fa874d66028be00e976a1080606737cc75c40bdfe4aacacbd85389088a62a6398384c22b52d492f23f46e4a27a4724ad55551da5c483438095a247cb0c3378f1f52c3425ff9f1]\n[key.wx = 0ffffffffaa63f1a239ac70197c6ebfcea5756dc012123f82c51fa874d66028be00e976a1080606737cc75c40bdfe4aac]\n[key.wy = 0acbd85389088a62a6398384c22b52d492f23f46e4a27a4724ad55551da5c483438095a247cb0c3378f1f52c3425ff9f1]\n[keyDer = 3076301006072a8648ce3d020106052b8104002203620004ffffffffaa63f1a239ac70197c6ebfcea5756dc012123f82c51fa874d66028be00e976a1080606737cc75c40bdfe4aacacbd85389088a62a6398384c22b52d492f23f46e4a27a4724ad55551da5c483438095a247cb0c3378f1f52c3425ff9f1]\n[sha = SHA-512]\n\n# tcId = 413\n# x-coordinate of the public key is large\nmsg = 4d657373616765\nresult = valid\nsig = 3066023100ccb13c4dc9805a9b4e06ee25ef8c7593eaff7326c432d4b12b923163cf1cbe5fe1cfd3546c1d0761d8874e83ffd2e15d023100db1b0c082ae314b539f05e8a14ad51e5db37f29cacea9b2aab63a04917d58d008cf3f7ba41d5ea280f3b6a67be3ae8f8\n\n# tcId = 414\n# x-coordinate of the public key is large\nmsg = 4d657373616765\nresult = valid\nsig = 3065023100c79a30e36d2126b348dd9eb2f5db6aa98f79d80214027e51bcf3cabec188a7ebaf25cb7bbe9ec6bfed135e2a3b70e9160230241338ee2ac931adea9a56e7bfe909947128d54d5122a47b00c278e684e10102740d26e89e343290a5b2fa8b401faec6\n\n# tcId = 415\n# x-coordinate of the public key is large\nmsg = 4d657373616765\nresult = valid\nsig = 306402300df82e4ec2960e3df614f8b49cec9a4ee1054365414241361feec9d9d9b6909d8775f222ec385a14afab46266db390c302300968485e854addba0f8354e677e955e1ef2df973d564c49f65f2562cb2a2b80d75e92f8784042955f7b8765f609ce221\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.uncompressed = 04d1827fc6f6f12f21992c5a409a0653b121d2ef02b2b0ab01a9161ce956280740b1e356b255701b0a6ddc9ec2ca8a9422c6ed5d2ced8d8ab7560fa5bb88c738e74541883d8a2b1c0e2ba7e36d030fc4d9bfb8b22f24db897ebac49dd400000000]\n[key.wx = 0d1827fc6f6f12f21992c5a409a0653b121d2ef02b2b0ab01a9161ce956280740b1e356b255701b0a6ddc9ec2ca8a9422]\n[key.wy = 0c6ed5d2ced8d8ab7560fa5bb88c738e74541883d8a2b1c0e2ba7e36d030fc4d9bfb8b22f24db897ebac49dd400000000]\n[keyDer = 3076301006072a8648ce3d020106052b8104002203620004d1827fc6f6f12f21992c5a409a0653b121d2ef02b2b0ab01a9161ce956280740b1e356b255701b0a6ddc9ec2ca8a9422c6ed5d2ced8d8ab7560fa5bb88c738e74541883d8a2b1c0e2ba7e36d030fc4d9bfb8b22f24db897ebac49dd400000000]\n[sha = SHA-512]\n\n# tcId = 416\n# y-coordinate of the public key has many trailing 0's\nmsg = 4d657373616765\nresult = valid\nsig = 306402301fafd83d728422e1485f1e52e5b631548647cc3c76c109c3177a73751d91a19012fa4628b218f2229fc4d55f105fe00102304474f9af7b4b0bb96fdb05ae918f799024e8d5b864e49ccd047cf97e7b9f8763cce015c11cf1f461c9027cb901055101\n\n# tcId = 417\n# y-coordinate of the public key has many trailing 0's\nmsg = 4d657373616765\nresult = valid\nsig = 3066023100e6025bb957ab197fb4c080d0a5c647e428afb0d7cc235c605ae97545494fd31a9979790bb2da6e1cf186789422b15c970231008ae9872291430d1bb371ef72360dad5afbb6fb001f403d9aaa1445f0326eb1eef775c9dfe1d7ef8bf4e744822108d27e\n\n# tcId = 418\n# y-coordinate of the public key has many trailing 0's\nmsg = 4d657373616765\nresult = valid\nsig = 3066023100877d5567c18fa568259005a89c2300d1b3825b732fa14964c1477d4b3098afd09384b97d497464adba41e9df8a74d339023100c40f0760717b4b3bae75742b6dc3dcf04cc22a449cfea19d305e0658cb705fda75163e7399e0b3125ca7d1919c13851e\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.uncompressed = 041099bb45100f55f5a85cca3de2b3bd5e250f4f6fad6631a3156c2e52a33d7d615dd279f79f8b4baff7c713ac00000000e6c9b736a8929f2ed7be0c753a54cbb48b8469e0411eaf93a4a82459ba0b681bba8f5fb383b4906d4901a3303e2f1557]\n[key.wx = 1099bb45100f55f5a85cca3de2b3bd5e250f4f6fad6631a3156c2e52a33d7d615dd279f79f8b4baff7c713ac00000000]\n[key.wy = 0e6c9b736a8929f2ed7be0c753a54cbb48b8469e0411eaf93a4a82459ba0b681bba8f5fb383b4906d4901a3303e2f1557]\n[keyDer = 3076301006072a8648ce3d020106052b81040022036200041099bb45100f55f5a85cca3de2b3bd5e250f4f6fad6631a3156c2e52a33d7d615dd279f79f8b4baff7c713ac00000000e6c9b736a8929f2ed7be0c753a54cbb48b8469e0411eaf93a4a82459ba0b681bba8f5fb383b4906d4901a3303e2f1557]\n[sha = SHA-512]\n\n# tcId = 419\n# x-coordinate of the public key has many trailing 0's\nmsg = 4d657373616765\nresult = valid\nsig = 3065023100e706b0045a6f54bd175e2437b48767b0204f93d8a4d9d3d00838278137e5b670de4305c5c55e49059b8b5f6e264654c902",
     "30405741adff94afd9a88e08d0b1021911fa4cedb2466b1a8fd302a5b5d96566ada63ccb82b6c5e8452fde860c545e0a19\n\n# tcId = 420\n# x-coordinate of the public key has many trailing 0's\nmsg = 4d657373616765\nresult = valid\nsig = 306502300c57ce2bc579fbd3a759dfbf5e84c3cef2414846a2e300453e1e4c5188f24432b14ca647a733b6ad35c980a880d36145023100f12a119e22d48b82049df611f1c851fb22795056498a873c730fcb9fd8f314728de0298b9b22c348abc6de2aba97e972\n\n# tcId = 421\n# x-coordinate of the public key has many trailing 0's\nmsg = 4d657373616765\nresult = valid\nsig = 30660231009a8f80697ccf2e0617612027d861a3a3a657fb75cc82810b40dd5072d39ff37eca29008390da356137e2c9babd814198023100a86537a83c3d57da50e4b29b47dcc3717c5a1ed0fff18ade8dcce4220eac63aab60b9bfed5f1bdd241dab655a9bdd75f\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.uncompressed = 04000000002b089edd754169010145f263f334fc167cc19dae8225970ae19cc8cb7ec73593d6a465c370f5478b0e539d69d1951d597b56a67345acb25809581f07cd0eb78d9538a3f8a65f300e68a1eb78507df76de650e8f8ee63a5f0c5687c98]\n[key.wx = 2b089edd754169010145f263f334fc167cc19dae8225970ae19cc8cb7ec73593d6a465c370f5478b0e539d69]\n[key.wy = 0d1951d597b56a67345acb25809581f07cd0eb78d9538a3f8a65f300e68a1eb78507df76de650e8f8ee63a5f0c5687c98]\n[keyDer = 3076301006072a8648ce3d020106052b8104002203620004000000002b089edd754169010145f263f334fc167cc19dae8225970ae19cc8cb7ec73593d6a465c370f5478b0e539d69d1951d597b56a67345acb25809581f07cd0eb78d9538a3f8a65f300e68a1eb78507df76de650e8f8ee63a5f0c5687c98]\n[sha = SHA-512]\n\n# tcId = 422\n# x-coordinate of the public key is small\nmsg = 4d657373616765\nresult = valid\nsig = 306602310093718f6f8542725f62de7039fc193d3fcc81d622230ccc94e9e265390b385af3a3ba50c91a9d6a5b1e07d79af2bd80b2023100d08499f3d298e8afecea122265a36dbf337259020654739783c8ec8ef783d072555b5907285ce83fc8ced9c8398c6269\n\n# tcId = 423\n# x-coordinate of the public key is small\nmsg = 4d657373616765\nresult = valid\nsig = 3066023100ce26e42c490dec92cf59d6b1ba75c9a1400d6e5c3fd7c47e1eeb1cded30a3a3d18c81cdfdcbad2742a97293369ce21c202310094671085d941fd27d495452a4c8559a1fe24f3225f5b8ef75faf9d3fb01372c586e23b82714359d0e47144ff5d946161\n\n# tcId = 424\n# x-coordinate of the public key is small\nmsg = 4d657373616765\nresult = valid\nsig = 3066023100ffc4738acf71f04a13104c328c138b331fb7202aef66f583ba543ed490d12993c18f724c81ad0f7ea18dae352e5c6480023100e67d4ccdeb68a9a731f06f77eae00175be076d92529b109a62542692c8749ddfde03bed1c119a5901a4e852f2115578f\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.uncompressed = 04fb01baad5f0b8f79b9cd104d12aab9310146add7d6b4c022d87ae6711178b94d618ca7b3af13854b1c588879e877b33600000000208b3f5ad3b3937acc9d606cc5ececab4a701f75ed42957ea4d7858d33f5c26c6ae20a9cccda56996700d6b4]\n[key.wx = 0fb01baad5f0b8f79b9cd104d12aab9310146add7d6b4c022d87ae6711178b94d618ca7b3af13854b1c588879e877b336]\n[key.wy = 208b3f5ad3b3937acc9d606cc5ececab4a701f75ed42957ea4d7858d33f5c26c6ae20a9cccda56996700d6b4]\n[keyDer = 3076301006072a8648ce3d020106052b8104002203620004fb01baad5f0b8f79b9cd104d12aab9310146add7d6b4c022d87ae6711178b94d618ca7b3af13854b1c588879e877b33600000000208b3f5ad3b3937acc9d606cc5ececab4a701f75ed42957ea4d7858d33f5c26c6ae20a9cccda56996700d6b4]\n[sha = SHA-512]\n\n# tcId = 425\n# y-coordinate of the public key is small\nmsg = 4d657373616765\nresult = valid\nsig = 3065023100e6fa8455bc14e730e4ca1eb5faf6c8180f2f231069b93a0bb17d33ad5513d93a36214f5ce82ca6bd785ccbacf7249a4c02303979b4b480f496357c25aa3fc850c67ff1c5a2aabd80b6020d2eac3dd7833cf2387d0be64df54a0e9b59f12c3bebf886\n\n# tcId = 426\n# y-coordinate of the public key is small\nmsg = 4d657373616765\nresult = valid\nsig = 306502301b49b037783838867fbaa57305b2aa28df1b0ec40f43140067fafdea63f87c02dfb0e6f41b760fbdf51005e90c0c3715023100e7d4eb6ee61611264ea8a668a70287e3d63489273da2b30ad0c221f1893feaea3e878c9a81c6cec865899dbda4fa79ae\n\n# tcId = 427\n# y-coordinate of the public key is small\nmsg = 4d657373616765\nresult = valid\nsig = 306502310091d9da3d577408189dcaae33d95ed0a0118afd460d5228fa352b6ea671b172eb413816a70621ddaf23c5e2ef79df0c110230053dadbfcd564bddbe44e0ecb4d1e608dbd35d4e83b6634cc72afb87a2d61675ee13960c243f6be70519e167b1d3ceb0\n\n[key.curve = secp384r1]\n[key.keySize = 384]\n[key.type = ECPublicKey]\n[key.uncompressed = 04fb01baad5f0b8f79b9cd104d12aab9310146add7d6b4c022d87ae6711178b94d618ca7b3af13854b1c588879e877b336ffffffffdf74c0a52c4c6c8533629f933a131354b58fe08a12bd6a815b287a71cc0a3d92951df5633325a96798ff294b]\n[key.wx = 0fb01baad5f0b8f79b9cd104d12aab9310146add7d6b4c022d87ae6711178b94d618ca7b3af13854b1c588879e877b336]\n[key.wy = 0ffffffffdf74c0a52c4c6c8533629f933a131354b58fe08a12bd6a815b287a71cc0a3d92951df5633325a96798ff294b]\n[keyDer = 3076301006072a8648ce3d020106052b8104002203620004fb01baad5f0b8f79b9cd104d12aab9310146add7d6b4c022d87ae6711178b94d618ca7b3af13854b1c588879e877b336ffffffffdf74c0a52c4c6c8533629f933a131354b58fe08a12bd6a815b287a71cc0a3d92951df5633325a96798ff294b]\n[sha = SHA-512]\n\n# tcId = 428\n# y-coordinate of the public key is large\nmsg = 4d657373616765\nresult = valid\nsig = 3065023100af0ed6ce6419662db80f02a2b632675445c7bf8a34bbacdc81cc5dd306c657ca4c5a3fb1b05f358d8f36fda8ae238806023046b472c0badb17e089c8f9697fd0b4ce71f0f4471b235483d4c8dd3d00aa282cde990253df38ba733b2ad82a601c7508\n\n# tcId = 429\n# y-coordinate of the public key is large\nmsg = 4d657373616765\nresult = valid\nsig = 3066023100e2aa9468ccaaadad8b9f43a429c97f0c6a7eedcb4d4af72d639df0fe53f610b953408a8e24e8db138551770750680f7a023100d81020846d1c50ee9ae23601dd638cb71b38d37fb555268c2fa1ad8a761fa7b27afcab2fa69224d1f976699914e09de2\n\n# tcId = 430\n# y-coordinate of the public key is large\nmsg = 4d657373616765\nresult = valid\nsig = 306402306bf6fa7a663802c3382cc5fd02004ec71e5a031e3d9bfc0858fa994e88497a7782308bc265b8237a6bbbdd38658b36fc02303a9d5941a013bf70d99cc3ff255ce85573688dac40344b5db7144b19bf57bb2701e6850a8f819796b67f7d0b6aea7e50\n\n",
 };
-static const size_t kLen73 = 229819;
+static const size_t kLen72 = 229819;
 
-static const char *kData73[] = {
+static const char *kData72[] = {
     "# Imported from Wycheproof's ecdsa_secp521r1_sha512_test.json.\n# This file is generated by convert_wycheproof.go. Do not edit by hand.\n#\n# Algorithm: ECDSA\n# Generator version: 0.4.12\n\n[key.curve = secp521r1]\n[key.keySize = 521]\n[key.type = ECPublicKey]\n[key.uncompressed = 04005c6457ec088d532f482093965ae53ccd07e556ed59e2af945cd8c7a95c1c644f8a56a8a8a3cd77392ddd861e8a924dac99c69069093bd52a52fa6c56004a074508007878d6d42e4b4dd1e9c0696cb3e19f63033c3db4e60d473259b3ebe079aaf0a986ee6177f8217a78c68b813f7e149a4e56fd9562c07fed3d895942d7d101cb83f6]\n[key.wx = 5c6457ec088d532f482093965ae53ccd07e556ed59e2af945cd8c7a95c1c644f8a56a8a8a3cd77392ddd861e8a924dac99c69069093bd52a52fa6c56004a074508]\n[key.wy = 7878d6d42e4b4dd1e9c0696cb3e19f63033c3db4e60d473259b3ebe079aaf0a986ee6177f8217a78c68b813f7e149a4e56fd9562c07fed3d895942d7d101cb83f6]\n[keyDer = 30819b301006072a8648ce3d020106052b810400230381860004005c6457ec088d532f482093965ae53ccd07e556ed59e2af945cd8c7a95c1c644f8a56a8a8a3cd77392ddd861e8a924dac99c69069093bd52a52fa6c56004a074508007878d6d42e4b4dd1e9c0696cb3e19f63033c3db4e60d473259b3ebe079aaf0a986ee6177f8217a78c68b813f7e149a4e56fd9562c07fed3d895942d7d101cb83f6]\n[sha = SHA-512]\n\n# tcId = 1\n# signature malleability\nmsg = 313233343030\nresult = valid\nsig = 30818702414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024201d74a2f6d95be8d4cb64f02d16d6b785a1246b4ebd206dc596818bb953253245f5a27a24a1aae1e218fdccd8cd7d4990b666d4bf4902b84fdad123f941fe906d948\n\n# tcId = 2\n# valid\nmsg = 313233343030\nresult = valid\nsig = 30818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 3\n# length contains leading 0\nmsg = 313233343030\nresult = invalid\nsig = 3082008602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n# This is a signature with correct values for (r, s) but using some alternative\n# BER encoding instead of DER encoding. Implementations should not accept such\n# signatures to limit signature malleability.\n\n# tcId = 4\n# length contains leading 0\nmsg = 313233343030\nresult = invalid\nsig = 308188028200414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n# This is a signature with correct values for (r, s) but using some alternative\n# BER encoding instead of DER encoding. Implementations should not accept such\n# signatures to limit signature malleability.\n\n# tcId = 5\n# length contains leading 0\nmsg = 313233343030\nresult = invalid\nsig = 30818802414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86450282004128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n# This is a signature with correct values for (r, s) but using some alternative\n# BER encoding instead of DER encoding. Implementations should not accept such\n# signatures to limit signature malleability.\n\n# tcId = 6\n# wrong length\nmsg = 313233343030\nresult = invalid\nsig = 308702414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 7\n# wrong length\nmsg = 313233343030\nresult = invalid\nsig = 308502414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 8\n# wrong length\nmsg = 313233343030\nresult = invalid\nsig = 30818602424e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 9\n# wrong length\nmsg = 313233343030\nresult = invalid\nsig = 30818602404e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 10\n# wrong length\nmsg = 313233343030\nresult = invalid\nsig = 30818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024228b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 11\n# wrong length\nmsg = 313233343030\nresult = invalid\nsig = 30818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024028b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 12\n# uint32 overflow in length\nmsg = 313233343030\nresult = invalid\nsig = 3085010000008602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 13\n# uint32 overflow in length\nmsg = 313233343030\nresult = invalid\nsig = 30818b028501000000414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 14\n# uint32 overflow in length\nmsg = 313233343030\nresult = invalid\nsig = 30818b02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86450285010000004128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 15\n# uint64 overflow in length\nmsg = 313233343030\nresult = invalid\nsig = 308901000000000000008602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 16\n# uint64 overflow in length\nmsg = 313233343030\nresult = invalid\nsig = 30818f02890100000000000000414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 17\n# uint64 overflow in length\nmsg = 313233343030\nresult = invalid\nsig = 30818f02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645028901000000000000004128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 18\n# length = 2**31 - 1\nmsg = 313233343030\nresult = invalid\nsig = 30847fffffff02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022f",
     "ea8318ac1\n\n# tcId = 19\n# length = 2**31 - 1\nmsg = 313233343030\nresult = invalid\nsig = 30818a02847fffffff4e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 20\n# length = 2**31 - 1\nmsg = 313233343030\nresult = invalid\nsig = 30818a02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf864502847fffffff28b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 21\n# length = 2**32 - 1\nmsg = 313233343030\nresult = invalid\nsig = 3084ffffffff02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 22\n# length = 2**32 - 1\nmsg = 313233343030\nresult = invalid\nsig = 30818a0284ffffffff4e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 23\n# length = 2**32 - 1\nmsg = 313233343030\nresult = invalid\nsig = 30818a02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86450284ffffffff28b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 24\n# length = 2**40 - 1\nmsg = 313233343030\nresult = invalid\nsig = 3085ffffffffff02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 25\n# length = 2**40 - 1\nmsg = 313233343030\nresult = invalid\nsig = 30818b0285ffffffffff4e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 26\n# length = 2**40 - 1\nmsg = 313233343030\nresult = invalid\nsig = 30818b02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86450285ffffffffff28b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 27\n# length = 2**64 - 1\nmsg = 313233343030\nresult = invalid\nsig = 3088ffffffffffffffff02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 28\n# length = 2**64 - 1\nmsg = 313233343030\nresult = invalid\nsig = 30818e0288ffffffffffffffff4e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 29\n# length = 2**64 - 1\nmsg = 313233343030\nresult = invalid\nsig = 30818e02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86450288ffffffffffffffff28b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 30\n# incorrect length\nmsg = 313233343030\nresult = invalid\nsig = 30ff02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 31\n# incorrect length\nmsg = 313233343030\nresult = invalid\nsig = 30818602ff4e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 32\n# incorrect length\nmsg = 313233343030\nresult = invalid\nsig = 30818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf864502ff28b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 33\n# indefinite length without termination\nmsg = 313233343030\nresult = invalid\nsig = 308002414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 34\n# indefinite length without termination\nmsg = 313233343030\nresult = invalid\nsig = 30818602804e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 35\n# indefinite length without termination\nmsg = 313233343030\nresult = invalid\nsig = 30818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645028028b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 36\n# removing sequence\nmsg = 313233343030\nresult = invalid\nsig = \n\n# tcId = 37\n# lonely sequence tag\nmsg = 313233343030\nresult = invalid\nsig = 30\n\n# tcId = 38\n# appending 0's to sequence\nmsg = 313233343030\nresult = invalid\nsig = 30818802414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac10000\n\n# tcId = 39\n# prepending 0's to sequence\nmsg = 313233343030\nresult = invalid\nsig = 308188000002414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 40\n# appending unused 0's to sequence\nmsg = 313233343030\nresult = invalid\nsig = 30818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac10000\n\n# tcId = 41\n# appending null value to sequence\nmsg = 313233343030\nresult = invalid\nsig = 30818802414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac10500\n\n# tcId = 42\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 30818c49817730818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 43\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = ",
     "30818b250030818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 44\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 30818930818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac10004deadbeef\n\n# tcId = 45\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 30818b224649817702414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 46\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 30818a2245250002414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 47\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 30818e224302414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86450004deadbeef024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 48\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 30818b02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86452246498177024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 49\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 30818a02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf864522452500024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 50\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 30818e02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86452243024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac10004deadbeef\n\n# tcId = 51\n# including undefined tags\nmsg = 313233343030\nresult = invalid\nsig = 30818faa00bb00cd0030818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 52\n# including undefined tags\nmsg = 313233343030\nresult = invalid\nsig = 30818daa02aabb30818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 53\n# including undefined tags\nmsg = 313233343030\nresult = invalid\nsig = 30818e2249aa00bb00cd0002414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 54\n# including undefined tags\nmsg = 313233343030\nresult = invalid\nsig = 30818c2247aa02aabb02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 55\n# including undefined tags\nmsg = 313233343030\nresult = invalid\nsig = 30818e02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86452249aa00bb00cd00024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 56\n# including undefined tags\nmsg = 313233343030\nresult = invalid\nsig = 30818c02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86452247aa02aabb024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 57\n# truncated length of sequence\nmsg = 313233343030\nresult = invalid\nsig = 3081\n\n# tcId = 58\n# using composition with indefinite length\nmsg = 313233343030\nresult = invalid\nsig = 308030818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac10000\n\n# tcId = 59\n# using composition with indefinite length\nmsg = 313233343030\nresult = invalid\nsig = 30818a228002414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86450000024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 60\n# using composition with indefinite length\nmsg = 313233343030\nresult = invalid\nsig = 30818a02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86452280024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac10000\n\n# tcId = 61\n# using composition with wrong tag\nmsg = 313233343030\nresult = invalid\nsig = 308031818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac10000\n\n# tcId = 62\n# using composition with wrong tag\nmsg = 313233343030\nresult = invalid\nsig = 30818a228003414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86450000024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 63\n# using composition with wrong tag\nmsg = 313233343030\nresult = invalid\nsig = 30818a02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86452280034128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac10000\n\n# tcId = 64\n# Replacing sequence with NULL\nmsg = 313233343030\nresult = invalid\nsig = 0500\n\n# tcId = 65\n# changing tag value of sequence\nmsg = 313233343030\nresult = invalid\nsig = 2e818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1\n\n# tcId = 66\n# changing tag value of sequence\nmsg = 313233343030\nresult = invalid\nsig = 2f818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69",
@@ -3239,61 +3220,51 @@
     "4201de948ee577c3d4e4122a52ecccac59abb6fa937dfb3e4b988cb243efe98740309452ba013112b225b3b1b1384d5f68796845199a2602a8d4505a331b07d101188e\n\n[key.curve = secp521r1]\n[key.keySize = 521]\n[key.type = ECPublicKey]\n[key.uncompressed = 0400304b3d071ed1ef302391b566af8c9d1cb7afe9aabc141ac39ab39676c63e48c1b2c6451eb460e452bd573e1fb5f15b8e5f9c03f634d8db6897285064b3ce9bd98a01ffffffff6467402ccc673d3079f903f51b974929e8334c18fb50c47af99bd588a2a4b2562ffdf6c9b560f5b528834539fb5fea368194a5e77bb5a765b0e38269da]\n[key.wx = 304b3d071ed1ef302391b566af8c9d1cb7afe9aabc141ac39ab39676c63e48c1b2c6451eb460e452bd573e1fb5f15b8e5f9c03f634d8db6897285064b3ce9bd98a]\n[key.wy = 1ffffffff6467402ccc673d3079f903f51b974929e8334c18fb50c47af99bd588a2a4b2562ffdf6c9b560f5b528834539fb5fea368194a5e77bb5a765b0e38269da]\n[keyDer = 30819b301006072a8648ce3d020106052b81040023038186000400304b3d071ed1ef302391b566af8c9d1cb7afe9aabc141ac39ab39676c63e48c1b2c6451eb460e452bd573e1fb5f15b8e5f9c03f634d8db6897285064b3ce9bd98a01ffffffff6467402ccc673d3079f903f51b974929e8334c18fb50c47af99bd588a2a4b2562ffdf6c9b560f5b528834539fb5fea368194a5e77bb5a765b0e38269da]\n[sha = SHA-512]\n\n# tcId = 419\n# y-coordinate of the public key is large\nmsg = 4d657373616765\nresult = valid\nsig = 308187024200b6cf64861a2b16e33976095dbf45a592c7c24228c4a1dd727f303d5eeb87e5388ad05c328f824c40abd3e6ce003fef5cd59dee0069ad6348ea6e57f90f6bdc0a820241228181c180366e5451dfef3593ce664804cb42d5a8d5046b816b3daf6602fafd9ac2dc24b8c93a10024480882558b6ad3d9e905923dcd0fd2a11964754a9b46b8f\n\n# tcId = 420\n# y-coordinate of the public key is large\nmsg = 4d657373616765\nresult = valid\nsig = 30818802420093c8f766827d6dc15c810fa30433153a5e742859205ee8389fbf695c8840dc917440870acc5b160087ffd0cd9a6081029c60a7c26d5e8aa9a0570f4efdeb13dea20242012ec3bbf75a0ad3df40310266648a36db820217ed7fa94e9c8313e03293ef4f6a40e736fb8f208ad8fb883ca509d48046910523645459c27829d54431463b2548c7\n\n# tcId = 421\n# y-coordinate of the public key is large\nmsg = 4d657373616765\nresult = valid\nsig = 30818802420152388c6da66164b706b41dd4dd48176d6eaf6525f876ef0ff2d147f6966ebfadf1767fa66d04203d3ec9c937a1f0c945aed953e34be444c219fd3b94d3277aa652024201658c1e5b2e563a49d11c883d05c491d628f0a92c3e3dc8db9a4c8d5f0dc846ac22af8b3c5fb5bbe2cfa98614dcffd87de1cee2c5912a5899505a0c5bcaa513e2c6\n\n[key.curve = secp521r1]\n[key.keySize = 521]\n[key.type = ECPublicKey]\n[key.uncompressed = 040000000002fba6a061201ea6b1ed4265163568735ebab78600cdf6a71101dc63beaf546d97a214fc6396793b014eb1aa7a728f53deb2ff9999a3808ddfed15e9629b01993852dadc39299a5a45b6bd7c8dc8ec67e7adbb359fa8fa5d44977e15e2e5a9acf0c33645f3f2c68c526e07732fb35043719cfafc16063c8e58850a958436a4e5]\n[key.wx = 2fba6a061201ea6b1ed4265163568735ebab78600cdf6a71101dc63beaf546d97a214fc6396793b014eb1aa7a728f53deb2ff9999a3808ddfed15e9629b]\n[key.wy = 1993852dadc39299a5a45b6bd7c8dc8ec67e7adbb359fa8fa5d44977e15e2e5a9acf0c33645f3f2c68c526e07732fb35043719cfafc16063c8e58850a958436a4e5]\n[keyDer = 30819b301006072a8648ce3d020106052b8104002303818600040000000002fba6a061201ea6b1ed4265163568735ebab78600cdf6a71101dc63beaf546d97a214fc6396793b014eb1aa7a728f53deb2ff9999a3808ddfed15e9629b01993852dadc39299a5a45b6bd7c8dc8ec67e7adbb359fa8fa5d44977e15e2e5a9acf0c33645f3f2c68c526e07732fb35043719cfafc16063c8e58850a958436a4e5]\n[sha = SHA-512]\n\n# tcId = 422\n# x-coordinate of the public key is small\nmsg = 4d657373616765\nresult = valid\nsig = 3081880242010e89470f981d2c7c5c96587121a67323bb96ff2427739d0d885ea277293efa3b25c0bda04d81466198a3cbfc441f1b1b98f6bcdc2589d9d91a17a7899f70d0461e0242017351b0da8c8d0e4aa0974669d190fa2f90aa50227160594dfb55755002365441de17ea42902128a6f81e554177ed509c0cec31fd5053fae03f62ff76579ba92bda\n\n# tcId = 423\n# x-coordinate of the public key is small\nmsg = 4d657373616765\nresult = valid\nsig = 3081880242011094ac23ca46a3e2b4ac3baae6504f1bfb3ddf2db9ab40eda32d8e0a05727998f8552a033bb05241e826a86a1d03014eae3aa5fe1a45caac1db3e8138b9cf5906802420147edb15a5080ee2f929f78b6ac86604aae51b674fa46eaae7fdfd90bf64d6189341155f4eba937eae74c9e480eb4fb7e6aafd4285e7fc503ee6ec20f0b1415be06\n\n# tcId = 424\n# x-coordinate of the public key is small\nmsg = 4d657373616765\nresult = valid\nsig = 308188024201d876ae174da31e128babff9f1d15507660bdc7958750844dc4f4291f75a882a22f177f704be6067bf7ce8f06b8626d971e6ef5dcb666fa975c1e11126e04fccce2024201abb12630a68b669e6ad2d8d62654d75dfbc6b54a8e3a9c915be663e080ddcc348e57a10e2b1dd9f03e1b897796ad889b075e5919dc5bf37a112d92c693456e6457\n\n[key.curve = secp521r1]\n[key.keySize = 521]\n[key.type = ECPublicKey]\n[key.uncompressed = 0401fffffffe1d5d52b31ca52f8947a35593edf164cd324f833b90935846c64db1454df9f028dc8bc36bb04cb7f0cceceba01a3844097f7c35eeaa81428db0cca6333101b7c70277d0bf78a3c7b62c937f0cb2cad2565f5514f6205ceb1a193d4fdb45ba6e6cec07827bae0b16b8316c3539a15114d0de6d2de407fd7117551a70826eada6]\n[key.wx = 1fffffffe1d5d52b31ca52f8947a35593edf164cd324f833b90935846c64db1454df9f028dc8bc36bb04cb7f0cceceba01a3844097f7c35eeaa81428db0cca63331]\n[key.wy = 1b7c70277d0bf78a3c7b62c937f0cb2cad2565f5514f6205ceb1a193d4fdb45ba6e6cec07827bae0b16b8316c3539a15114d0de6d2de407fd7117551a70826eada6]\n[keyDer = 30819b301006072a8648ce3d020106052b81040023038186000401fffffffe1d5d52b31ca52f8947a35593edf164cd324f833b90935846c64db1454df9f028dc8bc36bb04cb7f0cceceba01a3844097f7c35eeaa81428db0cca6333101b7c70277d0bf78a3c7b62c937f0cb2cad2565f5514f6205ceb1a193d4fdb45ba6e6cec07827bae0b16b8316c3539a15114d0de6d2de407fd7117551a70826eada6]\n[sha = SHA-512]\n\n# tcId = 425\n# x-coordinate of the public key is large\nmsg = 4d657373616765\nresult = valid\nsig = 30818602414ed692af1ed1b4bd5cea3aa8ddc6f3f15d8a6ee0016fa0e8eb958580e7421832ecc0e387c34aafac6380bac419ea45c42ae6426af503847f22c49c2f456338c1a702417aceadde02ace1668bc1a3360d34e125afde230f536c154d91e6c876bee1d34ae06edcbbca0c7cd17646840913164740b12e2e224fe3ef3dec6fd84a81b581c188\n\n# tcId = 426\n# x-coordinate of the public key is large\nmsg = 4d657373616765\nresult = valid\nsig = 308188024200e01094048fcf7a1e2ec66faedffc40f48c9c93514325bde6b4958d80f0413efde7eec1dc6de65f96009c069397e51da2eb1729efa287afd5552b25a9e427a6d836024201489e7e124f66942e642de992e60b3a86fcce576767719390c3a312fcdeaa560a7fbb0cabb35e05a6d6f3499160fd2dba12d29b613b16dec7494c950d65fdf11fa3\n\n# tcId = 427\n# x-coordinate of the public key is large\nmsg = 4d657373616765\nresult = valid\nsig = 308188024201d296292213380de133dc66eceb8bd857a5c468afe855c05da9db937373b51f9020ca11353415da76bb6af997a486d2370e31adcc0a4531952a3b59428678ee59430242015979a3c609c2c2099ae1b290da3d613b248e3a10de7ad770dffc82fb33e74fc3207533f97285cf4557a6407e9a775e59efeaee4264b2634933a6baf8c406f0c4a9\n\n[key.curve = secp521r1]\n[key.keySize = 521]\n[key.type = ECPublicKey]\n[key.uncompressed = 0400c7c8817bf2f0652a4a4b5140c773e261080a0a111395856e8a3350f5eb5612bd63b367b965e92e9538ea3b7908aef1ade4b68e17f9f9148495c167d1c4dd4913490008bf0be2979abb8111fd0d768adcad774113a822c1bb60887053b5cf8c9563e76705a391ece154b5dfb114b20e351df4014bec19fa87720845801cf06b7fffffff]\n[key.wx = 0c7c8817bf2f0652a4a4b5140c773e261080a0a111395856e8a3350f5eb5612bd63b367b965e92e9538ea3b7908aef1ade4b68e17f9f9148495c167d1c4dd491349]\n[key.wy = 08bf0be2979abb8111fd0d768adcad774113a822c1bb60887053b5cf8c9563e76705a391ece154b5dfb114b20e351df4014bec19fa87720845801cf06b7fffffff]\n[keyDer = 30819b301006072a8648ce3d020106052b81040023038186000400c7c8817bf2f0652a4a4b5140c773e261080a0a111395856e8a3350f5eb5612bd63b367b965e92e9538ea3b7908aef1ade4b68e17f9f9148495c167d1c4dd4913490008bf0be2979abb8111fd0d768adcad774113a822c1bb60887053b5cf8c9563e76705a391ece154b5dfb114b20e351df4014bec19fa87720845801cf06b7fffffff]\n[sha = SHA-512]\n\n# tcId = 428\n# y-coordinate of the public key has many trailing 1's\nmsg = 4d657373616765\nresult = valid\nsig = 308188024201ef8f785c51a25ae2cd93487b5c848d4af133217a91f51359c966e7538e68743578122df5830002f96f6fadb5bc44480e3b3b2c804e4c51cf95d059d5646c5cef21024201ba2276cc003e87bea37c3724e58a0ab885f56d09b8b5718f674f9c70f3b5ecfb4ad1f3417b420ec40810e08826efa7d8ad6ca7c6a7840348097f92b2de8d6e080b\n\n# tcId = 429\n# y-coordinate of the public key has many trailing 1's\nmsg = 4d657373616765\nresult = valid\nsig = 30818802420155978adc4b570d897511f5ecfb65a31947e6e989da17dea716625bb3fa7b92b853623eb0cd9ce2a5e2b4d8c1c2a90ec04fe79d012576ec728a45c5ce47c6d500c0024200f79fa8b94ee282a3d1815892cbf15d7ebdf62cb042c76bb3c710c23e32b75992cc249d84072198e",
     "4ed63d72435a07d2ed76f278d7399f61a5b5c997f45692fed22\n\n# tcId = 430\n# y-coordinate of the public key has many trailing 1's\nmsg = 4d657373616765\nresult = valid\nsig = 308188024201a2af29c58184ca861e7cd931f39cea064b199eee563f241cd5ecf6ebb2ade728f1be23cf007ebe8ef0c42d99f9f5190f6815446afc3043a820d7daf27e86b83b8a024201a2acd1822eb539383defff8769aad8bacd50cd24ca7aa6670671418110177808c3f4fbe6041b9cb898359ee61e04824adedd62b39fe5791907a20586333bd3c76d\n\n",
 };
-static const size_t kLen74 = 33597;
+static const size_t kLen73 = 33597;
 
-static const char *kData74[] = {
+static const char *kData73[] = {
     "# Imported from Wycheproof's eddsa_test.json.\n# This file is generated by convert_wycheproof.go. Do not edit by hand.\n#\n# Algorithm: EDDSA\n# Generator version: 0.4.12\n\n[key.curve = edwards25519]\n[key.keySize = 255]\n[key.pk = 7d4d0e7f6153a69b6242b522abbee685fda4420f8834b108c3bdae369ef549fa]\n[key.sk = add4bb8103785baf9ac534258e8aaf65f5f1adb5ef5f3df19bb80ab989c4d64b]\n[key.type = EDDSAKeyPair]\n[keyDer = 302a300506032b65700321007d4d0e7f6153a69b6242b522abbee685fda4420f8834b108c3bdae369ef549fa]\n\n# tcId = 1\nmsg = \nresult = valid\nsig = d4fbdb52bfa726b44d1786a8c0d171c3e62ca83c9e5bbe63de0bb2483f8fd6cc1429ab72cafc41ab56af02ff8fcc43b99bfe4c7ae940f60f38ebaa9d311c4007\n\n# tcId = 2\nmsg = 78\nresult = valid\nsig = d80737358ede548acb173ef7e0399f83392fe8125b2ce877de7975d8b726ef5b1e76632280ee38afad12125ea44b961bf92f1178c9fa819d020869975bcbe109\n\n# tcId = 3\nmsg = 54657374\nresult = valid\nsig = 7c38e026f29e14aabd059a0f2db8b0cd783040609a8be684db12f82a27774ab07a9155711ecfaf7f99f277bad0c6ae7e39d4eef676573336a5c51eb6f946b30d\n\n# tcId = 4\nmsg = 48656c6c6f\nresult = valid\nsig = 1c1ad976cbaae3b31dee07971cf92c928ce2091a85f5899f5e11ecec90fc9f8e93df18c5037ec9b29c07195ad284e63d548cd0a6fe358cc775bd6c1608d2c905\n\n# tcId = 5\nmsg = 313233343030\nresult = valid\nsig = 657c1492402ab5ce03e2c3a7f0384d051b9cf3570f1207fc78c1bcc98c281c2bf0cf5b3a289976458a1be6277a5055545253b45b07dcc1abd96c8b989c00f301\n\n# tcId = 6\nmsg = 000000000000000000000000\nresult = valid\nsig = d46543bfb892f84ec124dcdfc847034c19363bf3fc2fa89b1267833a14856e52e60736918783f950b6f1dd8d40dc343247cd43ce054c2d68ef974f7ed0f3c60f\n\n# tcId = 7\nmsg = 6161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161\nresult = valid\nsig = 879350045543bc14ed2c08939b68c30d22251d83e018cacbaf0c9d7a48db577e80bdf76ce99e5926762bc13b7b3483260a5ef63d07e34b58eb9c14621ac92f00\n\n# tcId = 8\nmsg = 202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f60\nresult = valid\nsig = 7bdc3f9919a05f1d5db4a3ada896094f6871c1f37afc75db82ec3147d84d6f237b7e5ecc26b59cfea0c7eaf1052dc427b0f724615be9c3d3e01356c65b9b5109\n\n# tcId = 9\nmsg = ffffffffffffffffffffffffffffffff\nresult = valid\nsig = 5dbd7360e55aa38e855d6ad48c34bd35b7871628508906861a7c4776765ed7d1e13d910faabd689ec8618b78295c8ab8f0e19c8b4b43eb8685778499e943ae04\n\n# tcId = 10\n# special values for r and s\nmsg = 3f\nresult = invalid\nsig = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\n\n# tcId = 11\n# special values for r and s\nmsg = 3f\nresult = invalid\nsig = 00000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000\n\n# tcId = 12\n# special values for r and s\nmsg = 3f\nresult = invalid\nsig = 0000000000000000000000000000000000000000000000000000000000000000ecd3f55c1a631258d69cf7a2def9de1400000000000000000000000000000010\n\n# tcId = 13\n# special values for r and s\nmsg = 3f\nresult = invalid\nsig = 0000000000000000000000000000000000000000000000000000000000000000edd3f55c1a631258d69cf7a2def9de1400000000000000000000000000000010\n\n# tcId = 14\n# special values for r and s\nmsg = 3f\nresult = invalid\nsig = 0000000000000000000000000000000000000000000000000000000000000000edffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f\n\n# tcId = 15\n# special values for r and s\nmsg = 3f\nresult = invalid\nsig = 01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\n\n# tcId = 16\n# special values for r and s\nmsg = 3f\nresult = invalid\nsig = 01000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000\n\n# tcId = 17\n# special values for r and s\nmsg = 3f\nresult = invalid\nsig = 0100000000000000000000000000000000000000000000000000000000000000ecd3f55c1a631258d69cf7a2def9de1400000000000000000000000000000010\n\n# tcId = 18\n# special values for r and s\nmsg = 3f\nresult = invalid\nsig = 0100000000000000000000000000000000000000000000000000000000000000edd3f55c1a631258d69cf7a2def9de1400000000000000000000000000000010\n\n# tcId = 19\n# special values for r and s\nmsg = 3f\nresult = invalid\nsig = 0100000000000000000000000000000000000000000000000000000000000000edffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f\n\n# tcId = 20\n# special values for r and s\nmsg = 3f\nresult = invalid\nsig = edd3f55c1a631258d69cf7a2def9de14000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000\n\n# tcId = 21\n# special values for r and s\nmsg = 3f\nresult = invalid\nsig = edd3f55c1a631258d69cf7a2def9de14000000000000000000000000000000100100000000000000000000000000000000000000000000000000000000000000\n\n# tcId = 22\n# special values for r and s\nmsg = 3f\nresult = invalid\nsig = edd3f55c1a631258d69cf7a2def9de1400000000000000000000000000000010ecd3f55c1a631258d69cf7a2def9de1400000000000000000000000000000010\n\n# tcId = 23\n# special values for r and s\nmsg = 3f\nresult = invalid\nsig = edd3f55c1a631258d69cf7a2def9de1400000000000000000000000000000010edd3f55c1a631258d69cf7a2def9de1400000000000000000000000000000010\n\n# tcId = 24\n# special values for r and s\nmsg = 3f\nresult = invalid\nsig = edd3f55c1a631258d69cf7a2def9de1400000000000000000000000000000010edffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f\n\n# tcId = 25\n# special values for r and s\nmsg = 3f\nresult = invalid\nsig = edffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000\n\n# tcId = 26\n# special values for r and s\nmsg = 3f\nresult = invalid\nsig = edffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0100000000000000000000000000000000000000000000000000000000000000\n\n# tcId = 27\n# special values for r and s\nmsg = 3f\nresult = invalid\nsig = edffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fecd3f55c1a631258d69cf7a2def9de1400000000000000000000000000000010\n\n# tcId = 28\n# special values for r and s\nmsg = 3f\nresult = invalid\nsig = edffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fedd3f55c1a631258d69cf7a2def9de1400000000000000000000000000000010\n\n# tcId = 29\n# special values for r and s\nmsg = 3f\nresult = invalid\nsig = edffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fedffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f\n\n# tcId = 30\n# empty signature\nmsg = 54657374\nresult = invalid\nsig = \n\n# tcId = 31\n# s missing\nmsg = 54657374\nresult = invalid\nsig = 7c38e026f29e14aabd059a0f2db8b0cd783040609a8be684db12f82a27774ab0\n\n# tcId = 32\n# signature too short\nmsg = 54657374\nresult = invalid\nsig = 7c38e026f29e14aabd059a0f2db8b0cd783040609a8be684db12f82a27774ab07a9155711ecfaf7f99f277bad0c6ae7e39d4eef676573336a5c51eb6f946\n\n# tcId = 33\n# signature too long\nmsg = 54657374\nresult = invalid\nsig = 7c38e026f29e14aabd059a0f2db8b0cd783040609a8be684db12f82a27774ab07a9155711ecfaf7f99f277bad0c6ae7e39d4eef676573336a5c51eb6f946b30d2020\n\n# tcId = 34\n# include pk in signature\nmsg = 54657374\nresult = invalid\nsig = 7c38e026f29e14aabd059a0f2db8b0cd783040609a8be684db12f82a27774ab07a9155711ecfaf7f99f277bad0c6ae7e39d4eef676573336a5c51eb6f946b30d7d4d0e7f6153a69b6242b522abbee685fda4420f8834b108c3bdae369ef549fa\n\n# tcId = 35\n# prepending 0 byte to signature\nmsg = 54657374\nresult = invalid\nsig = 007c38e026f29e14aabd059a0f2db8b0cd783040609a8be684db12f82a27774ab07a9155711ecfaf7f99f277bad0c6ae7e39d4eef676573336a5c51eb6f946b30d\n\n# tcId = 36\n# prepending 0 byte to s\nmsg = 54657374\nresult = invalid\nsig = 7c38e026f29e14aabd059a0f2db8b0cd783040609a8be684db12f82a27774ab0007a9155711ecfaf7f99f277bad0c6ae7e39d4eef676573336a5c51eb6f946b30d\n\n# tcId = 37\n# appending 0 byte to signature\nmsg = 54657374\nresult = invalid\nsig = 7c38e026f29e14aabd059a0f2db8b0cd783040609a8be684db12f82a27774ab07a9155711ecfaf7f99f277bad0c6ae7e39d4eef676573336a5c51eb6f946b30d00\n\n# tcId = 38\n# removing 0 byte from signature\nmsg = 546573743137\nresult = invalid\nsig = 7c38e026f29e14aabd059a0f2db8b0cd783040609a8be684db12f82a27774ab07a9155711ecfaf7f99f277bad0c6ae7e39d4eef676573336a5c51eb6f946b3\n\n# tcId = 39\n# removing 0 byte from signature\nms",
     "g = 54657374313236\nresult = invalid\nsig = 7c38e026f29e14aabd059a0f2db8b0cd783040609a8be684db12f82a27774ab09155711ecfaf7f99f277bad0c6ae7e39d4eef676573336a5c51eb6f946b30d\n\n# tcId = 40\n# removing leading 0 byte from signature\nmsg = 546573743530\nresult = invalid\nsig = 38e026f29e14aabd059a0f2db8b0cd783040609a8be684db12f82a27774ab07a9155711ecfaf7f99f277bad0c6ae7e39d4eef676573336a5c51eb6f946b30d\n\n# tcId = 41\n# dropping byte from signature\nmsg = 54657374333437\nresult = invalid\nsig = 7c38e026f29e14aabd059a0f2db8b0cd783040609a8be684db12f82a27774ab09155711ecfaf7f99f277bad0c6ae7e39d4eef676573336a5c51eb6f946b30d\n\n# tcId = 42\n# modified bit 0 in R\nmsg = 313233343030\nresult = invalid\nsig = 647c1492402ab5ce03e2c3a7f0384d051b9cf3570f1207fc78c1bcc98c281c2b1d125e5538f38afbcc1c84e489521083041d24bc6240767029da063271a1ff0c\n\n# tcId = 43\n# modified bit 1 in R\nmsg = 313233343030\nresult = invalid\nsig = 677c1492402ab5ce03e2c3a7f0384d051b9cf3570f1207fc78c1bcc98c281c2bc108ca4b87a49c9ed2cf383aecad8f54a962b2899da891e12004d7993a627e01\n\n# tcId = 44\n# modified bit 2 in R\nmsg = 313233343030\nresult = invalid\nsig = 617c1492402ab5ce03e2c3a7f0384d051b9cf3570f1207fc78c1bcc98c281c2b9ce23fc6213ed5b87912e9bbf92f5e2c780eae26d15c50a112d1e97d2ea33c06\n\n# tcId = 45\n# modified bit 7 in R\nmsg = 313233343030\nresult = invalid\nsig = e57c1492402ab5ce03e2c3a7f0384d051b9cf3570f1207fc78c1bcc98c281c2bbb3eb51cd98dddb235a5f46f2bded6af184a58d09cce928bda43f41d69118a03\n\n# tcId = 46\n# modified bit 8 in R\nmsg = 313233343030\nresult = invalid\nsig = 657d1492402ab5ce03e2c3a7f0384d051b9cf3570f1207fc78c1bcc98c281c2bcd237dda9a116501f67a5705a854b9adc304f34720803a91b324f2c13e0f5a09\n\n# tcId = 47\n# modified bit 16 in R\nmsg = 313233343030\nresult = invalid\nsig = 657c1592402ab5ce03e2c3a7f0384d051b9cf3570f1207fc78c1bcc98c281c2b6b167bbdc0d881cc04d28905552c1876f3709851abc5007376940cc8a435c300\n\n# tcId = 48\n# modified bit 31 in R\nmsg = 313233343030\nresult = invalid\nsig = 657c1412402ab5ce03e2c3a7f0384d051b9cf3570f1207fc78c1bcc98c281c2b7fd2ac7da14afffcceeb13f2a0d6b887941cb1a5eb57a52f3cb131a16cce7b0e\n\n# tcId = 49\n# modified bit 32 in R\nmsg = 313233343030\nresult = invalid\nsig = 657c1492412ab5ce03e2c3a7f0384d051b9cf3570f1207fc78c1bcc98c281c2b7373ba13ebbef99cd2a8ead55ce735c987d85a35320925a8e871702dc7c5c40d\n\n# tcId = 50\n# modified bit 63 in R\nmsg = 313233343030\nresult = invalid\nsig = 657c1492402ab54e03e2c3a7f0384d051b9cf3570f1207fc78c1bcc98c281c2bd35bd331c03f0855504ca1cab87b83c36a028425a3cf007ede4f4254c261cb00\n\n# tcId = 51\n# modified bit 64 in R\nmsg = 313233343030\nresult = invalid\nsig = 657c1492402ab5ce02e2c3a7f0384d051b9cf3570f1207fc78c1bcc98c281c2bcb35101f73cf467deac8c1a03b6c3dc35af544132734b7e57ab20c89b2e4750d\n\n# tcId = 52\n# modified bit 97 in R\nmsg = 313233343030\nresult = invalid\nsig = 657c1492402ab5ce03e2c3a7f2384d051b9cf3570f1207fc78c1bcc98c281c2bb58d2e8878290bff8d3355fdd4ea381924ee578752354eb6dee678ab4011c301\n\n# tcId = 53\n# modified bit 127 in R\nmsg = 313233343030\nresult = invalid\nsig = 657c1492402ab5ce03e2c3a7f0384d851b9cf3570f1207fc78c1bcc98c281c2bb978c866187ffb1cc7b29a0b4045aefc08768df65717194ff0c6e63f4dea0d02\n\n# tcId = 54\n# modified bit 240 in R\nmsg = 313233343030\nresult = invalid\nsig = 657c1492402ab5ce03e2c3a7f0384d051b9cf3570f1207fc78c1bcc98c281d2b0576ecf8eaf675f00f3dfbe19f75b83b7607a6c96414f6821af920a2498d0305\n\n# tcId = 55\n# modified bit 247 in R\nmsg = 313233343030\nresult = invalid\nsig = 657c1492402ab5ce03e2c3a7f0384d051b9cf3570f1207fc78c1bcc98c289c2be5241a345c7b5428054c74b7c382fa10d4a5f1e8f8b79a71d3fdea2254f1ff0e\n\n# tcId = 56\n# modified bit 248 in R\nmsg = 313233343030\nresult = invalid\nsig = 657c1492402ab5ce03e2c3a7f0384d051b9cf3570f1207fc78c1bcc98c281c2a63950c85cd6dc96364e768de50ff7732b538f8a0b1615d799190ab600849230e\n\n# tcId = 57\n# modified bit 253 in R\nmsg = 313233343030\nresult = invalid\nsig = 657c1492402ab5ce03e2c3a7f0384d051b9cf3570f1207fc78c1bcc98c281c0b543bd3da0a56a8c9c152f59c9fec12f31fa66434d48b817b30d90cb4efa8b501\n\n# tcId = 58\n# modified bit 254 in R\nmsg = 313233343030\nresult = invalid\nsig = 657c1492402ab5ce03e2c3a7f0384d051b9cf3570f1207fc78c1bcc98c281c6b8da07efd07a6dafb015ed6a32fe136319a972ffbc341f3a0beae97ccf8136505\n\n# tcId = 59\n# modified bit 255 in R\nmsg = 313233343030\nresult = invalid\nsig = 657c1492402ab5ce03e2c3a7f0384d051b9cf3570f1207fc78c1bcc98c281cab227aedf259f910f0f3a759a335062665217925d019173b88917eae294f75d40f\n\n# tcId = 60\n# R==0\nmsg = 313233343030\nresult = invalid\nsig = 0000000000000000000000000000000000000000000000000000000000000000e0b8e7770d51c7a36375d006c5bffd6af43ff54aaf47e4330dc118c71d61ec02\n\n# tcId = 61\n# invalid R\nmsg = 313233343030\nresult = invalid\nsig = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff463a1908382e7eb7693acef9884f7cf931a215e0791876be22c631a59881fd0e\n\n# tcId = 62\n# all bits flipped in R\nmsg = 313233343030\nresult = invalid\nsig = 9a83eb6dbfd54a31fc1d3c580fc7b2fae4630ca8f0edf803873e433673d7e3d40e94254586cb6188c5386c3febed477cb9a6cb29e3979adc4cb27cf5278fb70a\n\n# tcId = 63\n# checking malleability \nmsg = 54657374\nresult = invalid\nsig = 7c38e026f29e14aabd059a0f2db8b0cd783040609a8be684db12f82a27774ab067654bce3832c2d76f8f6f5dafc08d9339d4eef676573336a5c51eb6f946b31d\n# EdDSA signatures are non-malleable, if implemented accordingly. Failing to\n# check the range of S allows to modify signatures. See RFC 8032, Section 5.2.7\n# and Section 8.4.\n\n# tcId = 64\n# checking malleability \nmsg = 54657374\nresult = invalid\nsig = 7c38e026f29e14aabd059a0f2db8b0cd783040609a8be684db12f82a27774ab05439412b5395d42f462c67008eba6ca839d4eef676573336a5c51eb6f946b32d\n# EdDSA signatures are non-malleable, if implemented accordingly. Failing to\n# check the range of S allows to modify signatures. See RFC 8032, Section 5.2.7\n# and Section 8.4.\n\n# tcId = 65\n# checking malleability \nmsg = 54657374\nresult = invalid\nsig = 7c38e026f29e14aabd059a0f2db8b0cd783040609a8be684db12f82a27774ab02ee12ce5875bf9dff26556464bae2ad239d4eef676573336a5c51eb6f946b34d\n# EdDSA signatures are non-malleable, if implemented accordingly. Failing to\n# check the range of S allows to modify signatures. See RFC 8032, Section 5.2.7\n# and Section 8.4.\n\n# tcId = 66\n# checking malleability \nmsg = 54657374\nresult = invalid\nsig = 7c38e026f29e14aabd059a0f2db8b0cd783040609a8be684db12f82a27774ab0e2300459f1e742404cd934d2c595a6253ad4eef676573336a5c51eb6f946b38d\n# EdDSA signatures are non-malleable, if implemented accordingly. Failing to\n# check the range of S allows to modify signatures. See RFC 8032, Section 5.2.7\n# and Section 8.4.\n\n# tcId = 67\n# checking malleability \nmsg = 54657374\nresult = invalid\nsig = 7c38e026f29e14aabd059a0f2db8b0cd783040609a8be684db12f82a27774ab07a9155711ecfaf7f99f277bad0c6ae7e39d4eef676573336a5c51eb6f946b32d\n# EdDSA signatures are non-malleable, if implemented accordingly. Failing to\n# check the range of S allows to modify signatures. See RFC 8032, Section 5.2.7\n# and Section 8.4.\n\n# tcId = 68\n# checking malleability \nmsg = 54657374\nresult = invalid\nsig = 7c38e026f29e14aabd059a0f2db8b0cd783040609a8be684db12f82a27774ab07a9155711ecfaf7f99f277bad0c6ae7e39d4eef676573336a5c51eb6f946b34d\n# EdDSA signatures are non-malleable, if implemented accordingly. Failing to\n# check the range of S allows to modify signatures. See RFC 8032, Section 5.2.7\n# and Section 8.4.\n\n# tcId = 69\n# checking malleability \nmsg = 54657374\nresult = invalid\nsig = 7c38e026f29e14aabd059a0f2db8b0cd783040609a8be684db12f82a27774ab07a9155711ecfaf7f99f277bad0c6ae7e39d4eef676573336a5c51eb6f946b38d\n# EdDSA signatures are non-malleable, if implemented accordingly. Failing to\n# check the range of S allows to modify signatures. See RFC 8032, Section 5.2.7\n# and Section 8.4.\n\n# tcId = 70\n# checking malleability \nmsg = 54657374\nresult = invalid\nsig = 7c38e026f29e14aabd059a0f2db8b0cd783040609a8be684db12f82a27774ab0679155711ecfaf7f99f277bad0c6ae7e39d4eef676573336a5c51eb6f946b38d\n# EdDSA signatures are non-malleable, if implemented accordingly. Failing to\n# check the range of S allows to modify signatures. See RFC 8032, Section 5.2.7\n# and Section 8.4.\n\n[key.curve = edwards25519]\n[key.keySize = 255]\n[key.pk = a12c2beb77265f2aac953b5009349d94155a03ada416aad451319480e983ca4c]\n[key.sk = 0a23a20072891237aa0864b5765139514908787878cd77135a0059881d313f00]\n[key.type = ED",
     "DSAKeyPair]\n[keyDer = 302a300506032b6570032100a12c2beb77265f2aac953b5009349d94155a03ada416aad451319480e983ca4c]\n\n# tcId = 71\nmsg = \nresult = valid\nsig = 5056325d2ab440bf30bbf0f7173199aa8b4e6fbc091cf3eb6bc6cf87cd73d992ffc216c85e4ab5b8a0bbc7e9a6e9f8d33b7f6e5ac0ffdc22d9fcaf784af84302\n\n# tcId = 72\nmsg = 78\nresult = valid\nsig = 481fafbf4364d7b682475282f517a3ac0538c9a6b6a562e99a3d8e5afb4f90a559b056b9f07af023905753b02d95eb329a35c77f154b79abbcd291615ce42f02\n\n# tcId = 73\nmsg = 54657374\nresult = valid\nsig = 8a9bb4c465a3863abc9fd0dd35d80bb28f7d33d37d74679802d63f82b20da114b8d765a1206b3e9ad7cf2b2d8d778bb8651f1fa992db293c0039eacb6161480f\n\n# tcId = 74\nmsg = 48656c6c6f\nresult = valid\nsig = d839c20abfda1fd429531831c64f813f84b913e9928540310cf060b44c3dbf9457d44a7721fdc0d67724ff81cb450dd39b10cfb65db15dda4b8bf09d26bd3801\n\n# tcId = 75\nmsg = 313233343030\nresult = valid\nsig = 9bbb1052dcfa8ad2715c2eb716ae4f1902dea353d42ee09fd4c0b4fcb8b52b5219e2200016e1199d0061891c263e31b0bc3b55673c19610c4e0fa5408004160b\n\n# tcId = 76\nmsg = 000000000000000000000000\nresult = valid\nsig = f63b5c0667c7897fc283296416f7f60e84bbde9cbd832e56be463ed9f568069702b17a2f7c341ebf590706a6388ac76ac613c1675ec0f2c7118f2573422a500b\n\n# tcId = 77\nmsg = 6161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161\nresult = valid\nsig = 1bc44d7001e6b5b9090fef34b2ca480f9786bbefa7d279353e5881e8dfb91b803ccd46500e270ef0109bfd741037558832120bc2a4f20fbe7b5fb3c3aaf23e08\n\n# tcId = 78\nmsg = 202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f60\nresult = valid\nsig = ea8e22143b02372e76e99aece3ed36aec529768a27e2bb49bdc135d44378061e1f62d1ac518f33ebf37b2ee8cc6dde68a4bd7d4a2f4d6cb77f015f71ca9fc30d\n\n# tcId = 79\nmsg = ffffffffffffffffffffffffffffffff\nresult = valid\nsig = 8acd679e1a914fc45d5fa83d3021f0509c805c8d271df54e52f43cfbd00cb6222bf81d58fe1de2de378df67ee9f453786626961fe50a9b05f12b6f0899ebdd0a\n\n[key.curve = edwards25519]\n[key.keySize = 255]\n[key.pk = d75a980182b10ab7d54bfed3c964073a0ee172f3daa62325af021a68f707511a]\n[key.sk = 9d61b19deffd5a60ba844af492ec2cc44449c5697b326919703bac031cae7f60]\n[key.type = EDDSAKeyPair]\n[keyDer = 302a300506032b6570032100d75a980182b10ab7d54bfed3c964073a0ee172f3daa62325af021a68f707511a]\n\n# tcId = 80\n# draft-josefsson-eddsa-ed25519-02: Test 1\nmsg = \nresult = valid\nsig = e5564300c360ac729086e2cc806e828a84877f1eb8e5d974d873e065224901555fb8821590a33bacc61e39701cf9b46bd25bf5f0595bbe24655141438e7a100b\n\n[key.curve = edwards25519]\n[key.keySize = 255]\n[key.pk = 3d4017c3e843895a92b70aa74d1b7ebc9c982ccf2ec4968cc0cd55f12af4660c]\n[key.sk = 4ccd089b28ff96da9db6c346ec114e0f5b8a319f35aba624da8cf6ed4fb8a6fb]\n[key.type = EDDSAKeyPair]\n[keyDer = 302a300506032b65700321003d4017c3e843895a92b70aa74d1b7ebc9c982ccf2ec4968cc0cd55f12af4660c]\n\n# tcId = 81\n# draft-josefsson-eddsa-ed25519-02: Test 2\nmsg = 72\nresult = valid\nsig = 92a009a9f0d4cab8720e820b5f642540a2b27b5416503f8fb3762223ebdb69da085ac1e43e15996e458f3613d0f11d8c387b2eaeb4302aeeb00d291612bb0c00\n\n[key.curve = edwards25519]\n[key.keySize = 255]\n[key.pk = fc51cd8e6218a1a38da47ed00230f0580816ed13ba3303ac5deb911548908025]\n[key.sk = c5aa8df43f9f837bedb7442f31dcb7b166d38535076f094b85ce3a2e0b4458f7]\n[key.type = EDDSAKeyPair]\n[keyDer = 302a300506032b6570032100fc51cd8e6218a1a38da47ed00230f0580816ed13ba3303ac5deb911548908025]\n\n# tcId = 82\n# draft-josefsson-eddsa-ed25519-02: Test 3\nmsg = af82\nresult = valid\nsig = 6291d657deec24024827e69c3abe01a30ce548a284743a445e3680d7db5ac3ac18ff9b538d16f290ae67f760984dc6594a7c15e9716ed28dc027beceea1ec40a\n\n[key.curve = edwards25519]\n[key.keySize = 255]\n[key.pk = 278117fc144c72340f67d0f2316e8386ceffbf2b2428c9c51fef7c597f1d426e]\n[key.sk = f5e5767cf153319517630f226876b86c8160cc583bc013744c6bf255f5cc0ee5]\n[key.type = EDDSAKeyPair]\n[keyDer = 302a300506032b6570032100278117fc144c72340f67d0f2316e8386ceffbf2b2428c9c51fef7c597f1d426e]\n\n# tcId = 83\n# draft-josefsson-eddsa-ed25519-02: Test 1024\nmsg = 08b8b2b733424243760fe426a4b54908632110a66c2f6591eabd3345e3e4eb98fa6e264bf09efe12ee50f8f54e9f77b1e355f6c50544e23fb1433ddf73be84d879de7c0046dc4996d9e773f4bc9efe5738829adb26c81b37c93a1b270b20329d658675fc6ea534e0810a4432826bf58c941efb65d57a338bbd2e26640f89ffbc1a858efcb8550ee3a5e1998bd177e93a7363c344fe6b199ee5d02e82d522c4feba15452f80288a821a579116ec6dad2b3b310da903401aa62100ab5d1a36553e06203b33890cc9b832f79ef80560ccb9a39ce767967ed628c6ad573cb116dbefefd75499da96bd68a8a97b928a8bbc103b6621fcde2beca1231d206be6cd9ec7aff6f6c94fcd7204ed3455c68c83f4a41da4af2b74ef5c53f1d8ac70bdcb7ed185ce81bd84359d44254d95629e9855a94a7c1958d1f8ada5d0532ed8a5aa3fb2d17ba70eb6248e594e1a2297acbbb39d502f1a8c6eb6f1ce22b3de1a1f40cc24554119a831a9aad6079cad88425de6bde1a9187ebb6092cf67bf2b13fd65f27088d78b7e883c8759d2c4f5c65adb7553878ad575f9fad878e80a0c9ba63bcbcc2732e69485bbc9c90bfbd62481d9089beccf80cfe2df16a2cf65bd92dd597b0707e0917af48bbb75fed413d238f5555a7a569d80c3414a8d0859dc65a46128bab27af87a71314f318c782b23ebfe808b82b0ce26401d2e22f04d83d1255dc51addd3b75a2b1ae0784504df543af8969be3ea7082ff7fc9888c144da2af58429ec96031dbcad3dad9af0dcbaaaf268cb8fcffead94f3c7ca495e056a9b47acdb751fb73e666c6c655ade8297297d07ad1ba5e43f1bca32301651339e22904cc8c42f58c30c04aafdb038dda0847dd988dcda6f3bfd15c4b4c4525004aa06eeff8ca61783aacec57fb3d1f92b0fe2fd1a85f6724517b65e614ad6808d6f6ee34dff7310fdc82aebfd904b01e1dc54b2927094b2db68d6f903b68401adebf5a7e08d78ff4ef5d63653a65040cf9bfd4aca7984a74d37145986780fc0b16ac451649de6188a7dbdf191f64b5fc5e2ab47b57f7f7276cd419c17a3ca8e1b939ae49e488acba6b965610b5480109c8b17b80e1b7b750dfc7598d5d5011fd2dcc5600a32ef5b52a1ecc820e308aa342721aac0943bf6686b64b2579376504ccc493d97e6aed3fb0f9cd71a43dd497f01f17c0e2cb3797aa2a2f256656168e6c496afc5fb93246f6b1116398a346f1a641f3b041e989f7914f90cc2c7fff357876e506b50d334ba77c225bc307ba537152f3f1610e4eafe595f6d9d90d11faa933a15ef1369546868a7f3a45a96768d40fd9d03412c091c6315cf4fde7cb68606937380db2eaaa707b4c4185c32eddcdd306705e4dc1ffc872eeee475a64dfac86aba41c0618983f8741c5ef68d3a101e8a3b8cac60c905c15fc910840b94c00a0b9d0\nresult = valid\nsig = 0aab4c900501b3e24d7cdf4663326a3a87df5e4843b2cbdb67cbf6e460fec350aa5371b1508f9f4528ecea23c436d94b5e8fcd4f681e30a6ac00a9704a188a03\n\n[key.curve = edwards25519]\n[key.keySize = 255]\n[key.pk = 8fd659b77b558ed93882c1157438450ac86ec62d421d568e98ee236f3810295a]\n[key.sk = d7ad3f1f6bbe0477c3c357a806a19eb41ae3f94025035bc87f281f8ee9fc0e34]\n[key.type = EDDSAKeyPair]\n[keyDer = 302a300506032b65700321008fd659b77b558ed93882c1157438450ac86ec62d421d568e98ee236f3810295a]\n\n# tcId = 84\n# Random test failure 1\nmsg = b0729a713593a92e46b56eaa66b9e435f7a09a8e7de03b078f6f282285276635f301e7aaafe42187c45d6f5b13f9f16b11195cc125c05b90d24dfe4c\nresult = valid\nsig = 7db17557ac470c0eda4eedaabce99197ab62565653cf911f632ee8be0e5ffcfc88fb94276b42e0798fd3aa2f0318be7fc6a29fae75f70c3dcdc414a0ad866601\n\n[key.curve = edwards25519]\n[key.keySize = 255]\n[key.pk = 2a606bf67ac770c607038b004101b325edb569efd3413d2d1f2c3e6b4e6e3082]\n[key.sk = ad9b22793336fcdac10e136c4deea599be187a38eef91c1cf7c7a4ec884dda08]\n[key.type = EDDSAKeyPair]\n[keyDer = 302a300506032b65700321002a606bf67ac770c607038b004101b325edb569efd3413d2d1f2c3e6b4e6e3082]\n\n# tcId = 85\n# Random test failure 2\nmsg = a8546e50ba31cae3234310d32672447be213fad91a227a19669c53d309b959782b0e6b71f8791fdb470043b58122003157d2d96a43a6cbd7d3a8d86bf4c97391883e268d50af80e1e6e12939c2bd50ca746cdadfad4edf1bda875299740724148efb1ebe73fb60088cda890317658627a5f7ab5a0c075d9d8f3f97b6492b35519e50ff6b38377432a7081f9176bb1c29a862deac1336ca20b097a47829cec10a6a7cec178eda2d12f6dc6c87f910454af0123555ba184e68804d9cced60fd5c8c90943e56599c8f0ba59a38491ba5e5a53460682474c07e40ca142983314fd762856bb1093f359da6eb0a756bd93a3160c10dd8feea6b97e7c6a17cb54bd5d7649c05c66d7bdee056671dfdaf689fa3945bb8e29a429f4bd5d355dce9687b06f01d5e33e3999f0e8\nresult = valid\nsig = 67d84d4c3945aaf06e06d524be63acbfb5dbb1988c4aea96a5ee9f7a9b9eecc29df4f66b8aa1d9e8607a58fb1ef0c2ad69aac005b4f58e34103344a9c8871a09\n\n# tcId = 86\n# Random test failure 24\nmsg = b477b0480bb84642608b908d29a51cf2fce63f24ee95\nresult = valid\nsig = 28fafbb62b4d688fa79e1ac92851f46e319b161f801d4dc09acc21fdd6780a2c4292b8c1003c61c2bcebe7f3f88ccc4bb26d407387c5f27cb8c94cf6ce810405\n",
     "\n[key.curve = edwards25519]\n[key.keySize = 255]\n[key.pk = c9c946cbc5544ac74eef491f07c5881c16faf7ec31ce4aa91bb60ae7b4539051]\n[key.sk = 04a6553d68a9baef78a2175af375458eaa01cdb77350c61e282ef5f0c7116599]\n[key.type = EDDSAKeyPair]\n[keyDer = 302a300506032b6570032100c9c946cbc5544ac74eef491f07c5881c16faf7ec31ce4aa91bb60ae7b4539051]\n\n# tcId = 87\n# Random test failure 3\nmsg = cd2212eddb0706f62c995cef958634f0cb7793444cbf4d30e81c27c41ebea6cb02607510131f9c015692dfd521b148841e9a2d3564d20ac401f6cb8e40f520fe0cafbeaa88840b83013369d879f013463fe52a13267aa0c8c59c45cde9399cd1e6be8cc64cf48315ac2eb31a1c567a4fb7d601746d1f63b5ac020712adbbe07519bded6f\nresult = valid\nsig = 24087d47f3e20af51b9668ae0a88ce76586802d0ec75d8c0f28fc30962b5e1d1a1d509571a1624ed125a8df92a6e963728d6b5de99200b8e285f70feb6f05207\n\n# tcId = 88\n# Random test failure 20\nmsg = 27d465bc632743522aefa23c\nresult = valid\nsig = c2656951e2a0285585a51ff0eda7e9a23c2dfd2ffa273aee7808f4604e8f9a8c8ea49e9fce4eb2d8d75d36b7238fe6fc13b6c5d9427dd58f8c6615d033c0bd0f\n\n[key.curve = edwards25519]\n[key.keySize = 255]\n[key.pk = 32ad026f693d0d2afe7f4388d91c4c964426fcb9e3665c3ebd8650009b815c8e]\n[key.sk = c367c8d2ebeeecd70c1e8985b70c3808b75657f243b21ba4f322792540e92257]\n[key.type = EDDSAKeyPair]\n[keyDer = 302a300506032b657003210032ad026f693d0d2afe7f4388d91c4c964426fcb9e3665c3ebd8650009b815c8e]\n\n# tcId = 89\n# Random test failure 4\nmsg = ec5c7cb078\nresult = valid\nsig = d920d421a5956b69bfe1ba834c025e2babb6c7a6d78c97de1d9bb1116dfdd1185147b2887e34e15578172e150774275ea2aad9e02106f7e8ca1caa669a066f0c\n\n# tcId = 90\n# Random test failure 5\nmsg = 4668c6a76f0e482190a7175b9f3806a5fe4314a004fa69f988373f7a\nresult = valid\nsig = 4f62daf7f7c162038552ad7d306e195baa37ecf6ca7604142679d7d1128e1f8af52e4cb3545748c44ef1ff1c64e877e4f4d248259b7f6eb56e3ef72097dc8e0c\n\n# tcId = 91\n# Random test failure 8\nmsg = 5dc9bb87eb11621a93f92abe53515697d2611b2eef73\nresult = valid\nsig = deecafb6f2ede73fec91a6f10e45b9c1c61c4b9bfbe6b6147e2de0b1df6938971f7896c3ab83851fb5d9e537037bff0fca0ccb4a3cc38f056f91f7d7a0557e08\n\n# tcId = 92\n# Random test failure 10\nmsg = 7dcfe60f881e1285676f35b68a1b2dbcdd7be6f719a288ababc28d36e3a42ac3010a1ca54b32760e74\nresult = valid\nsig = 7f8663cf98cbd39d5ff553f00bcf3d0d520605794f8866ce75714d77cc51e66c91818b657d7b0dae430a68353506edc4a714c345f5ddb5c8b958ba3d035f7a01\n\n# tcId = 93\n# Random test failure 12\nmsg = 58e456064dff471109def4ca27fa8310a1df32739655b624f27e6418d34b7f007173f3faa5\nresult = valid\nsig = 6aab49e5c0bc309b783378ee03ffda282f0185cdf94c847701ff307a6ee8d0865411c44e0a8206f6a5f606107451940c2593af790ce1860f4c14ab25b2deae08\n\n# tcId = 94\n# Random test failure 15\nmsg = a1\nresult = valid\nsig = 1a74ed2cbdc7d8f3827014e8e6ecf8fd2698ac8f86833acccdd400df710fe0d6b0543c9cfa00d52bf024ab7ce0d91981944097233ec134d5c7abbd44bfd32d0d\n\n# tcId = 95\n# Random test failure 19\nmsg = 11cb1eafa4c42a8402c4193c4696f7b2e6d4585e4b42dcf1a8b67a80b2da80bc9d4b649fb2f35eaf1f56c426fd0b\nresult = valid\nsig = 14ceb2eaf4688d995d482f44852d71ad878cd7c77b41e60b0065fd01a59b054ee74759224187dbde9e59a763a70277c960892ef89fba997aba2576b2c54ba608\n\n# tcId = 96\n# Random test failure 25\nmsg = aa365b442d12b7f3c925\nresult = valid\nsig = 83c40ce13d483cc58ff65844875862d93df4bd367af77efa469ec06a8ed9e6d7905a04879535708ddf225567a815c9b941d405c98e918fd0c151165cea7fb101\n\n# tcId = 97\n# Random test failure 28\nmsg = 475f\nresult = valid\nsig = 71a4a06a34075f2fd47bc3abf4714d46db7e97b08cb6180d3f1539ac50b18ce51f8af8ae95ed21d4fa0daab7235925631ecea1fd9d0d8a2ba7a7583fd04b900c\n\n[key.curve = edwards25519]\n[key.keySize = 255]\n[key.pk = c29ec1894e06d27b4e40486b4fa5063d66a746c7f9c323b12203c03b72b8b78a]\n[key.sk = 56c1e22d616cbb6dea869288b4b1c02bb98696583c2f6e650013a03e17049c62]\n[key.type = EDDSAKeyPair]\n[keyDer = 302a300506032b6570032100c29ec1894e06d27b4e40486b4fa5063d66a746c7f9c323b12203c03b72b8b78a]\n\n# tcId = 98\n# Random test failure 6\nmsg = 0f325ffd87e58131ffa23c05ea4579513b287fdba87b44\nresult = valid\nsig = 6669acf94667c5b541afe5307bde9476b13ae7e0e6058a772101ac8eb0a94331428eb4db0a2c68a9b6c1763b8624dab259b0876cdcfaeacc17b21a18e3fc010a\n\n# tcId = 99\n# Random test failure 21\nmsg = 5ffa\nresult = valid\nsig = 931e5152fcef078c22cc5d6a3a65f06e396289f6f5f2d1efa6340254a53526ef5dc6874eeddf35c3f50991c53cd02bf06313e37d93ee1f7022128ffa3b8f300b\n\n[key.curve = edwards25519]\n[key.keySize = 255]\n[key.pk = cfda5b899e35764c5229e59295fe1222b7ddce176643697c29e46ecbba10cf10]\n[key.sk = b7d2f64276df417fed27d8e15b4e90f6fd93dace707294c338bd32bc4bbd8fdb]\n[key.type = EDDSAKeyPair]\n[keyDer = 302a300506032b6570032100cfda5b899e35764c5229e59295fe1222b7ddce176643697c29e46ecbba10cf10]\n\n# tcId = 100\n# Random test failure 7\nmsg = ec5c7cb078\nresult = valid\nsig = 30490c28f806298225df62103521dcee047153912c33ab8ab8bbdd1ffabd70fd4fdb360f05be535b067d1cf4e78c2cb432206bf280aab3bd21aaa1cb894c5b06\n\n# tcId = 101\n# Random test failure 9\nmsg = 67484059b2490b1a0a4f8dee77979e26\nresult = valid\nsig = 4cd4f77ed473a6647387f3163541c67a1708a3c3bd1673247cb87f0cb68b3c56f04bfa72970c8a483efe659c87009ab4020b590b6641316b3deddb5450544e02\n\n# tcId = 102\n# Random test failure 11\nmsg = a020a4381dc9141f47ee508871ab7a8b5a3648727c4281ae9932376f23a8e1bcda0626b7129197d864178631ec89c4332dbb18\nresult = valid\nsig = 1e41a24fe732bd7cab14c2a2f5134ee8c87fcbd2e987e60957ed9239e5c32404d56977e1b4282871896cb10625a1937468e4dc266e16a9c1b8e9891177eca802\n\n# tcId = 103\n# Random test failure 14\nmsg = a25176b3afea318b2ec11ddacb10caf7179c0b3f8eabbfa2895581138d3c1e0e\nresult = valid\nsig = 2a833aadecd9f28235cb5896bf3781521dc71f28af2e91dbe1735a61dce3e31ac15ca24b3fc47817a59d386bbbb2ce60a6adc0a2703bb2bdea8f70f91051f706\n\n# tcId = 104\n# Random test failure 18\nmsg = a9e6d94870a67a9fe1cf13b1e6f9150cdd407bf6480ec841ea586ae3935e9787163cf419c1\nresult = valid\nsig = c97e3190f83bae7729ba473ad46b420b8aad735f0808ea42c0f898ccfe6addd4fd9d9fa3355d5e67ee21ab7e1f805cd07f1fce980e307f4d7ad36cc924eef00c\n\n[key.curve = edwards25519]\n[key.keySize = 255]\n[key.pk = 529919c9c780985a841c42ba6c180ff2d67a276ccfbe281080e47ab71a758f56]\n[key.sk = 7d597c3b7283929d07ed8f01f31d2596823e5e46ab226c7be4234d1a9dcaef37]\n[key.type = EDDSAKeyPair]\n[keyDer = 302a300506032b6570032100529919c9c780985a841c42ba6c180ff2d67a276ccfbe281080e47ab71a758f56]\n\n# tcId = 105\n# Random test failure 13\nmsg = e1cbf2d86827825613fb7a85811d\nresult = valid\nsig = 01abfa4d6bbc726b196928ec84fd03f0c953a4fa2b228249562ff1442a4f63a7150b064f3712b51c2af768d2c2711a71aabf8d186833e941a0301b82f0502905\n\n# tcId = 106\n# Random test failure 22\nmsg = 25\nresult = valid\nsig = e4ae21f7a8f4b3b325c161a8c6e53e2edd7005b9c2f8a2e3b0ac4ba94aa80be6f2ee22ac8d4a96b9a3eb73a825e7bb5aff4a3393bf5b4a38119e9c9b1b041106\n\n[key.curve = edwards25519]\n[key.keySize = 255]\n[key.pk = 2252b3d57c74cbf8bc460dc2e082847926bc022f09ab6ae95756362bfd1167c1]\n[key.sk = f401cee4bfb1732f0e9b8d8ba79469565c3115296141dbdf7e9c311a0ac1823b]\n[key.type = EDDSAKeyPair]\n[keyDer = 302a300506032b65700321002252b3d57c74cbf8bc460dc2e082847926bc022f09ab6ae95756362bfd1167c1]\n\n# tcId = 107\n# Random test failure 16\nmsg = 975ef941710071a9e1e6325a0c860becd7c695b5117c3107b686e330e5\nresult = valid\nsig = af0fd9dda7e03e12313410d8d8844ebb6fe6b7f65141f22d7bcba5695a25414a9e54326fb44d59fb14707899a8aae70857b23d4080d7ab2c396ef3a36d45ce02\n\n# tcId = 108\n# Random test failure 23\nmsg = 80fdd6218f29c8c8f6bd820945f9b0854e3a8824\nresult = valid\nsig = e097e0bd0370bff5bde359175a11b728ee9639095d5df8eda496395565616edfe079977f7d4dc8c75d6113a83d6a55e6e1676408c0967a2906339b43337dcb01\n\n[key.curve = edwards25519]\n[key.keySize = 255]\n[key.pk = c0a773110f975de3732355bb7ec7f0c41c091c0252966070205516693b992a4a]\n[key.sk = 3d658956410377d0644676d2599542412a4f3b0e4eadfb7f3f836615f42b18bc]\n[key.type = EDDSAKeyPair]\n[keyDer = 302a300506032b6570032100c0a773110f975de3732355bb7ec7f0c41c091c0252966070205516693b992a4a]\n\n# tcId = 109\n# Random test failure 17\nmsg = \nresult = valid\nsig = 0280427e713378f49d478df6373c6cac847b622b567daa2376c839e7ac10e22c380ab0fa8617c9dcfe76c4d9db5459b21dc1413726e46cc8f387d359e344f407\n\n[key.curve = edwards25519]\n[key.keySize = 255]\n[key.pk = 54cda623245759ad6d43e620a606908befc633d60792bc7798447a0ef38e7311]\n[key.sk = bccb61323840c2a96fc36f7e54ea6c8e55f9d221f7f05791ed60025e06064439]\n[key.type = EDDSAKeyPair]\n[keyDer = 302a300506032b657003210054cda623245759ad6d43e620a60690",
     "8befc633d60792bc7798447a0ef38e7311]\n\n# tcId = 110\n# Random test failure 26\nmsg = 27e792b28b2f1702\nresult = valid\nsig = 14d9b497c19b91d43481c55bb6f5056de252d9ecb637575c807e58e9b4c5eac8b284089d97e2192dc242014363208e2c9a3435edf8928fb1d893553e9be4c703\n\n[key.curve = edwards25519]\n[key.keySize = 255]\n[key.pk = 2362bac514d5fad33802642e979a1e82de6eb6f1bcbf6a5b304f2bb02b9e57fe]\n[key.sk = f2d3023b9c19e241748bc4039a7a43c595701f23675505015213a8a2a0274c1b]\n[key.type = EDDSAKeyPair]\n[keyDer = 302a300506032b65700321002362bac514d5fad33802642e979a1e82de6eb6f1bcbf6a5b304f2bb02b9e57fe]\n\n# tcId = 111\n# Random test failure 27\nmsg = eef3bb0f617c17d0420c115c21c28e3762edc7b7fb048529b84a9c2bc6\nresult = valid\nsig = 242ddb3a5d938d07af690b1b0ef0fa75842c5f9549bf39c8750f75614c712e7cbaf2e37cc0799db38b858d41aec5b9dd2fca6a3c8e082c10408e2cf3932b9d08\n\n",
 };
-static const size_t kLen75 = 48818;
+static const size_t kLen74 = 36808;
 
-static const char *kData75[] = {
-    "# Imported from Wycheproof's third_party/wycheproof_testvectors/kwp_test.json.\n# This file is generated by convert_wycheproof.go. Do not edit by hand.\n#\n# Algorithm: KWP\n# Generator version: 0.4.12\n\n[keySize = 128]\n\n# tcId = 1\nct = 8cd63fa6788aa5edfa753fc87d645a672b14107c3b4519e7\nkey = 6f67486d1e914419cb43c28509c7c1ea\nmsg = 8dc0632d92ee0be4f740028410b08270\nresult = valid\n\n# tcId = 2\nct = e8bac475d1429034b32f9bdeec09a37f9b3704028f1e0270\nkey = a0b17172bb296db7f5c869e9a36b5ce3\nmsg = 615dd022d607c910f20178cbdf42060f\nresult = valid\n\n# tcId = 3\nct = 4c8bcd601b508ef399f71b841294497a4493c4a0014c0103\nkey = 0e49d571c19b5250effd41d94bde39d6\nmsg = f25e4de8caca363fd5f29442eb147b55\nresult = valid\n\n# tcId = 4\n# wrapped key is longer than wrapping key\nct = 9e4510cc84c4bd7abab0a8a5d7f1e6ff3e6777ca2dff9be7e223652239fe57d8\nkey = e0e12959109103e30ae8b5684a22e662\nmsg = dbb0f2bb2be912a20430972d9842ce3fd3b928e573e1ac8e\nresult = acceptable\n\n# tcId = 5\n# wrapped key is longer than wrapping key\nct = 8fbf39ae583bd4efa7a3e8f7b86870b34766ae7d8923a8e97b0cd289ad98cacb\nkey = dd583d9f1059861430ec8b5d8a180e9b\nmsg = f2e34f356362a31b51d6e02bcd333c9e6170494ca5ff5487\nresult = acceptable\n\n# tcId = 6\n# wrapped key is longer than wrapping key\nct = df2fbe5fa86418edc7b5b04a4aea724aca17e88cedc84ca8b0b0f048e64590cb\nkey = faf5ccfae42b43cee2c5f0f3177a7c5d\nmsg = 4e02084833660c463830483b36dab866c64c8cf7429cac3d\nresult = acceptable\n\n# tcId = 7\n# wrapped key is longer than wrapping key\nct = 67f8edf57f84ea0a35b35511d67d3f299c9984b2c07d3809c3d7f5f45091f1a8fbb937ed447677f6\nkey = c2b9d23f2831ddcdeb456853d4014db9\nmsg = f4cfea98e58b939cc859554385cf3a6c7f8217f728efb431c964786de8274907\nresult = acceptable\n\n# tcId = 8\n# wrapped key is longer than wrapping key\nct = 60d55a22ba7dbd7d8f317388e01e6be561d15d29f85c566f1259aa7e7dc3d5d30e0ef5f4c6267553\nkey = 620a08f320cdedbf7ae551add348d95e\nmsg = cec34eaf8e67e1ce619ddfc309531c42f16033a7e2cbc4f5eb3a548164e9b291\nresult = acceptable\n\n# tcId = 9\n# wrapped key is longer than wrapping key\nct = d78a8291108f0f2d8be0ec10ec08240bf4d3021f0a5ed7faba0748db73762f34a0504bd373212df2\nkey = ed089ac274f8c7cea2415671a94b5e53\nmsg = 6065e41df14daeeefacac5daeb7674cdc9c1f686013b797153e80ef215893299\nresult = acceptable\n\n# tcId = 10\n# Round counter overflows 256\nct = 9341221aca1c647e2afc2bdd9cf4ed6e60058eb0a84cb3fc2daf3a87d9fad0a1f8268b27aaf7201d705e72f7e2240309ad98742094e3f1c99b7faa9ae181b441f5004b8bc93cdd4160d403d0884749a3c379d47c112a45788c05c2106c98f59758d393e04c880691b0e8683a12df7f876e1e1f68b4acbae9cc8310b34d59ccf4617cee72e845df1e0e32e5b4938f2923d55f1bb5156dd8c787401e6ef241ea4073d0a59ddfcd7a53db5d89b480b030cfb9084ea8479b964f090bb612d5251eee9ef8870a45f1e76fd24abdd9b350fe148b15a4cfeb032d57b5743b3548a7ce9eec8e21a31ce832530edfd1cffd9bb37369e6463c6b373ab60d80b0a2677e92e658f7daf2a5234b7312bf2d967cd0bc809e9be2f706ae63bd632fd611f161e48ee19677f3243aa0e91f6651a1cef62feff7a72eedf830bae1dc6d89e55ccb5e6f97889c6266f7d3f2eb0aea6c8c42200febccc5916825368adc87e04e835de06fd7bc2805c219e7f0b6252563f29969b1f30cfa1a8da4b90ae7534fb849d068a7e77de7360f8af173\nkey = b6121acad51038e11873aaa7e6c7be06\nmsg = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\nresult = acceptable\n\n# tcId = 11\n# wrapping small key\nct = a65959a600000000\nkey = 1abf4b7fa2bb62a78f09ddab04625dca\nmsg = \nresult = acceptable\n\n# tcId = 12\n# wrapping small key\nct = 09bcbab50b8dd45ad83412e2919030d3\nkey = 1abf4b7fa2bb62a78f09ddab04625dca\nmsg = 4c\nresult = acceptable\n\n# tcId = 13\n# wrapping small key\nct = 0cbe852cdce4f0b5333366f446b2b1c5\nkey = 1abf4b7fa2bb62a78f09ddab04625dca\nmsg = be52\nresult = acceptable\n\n# tcId = 14\n# wrapping small key\nct = a9dc66e03435ab3d4f97ff66f2c911a3\nkey = 1abf4b7fa2bb62a78f09ddab04625dca\nmsg = 2d5244\nresult = acceptable\n\n# tcId = 15\n# wrapping small key\nct = 1b970c8ecb4187447e60e6083da03086\nkey = 1abf4b7fa2bb62a78f09ddab04625dca\nmsg = 6c3d3b4c\nresult = acceptable\n\n# tcId = 16\n# wrapping small key\nct = 0344f7b34ab8ef28aaa843f276b0b3d5\nkey = 1abf4b7fa2bb62a78f09ddab04625dca\nmsg = 0412ab3ec6\nresult = acceptable\n\n# tcId = 17\n# wrapping small key\nct = 17356c7148334ca1a24aab7e82a66e18\nkey = 1abf4b7fa2bb62a78f09ddab04625dca\nmsg = 8ae08938929c\nresult = acceptable\n\n# tcId = 18\n# wrapping small key\nct = 1db7510a55591a455d9f8167e6db3c88\nkey = 1abf4b7fa2bb62a78f09ddab04625dca\nmsg = 7c8dfbb68d72af\nresult = acceptable\n\n# tcId = 19\n# wrapping small key\nct = 936fe58b629ea6ec158145218f2361c7\nkey = 1abf4b7fa2bb62a78f09ddab04625dca\nmsg = 536f8f83b64771c1\nresult = acceptable\n\n# tcId = 20\n# wrapping small key\nct = 6787816804b3127d0ca4073f1dba5c4d3db1ec9c227e6556\nkey = 1abf4b7fa2bb62a78f09ddab04625dca\nmsg = 8571f282b18b64ec5e\nresult = acceptable\n\n# tcId = 21\n# wrapping small key\nct = 34131c3bfcc48af15eea8672e52927b462f81d5ba0e6260f\nkey = 1abf4b7fa2bb62a78f09ddab04625dca\nmsg = 8ada889862813e364c4d\nresult = acceptable\n\n# tcId = 22\n# wrapping small key\nct = 4d1ec9287cd4dd378b9aefee79d4ed35bcb98ad9fa9fe529\nkey = 1abf4b7fa2bb62a78f09ddab04625dca\nmsg = f9c56e8058758a5c7c2baa\nresult = acceptable\n\n# tcId = 23\n# wrapping small key\nct = 7209f5b6bd5d4916f4995d280e9aa89edd5e96e3c9283ad2\nkey = 1abf4b7fa2bb62a78f09ddab04625dca\nmsg = 7c7dbc83fa62206a521ed4ad\nresult = acceptable\n\n# tcId = 24\n# wrapping small key\nct = d85a1efc6ab3a40948f723d9810a5deb019b3ce0208a0d94\nkey = 1abf4b7fa2bb62a78f09ddab04625dca\nmsg = a6614daf00df6d14f50388bad5\nresult = acceptable\n\n# tcId = 25\n# wrapping small key\nct = 43509b5df3688b6e44c1a994592f4c03da34712f886e63d5\nkey = 1abf4b7fa2bb62a78f09ddab04625dca\nmsg = 450580a47d7008321496bfb82f48\nresult = acceptable\n\n# tcId = 26\n# wrapping small key\nct = 16e369351c40f220d3fb1197f35da652a3a40ca3b1e99bfb\nkey = 1abf4b7fa2bb62a78f09ddab04625dca\nmsg = 9efd21e13855eea8907afdcd8935f4\nresult = acceptable\n\n# tcId = 27\n# Modified IV\nct = 82af032f5389caa503147d2825336eab84816fb6f8ae6df4\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1\nmsg = a828cbda9b5ff0ae37\nresult = invalid\n\n# tcId = 28\n# Modified IV\nct = 4e00a9eeef87eb6d7be4ec46204d94006c216d5177d2a83c\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1\nmsg = a828cbda9b5ff0ae37\nresult = invalid\n\n# tcId = 29\n# Modified IV\nct = d3dc6c3b4707a08039d621879caf419b9895482fff7bdcd0\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1\nmsg = a828cbda9b5ff0ae37\nresult = invalid\n\n# tcId = 30\n# Modified IV\nct = 09d3bfc3c9c5af2b2951b06406f7ea4d84e9c37402637e2c\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1\nmsg = a828cbda9b5ff0ae37\nresult = invalid\n\n# tcId = 31\n# Modified IV\nct = 3396679a4d87caf7ce7eb4707ba1c6526728f5a973191713\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1\nmsg = a828cbda9b5ff0ae37\nresult = invalid\n\n# tcId = 32\n# Modified IV\nct = ec637d90d945e92929c1c873d9aa9c47bc7b172237319d15\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1\nmsg = a828cbda9b5ff0ae37\nresult = invalid\n\n# tcId = 33\n# Modified IV\nct = 748f373d48d8590e2216b294b9ef94860dbb6b0b0ab625c5\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1\nmsg = a828cbda9b5ff0ae37\nresult = invalid\n\n# tcId = 34\n# Modified IV\nct = 61d7c584197f257caf2583e444896f1d3ba12509b1ef725b\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1\nmsg = a828cbda9b5ff0ae37\nresult = invalid\n\n# tcId = 35\n# Modified IV\nct = 7f8cda973fe58b484b120fc710b520c5636057629795f89a\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1\nmsg = a828cbda9b5ff0ae374f84fa01d070\nresult = invalid\n\n# tcId = 36\n# Modified IV\nct = ccea198029edb9d848d6ca76667b666b1dbebd1e4b1faa8d\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1\nmsg = a828cbda9b5ff0ae374f84fa01d070\nresult = invalid\n\n# tcId = 37\n# Modified IV\nct = ee08cb9d20a98b88b2d8f0e39acf34219d105dc14afbe364\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1\nm",
-    "sg = a828cbda9b5ff0ae374f84fa01d070\nresult = invalid\n\n# tcId = 38\n# Modified IV\nct = 6782992bf8cff068cf41341dd2ca04adedea92e846f74411\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1\nmsg = a828cbda9b5ff0ae374f84fa01d070\nresult = invalid\n\n# tcId = 39\n# Modified IV\nct = 7ed35d0c08042dd56bb5df78056ecd21b8c797d36f57aaec\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1\nmsg = a828cbda9b5ff0ae374f84fa01d070\nresult = invalid\n\n# tcId = 40\n# Modified IV\nct = 37e3b4cefee648766a8efe73d6af12812eded603ab7141bb\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1\nmsg = a828cbda9b5ff0ae374f84fa01d070\nresult = invalid\n\n# tcId = 41\n# Modified IV\nct = fe73777d8992e07eef0d053ad5ec0bf8243fc7e0bc2b405b\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1\nmsg = a828cbda9b5ff0ae374f84fa01d070\nresult = invalid\n\n# tcId = 42\n# Modified IV\nct = 39292c91b6b826d47d502043c3ba4f41e2ce32960a0291b5\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1\nmsg = a828cbda9b5ff0ae374f84fa01d070\nresult = invalid\n\n# tcId = 43\n# Modified IV\nct = 36ef8fc13d0f1f5745e3939877b62b8ecba2f5f0b19f9e90\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1\nmsg = a828cbda9b5ff0ae374f84fa01d070a5\nresult = invalid\n\n# tcId = 44\n# Modified IV\nct = 7255c4eacb4105a68095e9e5b5a4bd8f9623a0da5c6fc230\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1\nmsg = a828cbda9b5ff0ae374f84fa01d070a5\nresult = invalid\n\n# tcId = 45\n# Modified IV\nct = ea26eec89a46ff1a628834c7247a8e4e45d8a8d3229e26cc\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1\nmsg = a828cbda9b5ff0ae374f84fa01d070a5\nresult = invalid\n\n# tcId = 46\n# Modified IV\nct = 508593fa85a8effd27c8a225981978fcec6e992eb488c9c2\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1\nmsg = a828cbda9b5ff0ae374f84fa01d070a5\nresult = invalid\n\n# tcId = 47\n# Modified IV\nct = b8a4cb22f15529864d4ced8e8abae69752a9045a084dfc3f\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1\nmsg = a828cbda9b5ff0ae374f84fa01d070a5\nresult = invalid\n\n# tcId = 48\n# Modified IV\nct = a0a6bf5e47e89706932b1057b680c3c81dc4d9d0b4f9153b\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1\nmsg = a828cbda9b5ff0ae374f84fa01d070a5\nresult = invalid\n\n# tcId = 49\n# Modified IV\nct = 11f3af4ed30e77520517c880f1d0c272a89a968dc697cb5a\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1\nmsg = a828cbda9b5ff0ae374f84fa01d070a5\nresult = invalid\n\n# tcId = 50\n# Modified IV\nct = 6fc912a0bda73bacfa93db4002f18f349fa30f22f7a95ab9\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1\nmsg = a828cbda9b5ff0ae374f84fa01d070a5\nresult = invalid\n\n# tcId = 51\n# RFC 3349 padding\nct = 3731038571c35f7dcc55e48892de353e54c079b89774bbfd\nkey = 48a53c11ef2d727db7eb9a834b134ea9\nmsg = 000102030405060708090a0b0c0d0e0f\nresult = invalid\n\n# tcId = 52\n# Invalid encryption\nct = d85c6bfd092df1aeae5a548e47aa7681\nkey = 48a53c11ef2d727db7eb9a834b134ea9\nmsg = 0001020304050607\nresult = invalid\n\n# tcId = 53\n# padding too long\nct = 7a92427387f5587ee825d1ffa011c40286844ecdadce31cd9678338694ea2682\nkey = 48a53c11ef2d727db7eb9a834b134ea9\nmsg = 000000000000000000000000000000000000000000000000\nresult = invalid\n\n# tcId = 54\n# padding too long\nct = a437d354606ae752894feb62c8def7d17046d8e47f9aed755fba48b3a3009e3ff67d34e26a779064\nkey = 48a53c11ef2d727db7eb9a834b134ea9\nmsg = 0000000000000000000000000000000000000000000000000000000000000000\nresult = invalid\n\n# tcId = 55\n# incorrectly encoded length\nct = e8d240d64f16d1522ae2ded42ced257dfec158ff2fe1467d\nkey = 48a53c11ef2d727db7eb9a834b134ea9\nmsg = 00000000000000000000000000000000\nresult = invalid\n\n# tcId = 56\n# length = 2**32-1\nct = 6d1bfda356b7b954e7aaccc6df953322f75be95947b02b30\nkey = 48a53c11ef2d727db7eb9a834b134ea9\nmsg = 00000000000000000000000000000000\nresult = invalid\n\n# tcId = 57\n# length = 2**32-1\nct = 17dbf878ef4076cfcaba5f81d7b123d7\nkey = 48a53c11ef2d727db7eb9a834b134ea9\nmsg = 0000000000000000\nresult = invalid\n\n# tcId = 58\n# length = 2**31-1\nct = 75c23e253478037802fae0f86af9c78d4e4d9be0c3bff89f\nkey = 48a53c11ef2d727db7eb9a834b134ea9\nmsg = 00000000000000000000000000000000\nresult = invalid\n\n# tcId = 59\n# length = 2**31 + 16\nct = 55717658c6a35e15ee36c66cce91083b63091f51525c0b51\nkey = 48a53c11ef2d727db7eb9a834b134ea9\nmsg = 00000000000000000000000000000000\nresult = invalid\n\n# tcId = 60\n# data is incorrectly padded\nct = 8ede88a52ccb8a6d617456955a9f04c94d87696125ded87eebe3e97e185496d9\nkey = 48a53c11ef2d727db7eb9a834b134ea9\nmsg = ffffffffffffffffffffffffffffffffffffffffffffffff\nresult = invalid\n\n# tcId = 61\n# data is incorrectly padded\nct = 5b4a8f1abffa51676ac8b5ddf9366c12\nkey = 48a53c11ef2d727db7eb9a834b134ea9\nmsg = 0001020304050607\nresult = invalid\n\n# tcId = 62\n# length = 0\nct = 205cc6dd9592da0ebff6b4b48a0c450eeaeb11a60d33f387\nkey = 48a53c11ef2d727db7eb9a834b134ea9\nmsg = 00000000000000000000000000000000\nresult = invalid\n\n# tcId = 63\n# RFC 3349 padding with incorrect size\nct = 908a68b0d2054e199220d37c34a2e136\nkey = 48a53c11ef2d727db7eb9a834b134ea9\nmsg = 0001020304050607\nresult = invalid\n\n# tcId = 64\n# length = 9\nct = f84bdb15045cee3a8a0f3ed2f07c1771\nkey = 48a53c11ef2d727db7eb9a834b134ea9\nmsg = 0000000000000000\nresult = invalid\n\n# tcId = 65\n# length = 16\nct = 7592b1ee6ee92c9467db366adcfa65bb\nkey = 48a53c11ef2d727db7eb9a834b134ea9\nmsg = 0000000000000000\nresult = invalid\n\n# tcId = 66\n# length = 2**31 + 8\nct = db93a1db3b5babc80a304d527682c1ef\nkey = 48a53c11ef2d727db7eb9a834b134ea9\nmsg = 0000000000000000\nresult = invalid\n\n[keySize = 192]\n\n# tcId = 67\nct = 5c117a678223cfe5ee691503061e7ab1e5f720e005171b32\nkey = f75a2f49a630c7dc91626b00ce029f0bd2981d7c74a93ebe\nmsg = 9adbc00c710b1101bdf6a4ed65b32d72\nresult = valid\n\n# tcId = 68\nct = 6a7f9e03b6f379c56da3a56d8f32eba515454a91fd417449\nkey = b713f6b7814f98894d7b153974684359f1460213eb74be68\nmsg = 78585f0c49922e82caf17ebc3721b4db\nresult = valid\n\n# tcId = 69\nct = 764097f5ee8236bc0d93bbcea139a652f4b211cc33a61ac9\nkey = 13ecf423211caa334ba6db37259a535c20de8ad10fc8c432\nmsg = 4fc75d0f221e22408a37e11265d49a05\nresult = valid\n\n# tcId = 70\nct = 04b83ec803a75bbcb2f87fc6f488a4ccc1827b412483070eed195b6f0048ccbe\nkey = 4417fbbea51bdd91818d74051957dd70e135c5cf3732bdf1\nmsg = f5357da9f8fd4a1190f36e9fa09a90fcf14d87d62332f1a5\nresult = valid\n\n# tcId = 71\nct = 46ab71f032cb1ccbcc7447a5183574268c0167a26a93fe8422bf284417aa93ea\nkey = b3f26d8a22fdd61f709841231fbde695b3f28dddced6d41e\nmsg = 0d0af955d2e3829cc3d643219b301e64e0510dfbc428119a\nresult = valid\n\n# tcId = 72\nct = 47ca298ee47b1b755a499129347e11e7a25754ccb6c2689e8eff270e98c81d18\nkey = f70cfb262c729a18206c8afd74356ec7e049d10b44a6e000\nmsg = 241cedfa64c4e7bec541a2eb4c368269e0f0ddebc58267ea\nresult = valid\n\n# tcId = 73\n# wrapped key is longer than wrapping key\nct = ecac4c91758e1ae7bb010c34f4c5f99a3d728b9fa92cb778d3fe80d777a20d3de85ef46e7a0c6a6a\nkey = 1639f9f81e53e2eeb677a249e5eced3af108971301601a7b\nmsg = ec3c6a1f1a9585327fe658490c74635e5300876da5846a629398984fb551d691\nresult = acceptable\n\n# tcId = 74\n# wrapped key is longer than wrapping key\nct = 39b7326a44eaed08bffbd4aeaf3e2c3f899c1fd049384ed7b3eb92b788c6449acd6385f0bb18cf28\nkey = 1f22d5658aa685b8ba8659dc342880d5b2399e6a815005b0\nmsg = 50be4c1b2f29a63f44d7fc63737f600f0194ea3fb36e173d2ddd19f218656380\nresult = acceptable\n\n# tcId = 75\n# wrapped key is longer than wrapping key\nct = 3d2e9f39c7b13e9585227c4344fbe596f92b002456616f137deacc6a8c941649ce294bb2695c1807\nkey = 3a2f4aa50441954bba5a1836294ce071f9296b23dbed6771\nmsg = 65da02ff21b483a1e39575490b4319e84ae0299f1f00b3859fbe2e74b3ec2aaf\nresult = acceptable\n\n# tcId = 76\n# Round counter overflows 256\nct = d6aacfb52c26baae78c2f54259a4e4168f817064344e2ba8fbfa7fae9f1fd69bd5bc5c1e20a6101b4a7119cbce028e25a9e93d29ee260c4e609baedee788411c2afe60218ce1b0d28b9c29b941251fdcbac3009d59040a0337b8b4a3a020c6d8f310cba63db046d8f36b64c9092e75cee463fc7692ef56bed395c4579da0ecb02129e45ad8a7f116aac6170204888e40693f017a6a0a7dd3962004e60db3a9b6c8b7614a467ccb799bce1ba83f5c0921f1e52bb3909bc0486ec0eaea736498f3ba520a519c3ddf491307958620b737613417b15b438b80b43189baa455031f5771502002ea170c767b33d247feebce62e606f2262537f85f18d1951cc75cedef291c6a501cb1778586249b58156eb8d7283a3f508ee8bcc1206d77bbd6892fe74b865bfc02a8f07223087a6c1e50a41b7cf5f6ee04bd07766b2e5b34c4a7666b0ce06f670e6434a59fb74e0df36c91d94e5e8b721e53e09b6f6504c5d515492a373fcc348a63122cc6e4716e0e1a543d038c6f7731199f691780a8a655cca6718e3dc56e815b3669\nkey = b6121acad51038e11873aaa7e6c7be06f93826b74fec0ea1\nmsg = 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
-    "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\nresult = acceptable\n\n# tcId = 77\n# wrapping small key\nct = a65959a600000000\nkey = 1abf4b7fa2bb62a78f09ddab04625dcacdd9e551d1a69b6b\nmsg = \nresult = acceptable\n\n# tcId = 78\n# wrapping small key\nct = 52c7f388d0d4237afaa29f2b94723475\nkey = 1abf4b7fa2bb62a78f09ddab04625dcacdd9e551d1a69b6b\nmsg = a3\nresult = acceptable\n\n# tcId = 79\n# wrapping small key\nct = 833431ce8799be69b36aafe3f38d9dac\nkey = 1abf4b7fa2bb62a78f09ddab04625dcacdd9e551d1a69b6b\nmsg = 594b\nresult = acceptable\n\n# tcId = 80\n# wrapping small key\nct = 31674f46b989f6ead582c70dedc8c6b9\nkey = 1abf4b7fa2bb62a78f09ddab04625dcacdd9e551d1a69b6b\nmsg = 72ab34\nresult = acceptable\n\n# tcId = 81\n# wrapping small key\nct = 80535172d2a498aa31601d70fdca9dea\nkey = 1abf4b7fa2bb62a78f09ddab04625dcacdd9e551d1a69b6b\nmsg = d4d9460f\nresult = acceptable\n\n# tcId = 82\n# wrapping small key\nct = 56232300dd7b2a71d2328b6df47af8e3\nkey = 1abf4b7fa2bb62a78f09ddab04625dcacdd9e551d1a69b6b\nmsg = 643972e552\nresult = acceptable\n\n# tcId = 83\n# wrapping small key\nct = e27e08efe39adbbad8d300b87be2c258\nkey = 1abf4b7fa2bb62a78f09ddab04625dcacdd9e551d1a69b6b\nmsg = f3cdb73d2561\nresult = acceptable\n\n# tcId = 84\n# wrapping small key\nct = 8f90942cdab33e58b24a23ad7efb7538\nkey = 1abf4b7fa2bb62a78f09ddab04625dcacdd9e551d1a69b6b\nmsg = 7b0b53b6429e14\nresult = acceptable\n\n# tcId = 85\n# wrapping small key\nct = 0ebaf23c858015d3bda5b8d908db6049\nkey = 1abf4b7fa2bb62a78f09ddab04625dcacdd9e551d1a69b6b\nmsg = 6b2393773e6d1378\nresult = acceptable\n\n# tcId = 86\n# wrapping small key\nct = d56f89977b8eff511158edad6b993007189e5a4b8c0e2faf\nkey = 1abf4b7fa2bb62a78f09ddab04625dcacdd9e551d1a69b6b\nmsg = 2c52d6639e769960e8\nresult = acceptable\n\n# tcId = 87\n# wrapping small key\nct = dd889475a76733849f59bed49a15d4315bdb5ba00dc63470\nkey = 1abf4b7fa2bb62a78f09ddab04625dcacdd9e551d1a69b6b\nmsg = 707c9356216d69c69048\nresult = acceptable\n\n# tcId = 88\n# wrapping small key\nct = 1a9b3369239b0f40a8dc5bd8d965caf7431445799337b99b\nkey = 1abf4b7fa2bb62a78f09ddab04625dcacdd9e551d1a69b6b\nmsg = 615f6fa79e1847e7359a8a\nresult = acceptable\n\n# tcId = 89\n# wrapping small key\nct = 5232f8f6679a17d3303b0bd72b06b56b5089e80372dc295b\nkey = 1abf4b7fa2bb62a78f09ddab04625dcacdd9e551d1a69b6b\nmsg = 7f5e999168ec60624426cbb1\nresult = acceptable\n\n# tcId = 90\n# wrapping small key\nct = e5544361c60980f3d38f2d8820a150f48f49ef3f9184b29f\nkey = 1abf4b7fa2bb62a78f09ddab04625dcacdd9e551d1a69b6b\nmsg = 3f93aaf4463775baf6c0c975ae\nresult = acceptable\n\n# tcId = 91\n# wrapping small key\nct = 55396065905915ec914b8d1efbf471e37d283fc2c1496b49\nkey = 1abf4b7fa2bb62a78f09ddab04625dcacdd9e551d1a69b6b\nmsg = fefcf10c976309b2beb085771e50\nresult = acceptable\n\n# tcId = 92\n# wrapping small key\nct = d90376be302a24c541bd6d96094f0025e3d73888391b4306\nkey = 1abf4b7fa2bb62a78f09ddab04625dcacdd9e551d1a69b6b\nmsg = 6854354d0099f7eff740b0587140b3\nresult = acceptable\n\n# tcId = 93\n# Modified IV\nct = eee27510be39cc88379459420f3773642a423ac1ff0cfb84\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4\nmsg = a828cbda9b5ff0ae37\nresult = invalid\n\n# tcId = 94\n# Modified IV\nct = 765df3fa1aca6f13268ba79f8659807049a313a0308b643e\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4\nmsg = a828cbda9b5ff0ae37\nresult = invalid\n\n# tcId = 95\n# Modified IV\nct = 71346c17a2718cb7c357e3af2b2d0c3e29b7e02317926746\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4\nmsg = a828cbda9b5ff0ae37\nresult = invalid\n\n# tcId = 96\n# Modified IV\nct = 55fd49ba081fdf72896068c5a968e2b3c4a473786a2e12c2\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4\nmsg = a828cbda9b5ff0ae37\nresult = invalid\n\n# tcId = 97\n# Modified IV\nct = 133c66fcbf0e9d5139eff3fcb494b672d72bb622d7015c4b\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4\nmsg = a828cbda9b5ff0ae37\nresult = invalid\n\n# tcId = 98\n# Modified IV\nct = 8439244f27470e5f1f294cfa22ef5412675d7fbbd92ff016\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4\nmsg = a828cbda9b5ff0ae37\nresult = invalid\n\n# tcId = 99\n# Modified IV\nct = 4265bdb7d8ea30d9a51e5f48b7ac5487e0c95f154ea8baeb\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4\nmsg = a828cbda9b5ff0ae37\nresult = invalid\n\n# tcId = 100\n# Modified IV\nct = 31afcca8ff2b8806408c3460181ee5a96bbaf51d133211be\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4\nmsg = a828cbda9b5ff0ae37\nresult = invalid\n\n# tcId = 101\n# Modified IV\nct = 196f2a6eccb5368fe6a3f2fa0874d8fc9b3b52484e2d6351\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4\nmsg = a828cbda9b5ff0ae374f84fa01d070\nresult = invalid\n\n# tcId = 102\n# Modified IV\nct = 8dc73d363fdb32f6e0ff830c2a48db5815f66d0922694c74\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4\nmsg = a828cbda9b5ff0ae374f84fa01d070\nresult = invalid\n\n# tcId = 103\n# Modified IV\nct = e90022b9da998b4a30c91c1bd1a1f8ca05a52432867e5e78\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4\nmsg = a828cbda9b5ff0ae374f84fa01d070\nresult = invalid\n\n# tcId = 104\n# Modified IV\nct = c9898a1b70bd718df45f1f3eca82eab1eaddb8ed7f2380dc\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4\nmsg = a828cbda9b5ff0ae374f84fa01d070\nresult = invalid\n\n# tcId = 105\n# Modified IV\nct = cc3f2cd6476eddbbfdc801b61174301688554f3db54c2903\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4\nmsg = a828cbda9b5ff0ae374f84fa01d070\nresult = invalid\n\n# tcId = 106\n# Modified IV\nct = 23e15705e7b00d82bd052f0e0135ab7ac0dcce471ff2f1a7\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4\nmsg = a828cbda9b5ff0ae374f84fa01d070\nresult = invalid\n\n# tcId = 107\n# Modified IV\nct = b8e2862c0f9eae4f44ad99496e3ed62b3b9c4ce7ab5afb74\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4\nmsg = a828cbda9b5ff0ae374f84fa01d070\nresult = invalid\n\n# tcId = 108\n# Modified IV\nct = 66d8a7769d81421efda456992f6c26cb17665fe080b0160e\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4\nmsg = a828cbda9b5ff0ae374f84fa01d070\nresult = invalid\n\n# tcId = 109\n# Modified IV\nct = a6a28bceb91551a395369ff09370658cc92b092855f417aa\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4\nmsg = a828cbda9b5ff0ae374f84fa01d070a5\nresult = invalid\n\n# tcId = 110\n# Modified IV\nct = 03ff601cf12b432078a2185590fb5d01e3441cf084bcb04a\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4\nmsg = a828cbda9b5ff0ae374f84fa01d070a5\nresult = invalid\n\n# tcId = 111\n# Modified IV\nct = e250d358d16d9fd20ad80a99656509229dca391aad3798f0\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4\nmsg = a828cbda9b5ff0ae374f84fa01d070a5\nresult = invalid\n\n# tcId = 112\n# Modified IV\nct = 643a17860b116ec74089bc574685a6328a3d7a07cd18b520\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4\nmsg = a828cbda9b5ff0ae374f84fa01d070a5\nresult = invalid\n\n# tcId = 113\n# Modified IV\nct = 3e86e8128904f753c0f3fe3401ba36672966567725c4726c\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4\nmsg = a828cbda9b5ff0ae374f84fa01d070a5\nresult = invalid\n\n# tcId = 114\n# Modified IV\nct = d4b8cc849176b8344b0849490143d3512915171bd7d5759e\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4\nmsg = a828cbda9b5ff0ae374f84fa01d070a5\nresult = invalid\n\n# tcId = 115\n# Modified IV\nct = f84e0e6ff64e0b27b8b59b5b77c223023f0fea95433864ec\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4\nmsg = a828cbda9b5ff0ae374f84fa01d070a5\nresult = invalid\n\n# tcId = 116\n# Modified IV\nct = 4030b4b0e9c1b1ce8e52f6bdb48088e65b05844307989c8b\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4\nmsg = a828cbda9b5ff0ae374f84fa01d070a5\nresult = invalid\n\n# tcId = 117\n# Modified IV\nct = ccb3b36c26b2d901b7f0765362d992b2d5089c2a7559b195becbe173780352fa\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4\nmsg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462b",
-    "e4f1\nresult = invalid\n\n# tcId = 118\n# Modified IV\nct = 4e5fc8dccaeec9b1c8a606a2bd7d7201eede62b9c2e939a5aba663a6a040e361\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4\nmsg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1\nresult = invalid\n\n# tcId = 119\n# Modified IV\nct = af21f5e7f15a63c8ea6001cf024f281e7f44aedd68954564fc2bd146e96d793a\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4\nmsg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1\nresult = invalid\n\n# tcId = 120\n# Modified IV\nct = 3a4f571ffbf761d3f7d413172ee1e4ae2862baacfd5ab66dc685b9af8b70b538\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4\nmsg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1\nresult = invalid\n\n# tcId = 121\n# Modified IV\nct = 273de386d5fef497f9487afd54c1c0fae8aacabf2af465caf352e2300d29266b\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4\nmsg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1\nresult = invalid\n\n# tcId = 122\n# Modified IV\nct = 16511743dc44199cee1dbf5045141b075f01ee13326c9faf2c74b7c99791830f\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4\nmsg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1\nresult = invalid\n\n# tcId = 123\n# Modified IV\nct = 370f92db00f7fc8a0e654318a5b3ff89a604034f421339201d79e0ec4d6088de\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4\nmsg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1\nresult = invalid\n\n# tcId = 124\n# Modified IV\nct = e3edd0e84832f3615f6deefb444de3b9ec527741686029db91de0bb9b2a5c05d\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4\nmsg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1\nresult = invalid\n\n# tcId = 125\n# RFC 3349 padding\nct = 36ee480138edf11e144efcddd24d2c121749da6e4eab17fe\nkey = 48a53c11ef2d727db7eb9a834b134ea9602273aca929702e\nmsg = 000102030405060708090a0b0c0d0e0f\nresult = invalid\n\n# tcId = 126\n# Invalid encryption\nct = 166beb49e97a4a9cc7b0ccf441ec15b5\nkey = 48a53c11ef2d727db7eb9a834b134ea9602273aca929702e\nmsg = 0001020304050607\nresult = invalid\n\n# tcId = 127\n# padding too long\nct = 74ff3070a0a08471c001febb95a890f35159a9fe263719e40c2332ce5c58fada\nkey = 48a53c11ef2d727db7eb9a834b134ea9602273aca929702e\nmsg = 000000000000000000000000000000000000000000000000\nresult = invalid\n\n# tcId = 128\n# padding too long\nct = 4f0b38eb328d1227b1e17c103a44a373ff67cee953c59eea26117947b5d3ef8932c8858b4f9fb47c\nkey = 48a53c11ef2d727db7eb9a834b134ea9602273aca929702e\nmsg = 0000000000000000000000000000000000000000000000000000000000000000\nresult = invalid\n\n# tcId = 129\n# incorrectly encoded length\nct = 775dcabab9e4be8fd9963a4dc7a1447ef82888403882bdb6\nkey = 48a53c11ef2d727db7eb9a834b134ea9602273aca929702e\nmsg = 00000000000000000000000000000000\nresult = invalid\n\n# tcId = 130\n# length = 2**32-1\nct = 669803237fa10eabb4d2c6ad85bd9f7df5f4a33340eb0ce9\nkey = 48a53c11ef2d727db7eb9a834b134ea9602273aca929702e\nmsg = 00000000000000000000000000000000\nresult = invalid\n\n# tcId = 131\n# length = 2**32-1\nct = c788504d786f5c21b6671bf190657301\nkey = 48a53c11ef2d727db7eb9a834b134ea9602273aca929702e\nmsg = 0000000000000000\nresult = invalid\n\n# tcId = 132\n# length = 2**31-1\nct = d079f60d3258f5e695d1a73db008ef38516b713eca2c0eaf\nkey = 48a53c11ef2d727db7eb9a834b134ea9602273aca929702e\nmsg = 00000000000000000000000000000000\nresult = invalid\n\n# tcId = 133\n# length = 2**31 + 16\nct = f1ae4b8865013b0fc63b463e664cec3c6031f61f2de82f43\nkey = 48a53c11ef2d727db7eb9a834b134ea9602273aca929702e\nmsg = 00000000000000000000000000000000\nresult = invalid\n\n# tcId = 134\n# data is incorrectly padded\nct = 8874e1b6e15e3ef6c461411a5f5ad0c8b05368cd5b3ee39b2b413d18a4eebfc9\nkey = 48a53c11ef2d727db7eb9a834b134ea9602273aca929702e\nmsg = ffffffffffffffffffffffffffffffffffffffffffffffff\nresult = invalid\n\n# tcId = 135\n# data is incorrectly padded\nct = 890a3dab8439bb73b14c6e99c34f0b0e\nkey = 48a53c11ef2d727db7eb9a834b134ea9602273aca929702e\nmsg = 0001020304050607\nresult = invalid\n\n# tcId = 136\n# length = 0\nct = d4f633aedeb89e349a98738b00ee42c90d583b16e986e49f\nkey = 48a53c11ef2d727db7eb9a834b134ea9602273aca929702e\nmsg = 00000000000000000000000000000000\nresult = invalid\n\n# tcId = 137\n# RFC 3349 padding with incorrect size\nct = b8b2a5b1d3280dcb4daeeed43f36509b\nkey = 48a53c11ef2d727db7eb9a834b134ea9602273aca929702e\nmsg = 0001020304050607\nresult = invalid\n\n# tcId = 138\n# length = 9\nct = 4429cf64251d8a54a9d1389c01c30900\nkey = 48a53c11ef2d727db7eb9a834b134ea9602273aca929702e\nmsg = 0000000000000000\nresult = invalid\n\n# tcId = 139\n# length = 16\nct = e5634eca10372c867c7f91ee813ec3f3\nkey = 48a53c11ef2d727db7eb9a834b134ea9602273aca929702e\nmsg = 0000000000000000\nresult = invalid\n\n# tcId = 140\n# length = 2**31 + 8\nct = 9e517d4d0142e1544ba1e7419a696c21\nkey = 48a53c11ef2d727db7eb9a834b134ea9602273aca929702e\nmsg = 0000000000000000\nresult = invalid\n\n# tcId = 141\n# RFC 3394\nct = 138bdeaa9b8fa7fc61f97742e72248ee5ae6ae5360d1ae6a5f54f373fa543b6a\nkey = 5840df6e29b02af1ab493b705bf16ea1ae8338f4dcc176a8\nmsg = c37b7e6492584340bed12207808941155068f738\nresult = valid\n\n# tcId = 142\n# RFC 3394\nct = afbeb0f07dfbf5419200f2ccb50bb24f\nkey = 5840df6e29b02af1ab493b705bf16ea1ae8338f4dcc176a8\nmsg = 466f7250617369\nresult = valid\n\n[keySize = 256]\n\n# tcId = 143\nct = e3eab96d9a2fda12f9e252053aff15e753e5ea6f5172c92b\nkey = fce0429c610658ef8e7cfb0154c51de2239a8a317f5af5b6714f985fb5c4d75c\nmsg = 287326b5ed0078e7ca0164d748f667e7\nresult = valid\n\n# tcId = 144\nct = 9d2b42fb2fdb92c89fb0c3bcd9e1600d3334b4e35e791369\nkey = 0dda6da5123e2c37c6fa16ba0d334cd01acd652f8994211751dfab4faac2fc22\nmsg = b40b6828729b456322a8d065abc0d081\nresult = valid\n\n# tcId = 145\nct = 5291e05abd55f5886850855e3f9f2f576b101acc222d6766\nkey = d6925914cd06308f81ad91e23073593d99d4e50351b20eb2a8d1a1ac4ced6588\nmsg = 037b27b3dc95b19d15bd4091e320bfe1\nresult = valid\n\n# tcId = 146\nct = 4b1220525c537aec30ebcd562b694b4e9e2ccd819de22ef608b5d8090779d9de\nkey = 07518a82cbc8da1dcec55f3763a206d277487abd03cedd0b8bef9ee2fb157121\nmsg = faa4664d79fce3c7d2fdd462f6c1c423c2f8e6b69be2e071\nresult = valid\n\n# tcId = 147\nct = 67b2cbd68f6a208d647bdc5af7d0bccf6711a9e8fd0d9434363006addd4b9696\nkey = ea46991d4e71f53dd624e7fe7fde11944a7c5942d232369b8065d42b8cd2dde1\nmsg = dffc5cf1dd5411d015d84601fa38df5effe885c7f26a4825\nresult = valid\n\n# tcId = 148\nct = cfdbbd95f187508a488fe017c5e5d5a5975b68441d520e0e931922388e28784c\nkey = fdcfa902c6f222f527af84da533b14b52e2615da3a89d1d35708b0cd49f60d87\nmsg = 966b07047354966a703e79607b556032f4f596b7f9206f05\nresult = valid\n\n# tcId = 149\nct = b63b7e0fec7e315816233db6758fd3e744b9f6a40862bdf866487e53bcb950d8b2649269e51b4475\nkey = 38e1b1d075d9d852b9a6c01c8ff6965af01bac457a4e339ae3e1d7b2ffacc0cd\nmsg = 80ad6820f1c90981e2ca42b817a345c1179d0a11d8e23a8adc0505e13d87295a\nresult = valid\n\n# tcId = 150\nct = 837cfc316b49299edaf427e0988020ee876204b29d847669daab72c8660b0d860e9de3bd851198ff\nkey = c641f1689d81caa8ba37d895272240664054ed974cfffc40e6c5c0cad1b916c7\nmsg = 3fd0ba19955e46749f54d88e99d080b7339d588fe612ec0f4021ca3ca2104270\nresult = valid\n\n# tcId = 151\nct = 0e9e2e9aa34bbf973d67bc534ac86fc5b5a5f9da5f026866177894ec6077a5c84501510e1bf4afb3\nkey = aa0ab9d68ed4a04e723f81b44c0c88d0bcde7a80cfd476eb4b8836d9aa01ec4c\nmsg = 57faa8766f6d6a0aa1cf643f857c150df5b31303b50af480e21c4b5e8c8a15d5\nresult = valid\n\n# tcId = 152\n# Round counter overflows 256\nct = 1c6b7e4003384f071bf29baea9098ad81da8e9862909329f52793b35d592c10dba15aa89400ea6403df8dcaffd0dbf5606303f109f79ad700ed5d5ad4e59950ce9ce5296c9d186a0df441973d1835f9ac000ad1a6797875c3a03161e9e3f5ea464032e407854eadca5a9e7a386bb0d29253e3804adefd8c0402cc8c40ac7f9041429cc0bb77a405b284baa2dae764ea09c654c0a82f2c5724221ba44e341503d3103dbc393c7702182f8cc2762ddbc873b7f84197709886a4b5df5b04ff9d21b79b50904af3c32128dfb9cde94fe1254d981e6ce3acfda82db1fa2badbccd2d29052a04a69ce1f5652f30496ea57edc7e3e885dd4a35ca15aba602bb4c888a8064da94c2ac5c12c11f608810af46fbb49c3e8f8771ff661f8d8dccd163d0c4a401b8b9aa74e68a56011cf78d21dc7541a974f9dad5ae27f8a26d1b0e76be2f86c6a21e9d1c2b5df3c8878a8bcae143b3af1f082afc52616eeadd2232926597b245d394931e02e493b0bc27a92d013e111694cac2c5a2a46e008a8498b5c31bb5ec35a4e9957e365d\nkey = b6121acad51038e11873aaa7e6c7be06f93826b74fec0ea1c02f9981ed49d16a\nmsg = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
-    "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\nresult = acceptable\n\n# tcId = 153\n# wrapping small key\nct = a65959a600000000\nkey = 1abf4b7fa2bb62a78f09ddab04625dcacdd9e551d1a69b6b162baa53d2700093\nmsg = \nresult = acceptable\n\n# tcId = 154\n# wrapping small key\nct = 06c1e65ac0f385b4e8c400d229f39422\nkey = 1abf4b7fa2bb62a78f09ddab04625dcacdd9e551d1a69b6b162baa53d2700093\nmsg = ae\nresult = acceptable\n\n# tcId = 155\n# wrapping small key\nct = c98da5936a1313eba1a6773b8060ea5e\nkey = 1abf4b7fa2bb62a78f09ddab04625dcacdd9e551d1a69b6b162baa53d2700093\nmsg = c548\nresult = acceptable\n\n# tcId = 156\n# wrapping small key\nct = b2a77d9b837e87cdb7391e1df7cdaf14\nkey = 1abf4b7fa2bb62a78f09ddab04625dcacdd9e551d1a69b6b162baa53d2700093\nmsg = f713b9\nresult = acceptable\n\n# tcId = 157\n# wrapping small key\nct = d8ecf20191f75aa36686298bfa5022ab\nkey = 1abf4b7fa2bb62a78f09ddab04625dcacdd9e551d1a69b6b162baa53d2700093\nmsg = f375cbf7\nresult = acceptable\n\n# tcId = 158\n# wrapping small key\nct = 077362f50356fc7c54c70f9cb4306f7d\nkey = 1abf4b7fa2bb62a78f09ddab04625dcacdd9e551d1a69b6b162baa53d2700093\nmsg = d9445094b1\nresult = acceptable\n\n# tcId = 159\n# wrapping small key\nct = a4bd6a116ad88a52aae3f0c0cb893f9b\nkey = 1abf4b7fa2bb62a78f09ddab04625dcacdd9e551d1a69b6b162baa53d2700093\nmsg = fab43e91ae15\nresult = acceptable\n\n# tcId = 160\n# wrapping small key\nct = 68a52de00ec0f1ebbedc38fee6be0c23\nkey = 1abf4b7fa2bb62a78f09ddab04625dcacdd9e551d1a69b6b162baa53d2700093\nmsg = 90735025797bd2\nresult = acceptable\n\n# tcId = 161\n# wrapping small key\nct = 3a6746052a1744cfe7e2f36dafc4042d\nkey = 1abf4b7fa2bb62a78f09ddab04625dcacdd9e551d1a69b6b162baa53d2700093\nmsg = e43f5e4e123a03c4\nresult = acceptable\n\n# tcId = 162\n# wrapping small key\nct = db7e73da22219e1baac0f4e955c3db2b900b5d3078f94b59\nkey = 1abf4b7fa2bb62a78f09ddab04625dcacdd9e551d1a69b6b162baa53d2700093\nmsg = 1723eb9d000916996a\nresult = acceptable\n\n# tcId = 163\n# wrapping small key\nct = f77ec14a010777f1f1071808f285c1c00b4e9420f0e8bf48\nkey = 1abf4b7fa2bb62a78f09ddab04625dcacdd9e551d1a69b6b162baa53d2700093\nmsg = 8b18daecde14b8472ffd\nresult = acceptable\n\n# tcId = 164\n# wrapping small key\nct = 6b40d4f0863581a7d0365ad477568bfad94f8bf134984838\nkey = 1abf4b7fa2bb62a78f09ddab04625dcacdd9e551d1a69b6b162baa53d2700093\nmsg = e5bd6fbacbf3ef0d40c884\nresult = acceptable\n\n# tcId = 165\n# wrapping small key\nct = 660f645b02405a18f7225b68c0a09a949b2b5ba784922cfe\nkey = 1abf4b7fa2bb62a78f09ddab04625dcacdd9e551d1a69b6b162baa53d2700093\nmsg = b3be5e5397df5f46b099e821\nresult = acceptable\n\n# tcId = 166\n# wrapping small key\nct = 6bea6bf57601bf063873f47ec3572cfb9cfb595d8bdb5e97\nkey = 1abf4b7fa2bb62a78f09ddab04625dcacdd9e551d1a69b6b162baa53d2700093\nmsg = 4cdd960cabcf8aaf69c37da1d3\nresult = acceptable\n\n# tcId = 167\n# wrapping small key\nct = b631292536aaf02d829cc6d3c39e5a5cd76240889e9d51d0\nkey = 1abf4b7fa2bb62a78f09ddab04625dcacdd9e551d1a69b6b162baa53d2700093\nmsg = da29e0889cf98742612e0326300b\nresult = acceptable\n\n# tcId = 168\n# wrapping small key\nct = de497acf18a177a3a9b3d8da46d74dfa58dcc537a3a95323\nkey = 1abf4b7fa2bb62a78f09ddab04625dcacdd9e551d1a69b6b162baa53d2700093\nmsg = 72aaee126a822184806c7d22eed66b\nresult = acceptable\n\n# tcId = 169\n# Modified IV\nct = aef4d2357a8fc5c3b4a80a15ed49781d3a82c98eb78c9180\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7\nmsg = a828cbda9b5ff0ae37\nresult = invalid\n\n# tcId = 170\n# Modified IV\nct = 6eaefd5193f0725fea545077a430860663901979f0b6f4a3\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7\nmsg = a828cbda9b5ff0ae37\nresult = invalid\n\n# tcId = 171\n# Modified IV\nct = f9ded536c1ae9c680f7d9c4b91a566a07b1628e9b9f4fccd\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7\nmsg = a828cbda9b5ff0ae37\nresult = invalid\n\n# tcId = 172\n# Modified IV\nct = 443526477c779a329ded0b230307afa64fdc10dfc86414dd\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7\nmsg = a828cbda9b5ff0ae37\nresult = invalid\n\n# tcId = 173\n# Modified IV\nct = 21ba79f3b423a66e7baad86fe49786e07a33dfdf227687e9\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7\nmsg = a828cbda9b5ff0ae37\nresult = invalid\n\n# tcId = 174\n# Modified IV\nct = 3e65dbacaae556fa18bd192035cd55958adeac30e5ca7b3b\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7\nmsg = a828cbda9b5ff0ae37\nresult = invalid\n\n# tcId = 175\n# Modified IV\nct = de2054883b00f81ff68e42b7ff1c05ef5faaf75b2bb14004\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7\nmsg = a828cbda9b5ff0ae37\nresult = invalid\n\n# tcId = 176\n# Modified IV\nct = 2aa3c6ba891d1211677d59f886cc6d05698243d10dc189f7\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7\nmsg = a828cbda9b5ff0ae37\nresult = invalid\n\n# tcId = 177\n# Modified IV\nct = 9b1e7d6caf42bb3a15530f2387ed7329310ba76e1852566a\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7\nmsg = a828cbda9b5ff0ae374f84fa01d070\nresult = invalid\n\n# tcId = 178\n# Modified IV\nct = daf6a9f5e4b4985fcd4815bf6298a3039bcb32327b0876ff\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7\nmsg = a828cbda9b5ff0ae374f84fa01d070\nresult = invalid\n\n# tcId = 179\n# Modified IV\nct = 14c4079399721142fd5fce26e9417064c7e0201fb7b5255c\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7\nmsg = a828cbda9b5ff0ae374f84fa01d070\nresult = invalid\n\n# tcId = 180\n# Modified IV\nct = f48a30b8691a2a80dd79c355c281addf779bfed8971e3ce4\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7\nmsg = a828cbda9b5ff0ae374f84fa01d070\nresult = invalid\n\n# tcId = 181\n# Modified IV\nct = 248f867430ffc954b494c936a3ef815b1754009928aaf0c4\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7\nmsg = a828cbda9b5ff0ae374f84fa01d070\nresult = invalid\n\n# tcId = 182\n# Modified IV\nct = dcaa88dad9b03e59a3ac8350239824368004e2ca616c15d7\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7\nmsg = a828cbda9b5ff0ae374f84fa01d070\nresult = invalid\n\n# tcId = 183\n# Modified IV\nct = a6cc8470192687ec9a31258ddb73084005784475f3442705\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7\nmsg = a828cbda9b5ff0ae374f84fa01d070\nresult = invalid\n\n# tcId = 184\n# Modified IV\nct = 0527ab5408b4f1484b27f98641511143ab88783688256815\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7\nmsg = a828cbda9b5ff0ae374f84fa01d070\nresult = invalid\n\n# tcId = 185\n# Modified IV\nct = 7fd3ad3aee0545da1ed3a54d5a198a2c76cf8290c011c042\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7\nmsg = a828cbda9b5ff0ae374f84fa01d070a5\nresult = invalid\n\n# tcId = 186\n# Modified IV\nct = a24e94c12b2e6b776c8febe9179521beae0cfbd507d358b4\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7\nmsg = a828cbda9b5ff0ae374f84fa01d070a5\nresult = invalid\n\n# tcId = 187\n# Modified IV\nct = 9395b071fa3d9908b2e1b349bf7cd6a1cfc86b979c8c73cd\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7\nmsg = a828cbda9b5ff0ae374f84fa01d070a5\nresult = invalid\n\n# tcId = 188\n# Modified IV\nct = 1eb452770bc0f26a3576b604bf5ac72f714fc468c357eba7\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7\nmsg = a828cbda9b5ff0ae374f84fa01d070a5\nresult = invalid\n\n# tcId = 189\n# Modified IV\nct = b42bcb4161f40b30f3d2f740f43e441d3c9a39613914f1c6\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7\nmsg = a828cbda9b5ff0ae374f84fa01d070a5\nresult = invalid\n\n# tcId = 190\n# Modified IV\nct = f3d76dd320e5f1b3f85b8f73a9ebcfabfb8346daafaf36e6\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7\nmsg = a828cbda9b5ff0ae374f84fa01d070a5\nresult = invalid\n\n# tcId = 191\n# Modified ",
-    "IV\nct = b8e26164496942f44f16751096fb47952ec478bb288e72a1\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7\nmsg = a828cbda9b5ff0ae374f84fa01d070a5\nresult = invalid\n\n# tcId = 192\n# Modified IV\nct = fa783b3aca0ec1e677378f23ebe937776fa590ecc6b01392\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7\nmsg = a828cbda9b5ff0ae374f84fa01d070a5\nresult = invalid\n\n# tcId = 193\n# Modified IV\nct = 8b011408049eab81cc185796b9636982c1ad28e940e5c35ab1219434c23e8c59\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7\nmsg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1\nresult = invalid\n\n# tcId = 194\n# Modified IV\nct = 08db2f06aa2400d4cc1113b1c9e3ba1b39e3e26a84918f9266796c426c166428\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7\nmsg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1\nresult = invalid\n\n# tcId = 195\n# Modified IV\nct = 3114404be000ee167b65dd3cfae3b10c50dffe1df864b5e52a2805f0c80021c0\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7\nmsg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1\nresult = invalid\n\n# tcId = 196\n# Modified IV\nct = 405ae5bdeff8b05d28ea55900b8e81dc789d532ec3fc457730819e762172f751\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7\nmsg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1\nresult = invalid\n\n# tcId = 197\n# Modified IV\nct = 7c19e66d21c0f1409ee6f03a36ab6ba532349e2567200b95d7f5012b2b7e5d33\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7\nmsg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1\nresult = invalid\n\n# tcId = 198\n# Modified IV\nct = 955ac67d6e496b9b93a4dda8f6e65e668f1326b256ee146a7647ba18deee7986\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7\nmsg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1\nresult = invalid\n\n# tcId = 199\n# Modified IV\nct = c8600aa18be27279493fd68c84130c8bc328b0f6821e01e892b6c2dc1c005270\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7\nmsg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1\nresult = invalid\n\n# tcId = 200\n# Modified IV\nct = 492566e0dc539e234b08b95fb23594a6d14f59fa4367799495c2e7f2993135ec\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7\nmsg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1\nresult = invalid\n\n# tcId = 201\n# Modified IV\nct = 8c5c2ea18125a03d15d2a624c9bfcccdf53709a89ae03d5728c98943b13df72c6f02fc8e1cfcdfa7\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7\nmsg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1acce3497352690\nresult = invalid\n\n# tcId = 202\n# Modified IV\nct = 8836c5cb2eec2ca2541b18c1259933ebd601bd6763d9f7cebf06ed6abbe37d455aca13a2db87d111\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7\nmsg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1acce3497352690\nresult = invalid\n\n# tcId = 203\n# Modified IV\nct = 2554e0faf721d77f7dfadaaa90b70c2f242f93bdc4f876cd058a86ccfff33f8fd88736997f505d98\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7\nmsg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1acce3497352690\nresult = invalid\n\n# tcId = 204\n# Modified IV\nct = 53ee4c8f03212b389f5bc2b26bc898deb91a457f258a22028a688919e12c4da23090c26b5c9ff692\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7\nmsg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1acce3497352690\nresult = invalid\n\n# tcId = 205\n# Modified IV\nct = 3a63b0283ec071a4d4c32b0f30b384eccb3cd8d7fb12de6806e12fef5da82a7a39aad8128c3e5915\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7\nmsg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1acce3497352690\nresult = invalid\n\n# tcId = 206\n# Modified IV\nct = d1cfaaa9adc25f948c0c4720967b01488e06d3dfc5622b5de38a722798d4a3a44fa6194a92c5ede7\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7\nmsg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1acce3497352690\nresult = invalid\n\n# tcId = 207\n# Modified IV\nct = 251a71511a4e73d1469a051fd88fa78cae96547fd8ca8e323b05d8717cdcd239292c7bbe0708fae5\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7\nmsg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1acce3497352690\nresult = invalid\n\n# tcId = 208\n# Modified IV\nct = 14a62f7284124d795826cc89852e97dbe6b8a30ac56df07173878cf0136dbe386ec46327d6fc65f1\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7\nmsg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1acce3497352690\nresult = invalid\n\n# tcId = 209\n# RFC 3349 padding\nct = ac1a774a5de27e4f9c356e4f62deaf8b7eeee6bcafafd895\nkey = 48a53c11ef2d727db7eb9a834b134ea9602273aca929702eb2c31d96a58c9be2\nmsg = 000102030405060708090a0b0c0d0e0f\nresult = invalid\n\n# tcId = 210\n# Invalid encryption\nct = b3941437f55e7cbc3f88050aff703967\nkey = 48a53c11ef2d727db7eb9a834b134ea9602273aca929702eb2c31d96a58c9be2\nmsg = 0001020304050607\nresult = invalid\n\n# tcId = 211\n# padding too long\nct = 86175acf19ad0b7ac60d1fe4bb7850635e7ec6f8a314f85b6dd3d8f9349ea38d\nkey = 48a53c11ef2d727db7eb9a834b134ea9602273aca929702eb2c31d96a58c9be2\nmsg = 000000000000000000000000000000000000000000000000\nresult = invalid\n\n# tcId = 212\n# padding too long\nct = 791f088847a76731e0d56b9b2dcb28bf9f091a9725790e0a64fc8e7cb3ad50f380297a98e3b1c33e\nkey = 48a53c11ef2d727db7eb9a834b134ea9602273aca929702eb2c31d96a58c9be2\nmsg = 0000000000000000000000000000000000000000000000000000000000000000\nresult = invalid\n\n# tcId = 213\n# incorrectly encoded length\nct = 868c34495bd3d7b4e2c1861e7fcbbdb372099488dd96c9ea\nkey = 48a53c11ef2d727db7eb9a834b134ea9602273aca929702eb2c31d96a58c9be2\nmsg = 00000000000000000000000000000000\nresult = invalid\n\n# tcId = 214\n# length = 2**32-1\nct = 4a8b4aeaa713469bfd9bf88d4072379fc858e40b24b0bebe\nkey = 48a53c11ef2d727db7eb9a834b134ea9602273aca929702eb2c31d96a58c9be2\nmsg = 00000000000000000000000000000000\nresult = invalid\n\n# tcId = 215\n# length = 2**32-1\nct = c210aa3b5fbf5eac97e68d98d7727f38\nkey = 48a53c11ef2d727db7eb9a834b134ea9602273aca929702eb2c31d96a58c9be2\nmsg = 0000000000000000\nresult = invalid\n\n# tcId = 216\n# length = 2**31-1\nct = e0ebd376e050cc9027b76dfc38ee2c6ae2808cecf480a560\nkey = 48a53c11ef2d727db7eb9a834b134ea9602273aca929702eb2c31d96a58c9be2\nmsg = 00000000000000000000000000000000\nresult = invalid\n\n# tcId = 217\n# length = 2**31 + 16\nct = 23a693e211c08ab9b222c2ede2db18f437e22917fdff8032\nkey = 48a53c11ef2d727db7eb9a834b134ea9602273aca929702eb2c31d96a58c9be2\nmsg = 00000000000000000000000000000000\nresult = invalid\n\n# tcId = 218\n# data is incorrectly padded\nct = 003f2916fea6827e01199028d3dc4e03889113f97b1860cc242e5a0f28a0f159\nkey = 48a53c11ef2d727db7eb9a834b134ea9602273aca929702eb2c31d96a58c9be2\nmsg = ffffffffffffffffffffffffffffffffffffffffffffffff\nresult = invalid\n\n# tcId = 219\n# data is incorrectly padded\nct = 5c25a170d5225a6d66e117c691b37383\nkey = 48a53c11ef2d727db7eb9a834b134ea9602273aca929702eb2c31d96a58c9be2\nmsg = 0001020304050607\nresult = invalid\n\n# tcId = 220\n# length = 0\nct = df9ef924eb59634be5b27cabd33d72bd6be6e01e4672ab05\nkey = 48a53c11ef2d727db7eb9a834b134ea9602273aca929702eb2c31d96a58c9be2\nmsg = 00000000000000000000000000000000\nresult = invalid\n\n# tcId = 221\n# RFC 3349 padding with incorrect size\nct = e6e66fad359a7b63a977788acd297121\nkey = 48a53c11ef2d727db7eb9a834b134ea9602273aca929702eb2c31d96a58c9be2\nmsg = 0001020304050607\nresult = invalid\n\n# tcId = 222\n# length = 9\nct = 76b88ecda760b1af80703036185fc476\nkey = 48a53c11ef2d727db7eb9a834b134ea9602273aca929702eb2c31d96a58c9be2\nmsg = 0000000000000000\nresult = invalid\n\n# tcId = 223\n# length = 16\nct = fd101943f4ab7c38ec68c75d4b3193dc\nkey = 48a53c11ef2d727db7eb9a834b134ea9602273aca929702eb2c31d96a58c9be2\nmsg = 0000000000000000\nresult = invalid\n\n# tcId = 224\n# length = 2**31 + 8\nct = 1793a3a9bd146726edbcb9589f20e849\nkey = 48a53c11ef2d727db7eb9a834b134ea9602273aca929702eb2c31d96a58c9be2\nmsg = 0000000000000000\nresult = invalid\n\n",
-};
-static const size_t kLen76 = 36808;
-
-static const char *kData76[] = {
+static const char *kData74[] = {
     "# Imported from Wycheproof's kw_test.json.\n# This file is generated by convert_wycheproof.go. Do not edit by hand.\n#\n# Algorithm: KW\n# Generator version: 0.4.12\n\n[keySize = 128]\n\n# tcId = 1\nct = 9de453ced5d4ab46a5601708eeefefb5e593e6ae8e86b26b\nkey = 6f67486d1e914419cb43c28509c7c1ea\nmsg = 8dc0632d92ee0be4f740028410b08270\nresult = valid\n\n# tcId = 2\nct = 8c3aba85cc0ae1ae10b36658b068f595baf8caafb745ef3c\nkey = a0b17172bb296db7f5c869e9a36b5ce3\nmsg = 615dd022d607c910f20178cbdf42060f\nresult = valid\n\n# tcId = 3\nct = 1de093654826f18fcd0f3fd499416ff22ed75ee12fe0b624\nkey = 0e49d571c19b5250effd41d94bde39d6\nmsg = f25e4de8caca363fd5f29442eb147b55\nresult = valid\n\n# tcId = 4\n# wrapped key is longer than wrapping key\nct = 9c3ddc23827b7b3c13105f9e8b11523baccdfb6c8b7e7825496e7a840bd32aec\nkey = e0e12959109103e30ae8b5684a22e662\nmsg = dbb0f2bb2be912a20430972d9842ce3fd3b928e573e1ac8e\nresult = acceptable\n\n# tcId = 5\n# wrapped key is longer than wrapping key\nct = afb744aaf746dcc0b57f8b378c404cbe877f44cf3d45140d60814eda3f541f01\nkey = dd583d9f1059861430ec8b5d8a180e9b\nmsg = f2e34f356362a31b51d6e02bcd333c9e6170494ca5ff5487\nresult = acceptable\n\n# tcId = 6\n# wrapped key is longer than wrapping key\nct = cff98cd64cb51ab99b81aee82cee4274d0df3e1b6a4943d39236ea989846d0cc\nkey = faf5ccfae42b43cee2c5f0f3177a7c5d\nmsg = 4e02084833660c463830483b36dab866c64c8cf7429cac3d\nresult = acceptable\n\n# tcId = 7\n# wrapped key is longer than wrapping key\nct = 58dcfb0e7ec4d3bc8003418d865fbd520c6b24b2bde35b1be5b1c5ff32a130f33d035e5932616083\nkey = c2b9d23f2831ddcdeb456853d4014db9\nmsg = f4cfea98e58b939cc859554385cf3a6c7f8217f728efb431c964786de8274907\nresult = acceptable\n\n# tcId = 8\n# wrapped key is longer than wrapping key\nct = 4ee47bd68d418586c447a39111e2ec1502ff0f1726ea91c5d97370409d89b8e66e889b638ac40ced\nkey = 620a08f320cdedbf7ae551add348d95e\nmsg = cec34eaf8e67e1ce619ddfc309531c42f16033a7e2cbc4f5eb3a548164e9b291\nresult = acceptable\n\n# tcId = 9\n# wrapped key is longer than wrapping key\nct = d3b093fd822ce454ebc251c6f21fa71c3858ee7e623ecbfbbf887398a30b40c55d0565c7a15e4015\nkey = ed089ac274f8c7cea2415671a94b5e53\nmsg = 6065e41df14daeeefacac5daeb7674cdc9c1f686013b797153e80ef215893299\nresult = acceptable\n\n# tcId = 10\n# Round counter overflows 256\nct = 222deadde6efb760cae42fa188310e0c07e7d557529766444a9efb330907d42f0dd8f3d17b3a38bf40d68c095a9cce19daf907bf2c92f1e59b18b277ff0397fc50f45f582db936aa8afb943de01b58abfdc81daef4e038c99e4c1eb3ee447464bb8f89a4ea81e56556cc26c72883c06a7fe850d04347d68bbadc4a06775030676db8cc34aeb07e39c7f059c2bff76a7f2baf076749004ef7189f887f89029f88c5c1d0f5ee62320b423048e2ad8186e63be23c553f5576a40d967e8b527ccd783c41abc64bea1aec8a76deb3e9c9a6656756e1dac38bd25ff008888a5591af763fd73f5addd749794817070990484654a46ef442adaeacab14d12daaf87bcb91661a21593717d9b93529d813ea5fc812d708c0d8e9b68122d9f5e6267cde363780a45d07e4caa5bf14f2334f25b9d177632bb80a82894aa47b6f360b2da1138dedd4331f077c900554c7a68b5d154980bb3517ac20a78a51f6f21e42b2c4c960d31cbd22bd610819182c5e456ba7d7e903f5e60f6e0c4cc014feb4f81973ce48ad6f4dab8da51eb7\nkey = 31cacbb17d6dbbecae40727c5048fe0c\nmsg = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\nresult = acceptable\n\n# tcId = 11\n# empty keys cannot be wrapped\nct = a6a6a6a6a6a6a6a6\nkey = 574957151fc2afe0fa3dc7a9a7da6495\nmsg = \nresult = invalid\n\n# tcId = 12\n# keys of size 8 byte cannot be wrapped\nct = dc26fb6911d71971df0356d6bb9ed6e6\nkey = 574957151fc2afe0fa3dc7a9a7da6495\nmsg = 0001020304050607\nresult = invalid\n\n# tcId = 13\n# wrapped key size must be divisible by 8\nct = \nkey = 574957151fc2afe0fa3dc7a9a7da6495\nmsg = 00\nresult = invalid\n\n# tcId = 14\n# wrapped key size must be divisible by 8\nct = \nkey = 574957151fc2afe0fa3dc7a9a7da6495\nmsg = 0001\nresult = invalid\n\n# tcId = 15\n# wrapped key size must be divisible by 8\nct = \nkey = 574957151fc2afe0fa3dc7a9a7da6495\nmsg = 000102\nresult = invalid\n\n# tcId = 16\n# wrapped key size must be divisible by 8\nct = \nkey = 574957151fc2afe0fa3dc7a9a7da6495\nmsg = 00010203\nresult = invalid\n\n# tcId = 17\n# wrapped key size must be divisible by 8\nct = \nkey = 574957151fc2afe0fa3dc7a9a7da6495\nmsg = 0001020304\nresult = invalid\n\n# tcId = 18\n# wrapped key size must be divisible by 8\nct = \nkey = 574957151fc2afe0fa3dc7a9a7da6495\nmsg = 000102030405\nresult = invalid\n\n# tcId = 19\n# wrapped key size must be divisible by 8\nct = \nkey = 574957151fc2afe0fa3dc7a9a7da6495\nmsg = 00010203040506\nresult = invalid\n\n# tcId = 20\n# wrapped key size must be divisible by 8\nct = \nkey = 574957151fc2afe0fa3dc7a9a7da6495\nmsg = 000102030405060708090a0b0c0d0e0f10111213\nresult = invalid\n\n# tcId = 21\n# invalid size of wrapped key\nct = \nkey = fe60fc8df7d9f4ebb5416ca4e82182f7\nmsg = \nresult = invalid\n\n# tcId = 22\n# invalid size of wrapped key\nct = 9f\nkey = fe60fc8df7d9f4ebb5416ca4e82182f7\nmsg = \nresult = invalid\n\n# tcId = 23\n# invalid size of wrapped key\nct = dc9e9580\nkey = fe60fc8df7d9f4ebb5416ca4e82182f7\nmsg = \nresult = invalid\n\n# tcId = 24\n# invalid size of wrapped key\nct = b9b282d138693000\nkey = fe60fc8df7d9f4ebb5416ca4e82182f7\nmsg = \nresult = invalid\n\n# tcId = 25\n# invalid size of wrapped key\nct = 0efc635b2d61e244056b9d4591ca6b\nkey = fe60fc8df7d9f4ebb5416ca4e82182f7\nmsg = \nresult = invalid\n\n# tcId = 26\n# invalid size of wrapped key\nct = 4a305dae087b0d24d62af41831338f33ae\nkey = fe60fc8df7d9f4ebb5416ca4e82182f7\nmsg = \nresult = invalid\n\n# tcId = 27\n# invalid size of wrapped key\nct = 82cb927097cf31ea4affea440b0d8ca6a240b900\nkey = fe60fc8df7d9f4ebb5416ca4e82182f7\nmsg = \nresult = invalid\n\n# tcId = 28\n# bytes appended to wrapped key\nct = 9790ab51fbcb850df6764e011ae97c85785bed2633aea66500\nkey = fe60fc8df7d9f4ebb5416ca4e82182f7\nmsg = 000102030405060708090a0b0c0d0e0f\nresult = invalid\n\n# tcId = 29\n# Incorrect IV\nct = 0aac329ccd513edbdd6367df67999eaac9e7b51984c4d38d\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1\nmsg = a828cbda9b5ff0ae374f84fa01d070a5\nresult = invalid\n\n# tcId = 30\n# Incorrect IV\nct = 5a55dc429749ca49bb4ab01d966b19ea9a9e1402e6ab2962\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1\nmsg = a828cbda9b5ff0ae374f84fa01d070a5\nresult = invalid\n\n# tcId = 31\n# Incorrect IV\nct = 45f533f6072f640eb7e1e512d56072085567f4ad6012a97a\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1\nmsg = a828cbda9b5ff0ae374f84fa01d070a5\nresult = invalid\n\n# tcId = 32\n# Incorrect IV\nct = 84f284565df47c409107f7a0a71bc370a8ed4489d414b9e9\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1\nmsg = a828cbda9b5ff0ae374f84fa01d070a5\nresult = invalid\n\n# tcId = 33\n# Incorrect IV\nct = 3941c366554fc896e9fe52f02493ca03d439eb17c236146d\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1\nmsg = a828cbda9b5ff0ae374f84fa01d070a5\nresult = invalid\n\n# tcId = 34\n# Incorrect IV\nct = 45c9d42363d981d086a972728e130a42f5dd90bda562a85a\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1\nmsg = a828cbda9b5ff0ae374f84fa01d070a5\nresult = invalid\n\n# tcId = 35\n# Incorrect IV\nct = 037d17859519d6c0728a9eb6e64113e86919decabd3bbb88\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1\nmsg = a828cbda9b5ff0ae374f84fa01d070a5\nresult = invalid\n\n# tcId = 36\n# Incorrect IV\nct = 1ad10af7f6c042b267a0c7bc4d25d27c003deb50e2cc566a\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1\nmsg = a828cbda9b5ff0ae374f84fa01d070a5\nresult = invalid\n\n# tcId = 37\n# Incorrect IV\nct = 630c571b7fb8647ac5360a255f9f5d3645795ac45285cbaa\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1\nmsg = a828cbda9b5ff0ae374f84fa01d070a5\nresult = invalid\n\n# tcId = 38\n# Incorrect IV\nct = 16db553e467d4029d0fea62b2c440e5df6c6591f0497a99d\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1\nmsg = a828cbda9b5ff0ae374f84fa01d070a5\nresult = invalid\n\n# tcId = 39\n# Incorrect IV\nct = 097991090a156047d4784b757f262e12ce57e13a3d5d28",
     "6c\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1\nmsg = a828cbda9b5ff0ae374f84fa01d070a5\nresult = invalid\n\n# tcId = 40\n# Incorrect IV\nct = 3957c338b750a3285eb7b65c9cfe77053dd7d8149f42caa1\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1\nmsg = a828cbda9b5ff0ae374f84fa01d070a5\nresult = invalid\n\n# tcId = 41\n# RFC 3394\nct = 1fa68b0a8112b447aef34bd8fb5a7b829d3e862371d2cfe5\nkey = 000102030405060708090a0b0c0d0e0f\nmsg = 00112233445566778899aabbccddeeff\nresult = valid\n\n[keySize = 192]\n\n# tcId = 42\nct = 00be1caddfd5ad7697877017795f9cee4bce5a61687a6126\nkey = f75a2f49a630c7dc91626b00ce029f0bd2981d7c74a93ebe\nmsg = 9adbc00c710b1101bdf6a4ed65b32d72\nresult = valid\n\n# tcId = 43\nct = 54e7f278b5a1fb4c31a0d79ac1f615edd910bf22015a0668\nkey = b713f6b7814f98894d7b153974684359f1460213eb74be68\nmsg = 78585f0c49922e82caf17ebc3721b4db\nresult = valid\n\n# tcId = 44\nct = 510455bd9c078ac1f07bb3752cbd04e421b0dd635190fa62\nkey = 13ecf423211caa334ba6db37259a535c20de8ad10fc8c432\nmsg = 4fc75d0f221e22408a37e11265d49a05\nresult = valid\n\n# tcId = 45\nct = 880da5b410f913ad72cc93f46344f1152165bdea14664fd2d3afbd87b8cc5cfd\nkey = 4417fbbea51bdd91818d74051957dd70e135c5cf3732bdf1\nmsg = f5357da9f8fd4a1190f36e9fa09a90fcf14d87d62332f1a5\nresult = valid\n\n# tcId = 46\nct = 27654cf6a63d6004ae83da54c2e5d7b5fad20878f350087ddd17ac44a2be868f\nkey = b3f26d8a22fdd61f709841231fbde695b3f28dddced6d41e\nmsg = 0d0af955d2e3829cc3d643219b301e64e0510dfbc428119a\nresult = valid\n\n# tcId = 47\nct = ad7ca66ad4664f43e4dd09296a6e6f02d5af4408f225c0abeb0d9b76c8d1e982\nkey = f70cfb262c729a18206c8afd74356ec7e049d10b44a6e000\nmsg = 241cedfa64c4e7bec541a2eb4c368269e0f0ddebc58267ea\nresult = valid\n\n# tcId = 48\n# wrapped key is longer than wrapping key\nct = e245c90a6b46caece94f47117d608331958c8f75f531ebcdc902c0213d9105f2155af07daa62d132\nkey = 1639f9f81e53e2eeb677a249e5eced3af108971301601a7b\nmsg = ec3c6a1f1a9585327fe658490c74635e5300876da5846a629398984fb551d691\nresult = acceptable\n\n# tcId = 49\n# wrapped key is longer than wrapping key\nct = 8a32b9f207ae5aaedb7e8a0d945107412c1bd06999bc5ac83c1f958dfb77ebdcf9d98c60dbd4650a\nkey = 1f22d5658aa685b8ba8659dc342880d5b2399e6a815005b0\nmsg = 50be4c1b2f29a63f44d7fc63737f600f0194ea3fb36e173d2ddd19f218656380\nresult = acceptable\n\n# tcId = 50\n# wrapped key is longer than wrapping key\nct = 4a5842b10d2db96ea1039ef4785ce722555b3751a9b6dd39126ad363378c72320d83ea7adb81615a\nkey = 3a2f4aa50441954bba5a1836294ce071f9296b23dbed6771\nmsg = 65da02ff21b483a1e39575490b4319e84ae0299f1f00b3859fbe2e74b3ec2aaf\nresult = acceptable\n\n# tcId = 51\n# Round counter overflows 256\nct = e2192598e6124f2791b2751f930958435bb1d02e98aa1e09781bba0b159435db659fa73fa310111704692c68e16ddf4be06022c52fe9dba6279aad1aeb814125d0ddf33f31e58e625af32305050cfea390d8782d32caac558889ca8e641908208da6976542b40dbd090178e2a6812a436c18a5e891ac8083176ace1ddfee4d382856a59c80c643ecd5c1ab68c66b2b8984ce6e0e386f6554a9cb91d363bb4accf028878ec20b8b2e37214f7b12dbcd78fb38f711a90fe262c78491b9058354e27b34fc92ef0d7028594cb08259f86b54cb1d317ec55f2ef2ab7e8b141671f8bcb1a90bb7d82bc8cb4fb02c9ce430ef4ae0dc847e91e7d4fb463eb9dd87fc9dc9568f3a4ef504d74c134dcb60ca01b36ce10cb467268ea297c0518a50d12cc025cfeea1381ddd7dd63e4ac94890a0eae9dbd8db244625a3c8af2e1aff6a8112c4d3d98e8263588ee1dd9063b709b8ec00474c4ea413a802b8cde814e7b3731410809ed000060fb7b9b0bf8509ef17515f333e868b188ea16445f380b3a7d42774f6456cdf724246fa\nkey = 31cacbb17d6dbbecae40727c5048fe0c01bc53b23ab63502\nmsg = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\nresult = acceptable\n\n# tcId = 52\n# empty keys cannot be wrapped\nct = a6a6a6a6a6a6a6a6\nkey = 574957151fc2afe0fa3dc7a9a7da6495398f18ea0d8eed76\nmsg = \nresult = invalid\n\n# tcId = 53\n# keys of size 8 byte cannot be wrapped\nct = 38d8238cdb0d9a2da28d6d56194f2e78\nkey = 574957151fc2afe0fa3dc7a9a7da6495398f18ea0d8eed76\nmsg = 0001020304050607\nresult = invalid\n\n# tcId = 54\n# wrapped key size must be divisible by 8\nct = \nkey = 574957151fc2afe0fa3dc7a9a7da6495398f18ea0d8eed76\nmsg = 00\nresult = invalid\n\n# tcId = 55\n# wrapped key size must be divisible by 8\nct = \nkey = 574957151fc2afe0fa3dc7a9a7da6495398f18ea0d8eed76\nmsg = 0001\nresult = invalid\n\n# tcId = 56\n# wrapped key size must be divisible by 8\nct = \nkey = 574957151fc2afe0fa3dc7a9a7da6495398f18ea0d8eed76\nmsg = 000102\nresult = invalid\n\n# tcId = 57\n# wrapped key size must be divisible by 8\nct = \nkey = 574957151fc2afe0fa3dc7a9a7da6495398f18ea0d8eed76\nmsg = 00010203\nresult = invalid\n\n# tcId = 58\n# wrapped key size must be divisible by 8\nct = \nkey = 574957151fc2afe0fa3dc7a9a7da6495398f18ea0d8eed76\nmsg = 0001020304\nresult = invalid\n\n# tcId = 59\n# wrapped key size must be divisible by 8\nct = \nkey = 574957151fc2afe0fa3dc7a9a7da6495398f18ea0d8eed76\nmsg = 000102030405\nresult = invalid\n\n# tcId = 60\n# wrapped key size must be divisible by 8\nct = \nkey = 574957151fc2afe0fa3dc7a9a7da6495398f18ea0d8eed76\nmsg = 00010203040506\nresult = invalid\n\n# tcId = 61\n# wrapped key size must be divisible by 8\nct = \nkey = 574957151fc2afe0fa3dc7a9a7da6495398f18ea0d8eed76\nmsg = 000102030405060708090a0b0c0d0e0f10111213\nresult = invalid\n\n# tcId = 62\n# invalid size of wrapped key\nct = \nkey = fe60fc8df7d9f4ebb5416ca4e82182f7e9923a746110fd97\nmsg = \nresult = invalid\n\n# tcId = 63\n# invalid size of wrapped key\nct = 9f\nkey = fe60fc8df7d9f4ebb5416ca4e82182f7e9923a746110fd97\nmsg = \nresult = invalid\n\n# tcId = 64\n# invalid size of wrapped key\nct = dc9e9580\nkey = fe60fc8df7d9f4ebb5416ca4e82182f7e9923a746110fd97\nmsg = \nresult = invalid\n\n# tcId = 65\n# invalid size of wrapped key\nct = b9b282d138693000\nkey = fe60fc8df7d9f4ebb5416ca4e82182f7e9923a746110fd97\nmsg = \nresult = invalid\n\n# tcId = 66\n# invalid size of wrapped key\nct = 0efc635b2d61e244056b9d4591ca6b\nkey = fe60fc8df7d9f4ebb5416ca4e82182f7e9923a746110fd97\nmsg = \nresult = invalid\n\n# tcId = 67\n# invalid size of wrapped key\nct = 4a305dae087b0d24d62af41831338f33ae\nkey = fe60fc8df7d9f4ebb5416ca4e82182f7e9923a746110fd97\nmsg = \nresult = invalid\n\n# tcId = 68\n# invalid size of wrapped key\nct = 82cb927097cf31ea4affea440b0d8ca6a240b900\nkey = fe60fc8df7d9f4ebb5416ca4e82182f7e9923a746110fd97\nmsg = \nresult = invalid\n\n# tcId = 69\n# bytes appended to wrapped key\nct = 55dfb2f7e0c1ea04fead897c451c0505921dc47f308c491700\nkey = fe60fc8df7d9f4ebb5416ca4e82182f7e9923a746110fd97\nmsg = 000102030405060708090a0b0c0d0e0f\nresult = invalid\n\n# tcId = 70\n# Incorrect IV\nct = 9b1593fd7d4fe25a660bbc1976ea4ab68bcc53f848a8eb9d\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4\nmsg = a828cbda9b5ff0ae374f84fa01d070a5\nresult = invalid\n\n# tcId = 71\n# Incorrect IV\nct = e7edb847fa91e2deded726edf3ab93da91151697425fee28\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4\nmsg = a828cbda9b5ff0ae374f84fa01d070a5\nresult = invalid\n\n# tcId = 72\n# Incorrect IV\nct = 1b51a7c033c1efb5ee2994259c40f03bb57d8cc09e507e6e\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4\nmsg = a828cbda9b5ff0ae374f84fa01d070a5\nresult = invalid\n\n# tcId = 73\n# Incorrect IV\nct = c40b614a5062f5fd049c5379b3e8141614c2da97893589fb\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4\nmsg = a828cbda9b5ff0ae374f84fa01d070a5\nresult = invalid\n\n# tcId = 74\n# Incorrect IV\nct = d7575ef02df54b3086eb49035eeafbce0e08336e89b35ab0\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4\nmsg = a828cbda9b5ff0ae374f84fa01d070a5\nresult = invalid\n\n# tcId = 75\n# Incorrect IV\nct = 0d617f1c12485a35917d2a941e949d2fdbf03a346889b850\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4\nmsg = a828cbda9b5ff0ae374f84fa01d070a5\nresult = invalid\n\n# tcId = 76\n# Incorrect IV\nct = c7df34729174db2e83ee16c6de74d5eb9766715fad049b40\nkey = 4f",
     "710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4\nmsg = a828cbda9b5ff0ae374f84fa01d070a5\nresult = invalid\n\n# tcId = 77\n# Incorrect IV\nct = c3ed38d6f9ccb9bf3c56bb3176f00d3ce9887521f8d4c70b\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4\nmsg = a828cbda9b5ff0ae374f84fa01d070a5\nresult = invalid\n\n# tcId = 78\n# Incorrect IV\nct = 6582b5f4652744b0537e97e7cdae0f443130140dbaea604c\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4\nmsg = a828cbda9b5ff0ae374f84fa01d070a5\nresult = invalid\n\n# tcId = 79\n# Incorrect IV\nct = fc9b9bdf25f2b48ad79934c8d34897cdbf4c846f8cb4b11d\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4\nmsg = a828cbda9b5ff0ae374f84fa01d070a5\nresult = invalid\n\n# tcId = 80\n# Incorrect IV\nct = fc23c7f4fe20aa81105efc1a7105a5316b23399ac792c824\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4\nmsg = a828cbda9b5ff0ae374f84fa01d070a5\nresult = invalid\n\n# tcId = 81\n# Incorrect IV\nct = 37b4a261b96bcec9cc93eef5b2fbbbe84634f978c5893dda\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4\nmsg = a828cbda9b5ff0ae374f84fa01d070a5\nresult = invalid\n\n# tcId = 82\n# Incorrect IV\nct = 1831109847d17d010bfcd93fb46f3150cdafd52733db74c221b034fe8e1552c0\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4\nmsg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1\nresult = invalid\n\n# tcId = 83\n# Incorrect IV\nct = 2b2b89c3c6b2db4903877ad4622ca33f3a3cb7e6701d1340e6afc0fdab7dbd72\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4\nmsg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1\nresult = invalid\n\n# tcId = 84\n# Incorrect IV\nct = 3c6903f37da57161af6706050a2ed747cd55344d869189fd49d2536ff948129d\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4\nmsg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1\nresult = invalid\n\n# tcId = 85\n# Incorrect IV\nct = 8a8dc8b131c6b968b60c1dd819a655392d1a96d6cafa48e30fb1146f096229c6\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4\nmsg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1\nresult = invalid\n\n# tcId = 86\n# Incorrect IV\nct = 303e0b3602d514a7d52edba3306d7383e8999e7c652a510335a8949efb42eb66\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4\nmsg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1\nresult = invalid\n\n# tcId = 87\n# Incorrect IV\nct = 319befbf2ddbb475723fb2fa30f2ae7fc1ceb1e6f361715eca7209608873c7fc\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4\nmsg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1\nresult = invalid\n\n# tcId = 88\n# Incorrect IV\nct = 9b3e440341c5da131559959db6b3553a534691162f4f009327bf2c21d6fe5ada\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4\nmsg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1\nresult = invalid\n\n# tcId = 89\n# Incorrect IV\nct = eba6cc0959e6a56339b141629840add80f4565656dc687a3b996960c994dfd26\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4\nmsg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1\nresult = invalid\n\n# tcId = 90\n# Incorrect IV\nct = b703b6cf4587709353c7e4004d3da61ce5f5deaf7163ca9d6158dde919e0ac34\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4\nmsg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1\nresult = invalid\n\n# tcId = 91\n# Incorrect IV\nct = 72549d52d6f4ff912d833c74136d90634ce8afa4f84412bbee8074084d4cecff\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4\nmsg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1\nresult = invalid\n\n# tcId = 92\n# Incorrect IV\nct = 1337c8bd6c8a5dd43aba8d298864ffe76ad6ea909f3488157a15e6c46acf2214\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4\nmsg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1\nresult = invalid\n\n# tcId = 93\n# Incorrect IV\nct = 4aaffaca5fe85814d040aa2a306ba4d1d44746cfe46c978aa057b53fd25316c1\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4\nmsg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1\nresult = invalid\n\n# tcId = 94\n# RFC 3394\nct = 96778b25ae6ca435f92b5b97c050aed2468ab8a17ad84e5d\nkey = 000102030405060708090a0b0c0d0e0f1011121314151617\nmsg = 00112233445566778899aabbccddeeff\nresult = valid\n\n# tcId = 95\n# RFC 3394\nct = 031d33264e15d33268f24ec260743edce1c6c7ddee725a936ba814915c6762d2\nkey = 000102030405060708090a0b0c0d0e0f1011121314151617\nmsg = 00112233445566778899aabbccddeeff0001020304050607\nresult = valid\n\n[keySize = 256]\n\n# tcId = 96\nct = 940b1c580e0c7233a791b0f192438d2eace14214cee455b7\nkey = fce0429c610658ef8e7cfb0154c51de2239a8a317f5af5b6714f985fb5c4d75c\nmsg = 287326b5ed0078e7ca0164d748f667e7\nresult = valid\n\n# tcId = 97\nct = 939b3389336fea4a9751bf014ef18011323090e8a0500bc4\nkey = 0dda6da5123e2c37c6fa16ba0d334cd01acd652f8994211751dfab4faac2fc22\nmsg = b40b6828729b456322a8d065abc0d081\nresult = valid\n\n# tcId = 98\nct = 59ee8e5198861237f682edec6ba906526c016d4d935942bd\nkey = d6925914cd06308f81ad91e23073593d99d4e50351b20eb2a8d1a1ac4ced6588\nmsg = 037b27b3dc95b19d15bd4091e320bfe1\nresult = valid\n\n# tcId = 99\nct = 1ab53a065d8f776a08b33e51383071b6f154612116655137bd3b7ec29b70fd56\nkey = 07518a82cbc8da1dcec55f3763a206d277487abd03cedd0b8bef9ee2fb157121\nmsg = faa4664d79fce3c7d2fdd462f6c1c423c2f8e6b69be2e071\nresult = valid\n\n# tcId = 100\nct = a1bf8e73e3fa1db759f0ab2ab0b1ca6f2c85b63d83e25f7a0b5293d0a216a2b7\nkey = ea46991d4e71f53dd624e7fe7fde11944a7c5942d232369b8065d42b8cd2dde1\nmsg = dffc5cf1dd5411d015d84601fa38df5effe885c7f26a4825\nresult = valid\n\n# tcId = 101\nct = 27308a0e1a6c0a1d15d6174ab7d68675207b615df16fcf7a3c69b25f551cca9f\nkey = fdcfa902c6f222f527af84da533b14b52e2615da3a89d1d35708b0cd49f60d87\nmsg = 966b07047354966a703e79607b556032f4f596b7f9206f05\nresult = valid\n\n# tcId = 102\nct = 7155ee932b0358d98182a23f7f427c774ab340a4757d0b6a63facd3de90578438cf03201c3f88057\nkey = 38e1b1d075d9d852b9a6c01c8ff6965af01bac457a4e339ae3e1d7b2ffacc0cd\nmsg = 80ad6820f1c90981e2ca42b817a345c1179d0a11d8e23a8adc0505e13d87295a\nresult = valid\n\n# tcId = 103\nct = f20b9b553bc0847529f8d4379fa909211e68249bd429f436c615c4c4a5d9f1a1968f0b89c5237b30\nkey = c641f1689d81caa8ba37d895272240664054ed974cfffc40e6c5c0cad1b916c7\nmsg = 3fd0ba19955e46749f54d88e99d080b7339d588fe612ec0f4021ca3ca2104270\nresult = valid\n\n# tcId = 104\nct = 2811716854a214aecdd318c6670b9b2a7511713c9a0c0fa805230ff05cf84af795dd72f6c1a44512\nkey = aa0ab9d68ed4a04e723f81b44c0c88d0bcde7a80cfd476eb4b8836d9aa01ec4c\nmsg = 57faa8766f6d6a0aa1cf643f857c150df5b31303b50af480e21c4b5e8c8a15d5\nresult = valid\n\n# tcId = 105\n# Round counter overflows 256\nct = 5322bc62bd8379abbb75f69688b8f00e31962b8f9ae1e89771952d8a2a749e1352ec33b5435a674271b314760ab9f753b16726185ec7d319ac60531355344c1d53c7903000a8039eb40f70564a0ad3f41b2355ea5dfa6a1d46392f1d106a5da569bfb0493bf7c12dff04bafeae377df4bb47cd440b6f60fbab2a54a98551b76273e02cac8d7be9f2343d3abb2a23af1c91a7011c67a7907260116b67d510aabe5c7ca46c1c20f77106c45966583b3e4ed799a47ee19bb4223209265c2b1ac8183a678ff43bc9a3470a50b9ee4d10f60674268d72c68be003a0d9dd6849aba836fe8a1792b81c90e12945bfe1f27a9c6b2af66a063cdb7721a7f23fb30afdbd8b18db377dd1697f157be81c1578d08b066c71b0c5ca7feecac1cdd938cf9ad525f74844660908194b28e54eddb158f6e4c921b811d90db71a92ff872db2250dcc3f847fc752b66d77e33c85084d3fa53b4f30503d2a06e6cabb9033d59fc1dc15e32f19846a039b91597b0ba3141a7d9717630062170117b2131dab77406e9ed7d66b2c754d849c60\nkey = 31cacbb17d6dbbecae40727c5048fe0c01bc53b23ab635025cbac1ecf52ca495\nmsg = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\nresult = acceptable\n\n# tcId = 106\n# empty keys cannot be wrapped\nct = a6a6a6a6a6a6a6a6\nkey = 574957151fc2afe0fa3dc7a9a7da6495398f18ea0d8eed76a51aac96038ad692\nmsg = \nresult = invalid\n\n# tcId = 107\n# keys of size 8 byte cannot be wrapped\nct = 181ba6a3a4392469e3de98ddbbdd2432\nkey = 574957151fc2afe0fa3d",
     "c7a9a7da6495398f18ea0d8eed76a51aac96038ad692\nmsg = 0001020304050607\nresult = invalid\n\n# tcId = 108\n# wrapped key size must be divisible by 8\nct = \nkey = 574957151fc2afe0fa3dc7a9a7da6495398f18ea0d8eed76a51aac96038ad692\nmsg = 00\nresult = invalid\n\n# tcId = 109\n# wrapped key size must be divisible by 8\nct = \nkey = 574957151fc2afe0fa3dc7a9a7da6495398f18ea0d8eed76a51aac96038ad692\nmsg = 0001\nresult = invalid\n\n# tcId = 110\n# wrapped key size must be divisible by 8\nct = \nkey = 574957151fc2afe0fa3dc7a9a7da6495398f18ea0d8eed76a51aac96038ad692\nmsg = 000102\nresult = invalid\n\n# tcId = 111\n# wrapped key size must be divisible by 8\nct = \nkey = 574957151fc2afe0fa3dc7a9a7da6495398f18ea0d8eed76a51aac96038ad692\nmsg = 00010203\nresult = invalid\n\n# tcId = 112\n# wrapped key size must be divisible by 8\nct = \nkey = 574957151fc2afe0fa3dc7a9a7da6495398f18ea0d8eed76a51aac96038ad692\nmsg = 0001020304\nresult = invalid\n\n# tcId = 113\n# wrapped key size must be divisible by 8\nct = \nkey = 574957151fc2afe0fa3dc7a9a7da6495398f18ea0d8eed76a51aac96038ad692\nmsg = 000102030405\nresult = invalid\n\n# tcId = 114\n# wrapped key size must be divisible by 8\nct = \nkey = 574957151fc2afe0fa3dc7a9a7da6495398f18ea0d8eed76a51aac96038ad692\nmsg = 00010203040506\nresult = invalid\n\n# tcId = 115\n# wrapped key size must be divisible by 8\nct = \nkey = 574957151fc2afe0fa3dc7a9a7da6495398f18ea0d8eed76a51aac96038ad692\nmsg = 000102030405060708090a0b0c0d0e0f10111213\nresult = invalid\n\n# tcId = 116\n# invalid size of wrapped key\nct = \nkey = fe60fc8df7d9f4ebb5416ca4e82182f7e9923a746110fd978e3bd2defc1c10d7\nmsg = \nresult = invalid\n\n# tcId = 117\n# invalid size of wrapped key\nct = 9f\nkey = fe60fc8df7d9f4ebb5416ca4e82182f7e9923a746110fd978e3bd2defc1c10d7\nmsg = \nresult = invalid\n\n# tcId = 118\n# invalid size of wrapped key\nct = dc9e9580\nkey = fe60fc8df7d9f4ebb5416ca4e82182f7e9923a746110fd978e3bd2defc1c10d7\nmsg = \nresult = invalid\n\n# tcId = 119\n# invalid size of wrapped key\nct = b9b282d138693000\nkey = fe60fc8df7d9f4ebb5416ca4e82182f7e9923a746110fd978e3bd2defc1c10d7\nmsg = \nresult = invalid\n\n# tcId = 120\n# invalid size of wrapped key\nct = 0efc635b2d61e244056b9d4591ca6b\nkey = fe60fc8df7d9f4ebb5416ca4e82182f7e9923a746110fd978e3bd2defc1c10d7\nmsg = \nresult = invalid\n\n# tcId = 121\n# invalid size of wrapped key\nct = 4a305dae087b0d24d62af41831338f33ae\nkey = fe60fc8df7d9f4ebb5416ca4e82182f7e9923a746110fd978e3bd2defc1c10d7\nmsg = \nresult = invalid\n\n# tcId = 122\n# invalid size of wrapped key\nct = 82cb927097cf31ea4affea440b0d8ca6a240b900\nkey = fe60fc8df7d9f4ebb5416ca4e82182f7e9923a746110fd978e3bd2defc1c10d7\nmsg = \nresult = invalid\n\n# tcId = 123\n# bytes appended to wrapped key\nct = 7dfbd7cf6158d75bb5900b3bf1e3871003402a6508b1912800\nkey = fe60fc8df7d9f4ebb5416ca4e82182f7e9923a746110fd978e3bd2defc1c10d7\nmsg = 000102030405060708090a0b0c0d0e0f\nresult = invalid\n\n# tcId = 124\n# Incorrect IV\nct = a417671bc62a23c7a65543092124024df72c048d8db330c7\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7\nmsg = a828cbda9b5ff0ae374f84fa01d070a5\nresult = invalid\n\n# tcId = 125\n# Incorrect IV\nct = 9518d0f99d7a73ed4a502b449c14c285971b0e6177ce0eca\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7\nmsg = a828cbda9b5ff0ae374f84fa01d070a5\nresult = invalid\n\n# tcId = 126\n# Incorrect IV\nct = f3511f0491bd74ae1defb5307f0e18db864b57b5c404d428\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7\nmsg = a828cbda9b5ff0ae374f84fa01d070a5\nresult = invalid\n\n# tcId = 127\n# Incorrect IV\nct = 6c03ce779259661c43d41d5d0e45687f874353bba516c73e\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7\nmsg = a828cbda9b5ff0ae374f84fa01d070a5\nresult = invalid\n\n# tcId = 128\n# Incorrect IV\nct = 8df01969a11c87026535bfccf72b1d064c86ecc7e5227157\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7\nmsg = a828cbda9b5ff0ae374f84fa01d070a5\nresult = invalid\n\n# tcId = 129\n# Incorrect IV\nct = 8ed1cde228d9c8d046dca65c7a27aef2edf8ae90c705d1e9\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7\nmsg = a828cbda9b5ff0ae374f84fa01d070a5\nresult = invalid\n\n# tcId = 130\n# Incorrect IV\nct = d69b3e34e9de38d44de1998992362a6fa1f696b5acab3f10\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7\nmsg = a828cbda9b5ff0ae374f84fa01d070a5\nresult = invalid\n\n# tcId = 131\n# Incorrect IV\nct = 67865122af3294b8da0588775125cbd6dc19d5e5cab97b6d\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7\nmsg = a828cbda9b5ff0ae374f84fa01d070a5\nresult = invalid\n\n# tcId = 132\n# Incorrect IV\nct = 9f0fa52363dd55df472d867e6faf5da8eb204a1d6d497030\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7\nmsg = a828cbda9b5ff0ae374f84fa01d070a5\nresult = invalid\n\n# tcId = 133\n# Incorrect IV\nct = c399f999c96a4204325e7f08d6a4de256faf21ec2c007ddf\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7\nmsg = a828cbda9b5ff0ae374f84fa01d070a5\nresult = invalid\n\n# tcId = 134\n# Incorrect IV\nct = 282082264a87dc35ce1cc5b9931b77d80d82fcacc0927f85\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7\nmsg = a828cbda9b5ff0ae374f84fa01d070a5\nresult = invalid\n\n# tcId = 135\n# Incorrect IV\nct = c192c90b83003ca96744498014b6ad6bedda837955269819\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7\nmsg = a828cbda9b5ff0ae374f84fa01d070a5\nresult = invalid\n\n# tcId = 136\n# Incorrect IV\nct = 30a983cd9e69d561acc95c42b252aba4185f8392f2e6c935c8eb105af8082e34\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7\nmsg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1\nresult = invalid\n\n# tcId = 137\n# Incorrect IV\nct = 4de9a639b799630b45b49e28dbfc44dabb9843ee588a8cff286b8d5fbd7b32ee\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7\nmsg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1\nresult = invalid\n\n# tcId = 138\n# Incorrect IV\nct = d915b2cdfb769d9d82259dc3d124646bbf972b83efd4c2eae9b9f751073f78d6\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7\nmsg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1\nresult = invalid\n\n# tcId = 139\n# Incorrect IV\nct = 117d653f480b69fce564f1fe99572492945189ed5af789ce05a2651baf90bb5e\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7\nmsg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1\nresult = invalid\n\n# tcId = 140\n# Incorrect IV\nct = 8226d07a2f919e24ada1081c69a75520be895e3a2bda9b805d9747773ddeaa38\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7\nmsg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1\nresult = invalid\n\n# tcId = 141\n# Incorrect IV\nct = b0a74345bedf8865348daf45d054b99ce515ea8be136270d1cf71e1cfa7aa4a2\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7\nmsg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1\nresult = invalid\n\n# tcId = 142\n# Incorrect IV\nct = a261db77f17f7ec736d1a8be16e5f9ae432fe2a17012e5a6f07c5426a9f0ca59\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7\nmsg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1\nresult = invalid\n\n# tcId = 143\n# Incorrect IV\nct = c53acb5e096b54548e1385b2ff18eaef68d235c95b0194e74a2383d3a7a530dc\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7\nmsg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1\nresult = invalid\n\n# tcId = 144\n# Incorrect IV\nct = faef482d99ebb180e5bc5e3cf775ba292c2a3b6c44aa4a21ad400906f11af392\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7\nmsg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1\nresult = invalid\n\n# tcId = 145\n# Incorrect IV\nct = 73a450b63b07b3aece9d1ae5bf097a3dd3fcf73e3ec2f1bd8fc3b5586cb9bd73\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7\nmsg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1\nresult = invalid\n\n# tcId = 146\n# Incorrect IV\nct = d34b6ee184d387c9aa4b2d180ae0a89498014e55fe8e416be4f826fcf7d56522\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7\nmsg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1\nresult = invalid\n\n# tcId = 147\n# Incorrect IV\nct = 2af823d1602803740bfa9040c2c4e769a5b6de919d403cfba9ad360f63af1113\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7\nmsg = a828cbda9b5ff0ae374f84f",
     "a01d070a5f0a17a0c462be4f1\nresult = invalid\n\n# tcId = 148\n# Incorrect IV\nct = dd78ebd3091c55a5da5b24504200f7fadd1b3ac6ad35f814f733e603c13936245d69d83f262f6b1e\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7\nmsg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1acce34973526908c\nresult = invalid\n\n# tcId = 149\n# Incorrect IV\nct = 3d8338eae7de322399e1d1b4a3df54326b242b563612ea4b27da22a041d3c80966911bc009911761\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7\nmsg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1acce34973526908c\nresult = invalid\n\n# tcId = 150\n# Incorrect IV\nct = d04bf75cadd3b5f099c34b27a91e64a8f2dbcf08e8c5c1c9f07a777eeb805d5d0e8c5c01afc43944\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7\nmsg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1acce34973526908c\nresult = invalid\n\n# tcId = 151\n# Incorrect IV\nct = be0c5d193b61c5137a8fd8a6d7d1ed8f0fa28cec516f544697c12add4f8f4d5cfca65edeb1019974\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7\nmsg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1acce34973526908c\nresult = invalid\n\n# tcId = 152\n# Incorrect IV\nct = a83ebcbeb2be9d6807b5cfc31c89849d1343dd4eb22e5bfe9e2b2b3790ad8900601f1f5d54fd472f\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7\nmsg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1acce34973526908c\nresult = invalid\n\n# tcId = 153\n# Incorrect IV\nct = 416221485a6cb98ad1342ea9a12926a9a133ead8bd919323fe789bb8f89a4fcaf81e1be54f9d358e\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7\nmsg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1acce34973526908c\nresult = invalid\n\n# tcId = 154\n# Incorrect IV\nct = bf6a53286fac48e7f25d89b7056b27aa917d5b54c0d3171dff369f7249153bf09da5891eb4dc2d88\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7\nmsg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1acce34973526908c\nresult = invalid\n\n# tcId = 155\n# Incorrect IV\nct = 99d517a1321bb633b0d5f3afda2372d3abf68b41d13cbfdffc78f173b88bc4b97efcab2b2904788d\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7\nmsg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1acce34973526908c\nresult = invalid\n\n# tcId = 156\n# Incorrect IV\nct = d92456bc77a268ef71cba76064a1b772d1fee2ae4f0ee3bb932a2adb2b031796b9eadb51753f2868\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7\nmsg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1acce34973526908c\nresult = invalid\n\n# tcId = 157\n# Incorrect IV\nct = 5bb54630ab8d73a040f0f87e70e263d1aeb2358bcdc0dce6994d0d874452bbd8741b7ec1d59d8298\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7\nmsg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1acce34973526908c\nresult = invalid\n\n# tcId = 158\n# Incorrect IV\nct = 4581d6536039db1b23da50c648777e90c82d6128bb92e28b2974bae1141543a19a1592fda1fbd61f\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7\nmsg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1acce34973526908c\nresult = invalid\n\n# tcId = 159\n# Incorrect IV\nct = d35bc67e62064c34f48150999ba30ded475d8c75978f45737320f23edaaa7a40d7803fc61add34a4\nkey = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7\nmsg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1acce34973526908c\nresult = invalid\n\n# tcId = 160\n# RFC 3394\nct = 64e8c3f9ce0f5ba263e9777905818a2a93c8191e7d6e8ae7\nkey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nmsg = 00112233445566778899aabbccddeeff\nresult = valid\n\n# tcId = 161\n# RFC 3394\nct = a8f9bc1612c68b3ff6e6f4fbe30e71e4769c8b80a32cb8958cd5d17d6b254da1\nkey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nmsg = 00112233445566778899aabbccddeeff0001020304050607\nresult = valid\n\n# tcId = 162\n# RFC 3394\nct = 28c9f404c4b810f4cbccb35cfb87f8263f5786e2d80ed326cbc7f0e71a99f43bfb988b9b7a02dd21\nkey = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\nmsg = 00112233445566778899aabbccddeeff000102030405060708090a0b0c0d0e0f\nresult = valid\n\n",
 };
-static const size_t kLen77 = 32019;
+static const size_t kLen75 = 32019;
 
-static const char *kData77[] = {
+static const char *kData75[] = {
     "# Imported from Wycheproof's rsa_pss_2048_sha1_mgf1_20_test.json.\n# This file is generated by convert_wycheproof.go. Do not edit by hand.\n#\n# Algorithm: RSASSA-PSS\n# Generator version: 0.4.12\n\n[e = 10001]\n[keyAsn = 3082010a0282010100af3897c38ca932c661de8cd18315dcbd8582e98f9f9a21d8cd822d4d1bf1ff1d1bb98dc0ac25c4c268d82ec61dbf32dac496eab4622be114a9309634cc85c16036088026da96abd350152e549552500d6ab9341f6b695c0d4d160f6d50fe97519b44cd74edd65bce876db5da9adeb87a7cba1c5c02f0d0fba690b4ca855024dceee68d04f48679d5c63ec87fd65e1e42604d32f0453db7e83a1bf4dbb8230308bf7c0e36013d555429c6650d7bf576b37b25f420798b22842340e370702fd1cc0fce98a407fff326017dd985f8c64bb6686aa274b664ca44e40de1cbbbf79ad760693c256f820d0dbdfcaaa440b0e69899b7b9bb2911082ba957c4b188e6d6db0203010001]\n[keyDer = 30820122300d06092a864886f70d01010105000382010f003082010a0282010100af3897c38ca932c661de8cd18315dcbd8582e98f9f9a21d8cd822d4d1bf1ff1d1bb98dc0ac25c4c268d82ec61dbf32dac496eab4622be114a9309634cc85c16036088026da96abd350152e549552500d6ab9341f6b695c0d4d160f6d50fe97519b44cd74edd65bce876db5da9adeb87a7cba1c5c02f0d0fba690b4ca855024dceee68d04f48679d5c63ec87fd65e1e42604d32f0453db7e83a1bf4dbb8230308bf7c0e36013d555429c6650d7bf576b37b25f420798b22842340e370702fd1cc0fce98a407fff326017dd985f8c64bb6686aa274b664ca44e40de1cbbbf79ad760693c256f820d0dbdfcaaa440b0e69899b7b9bb2911082ba957c4b188e6d6db0203010001]\n[keysize = 2048]\n[mgf = MGF1]\n[mgfSha = SHA-1]\n[n = 0af3897c38ca932c661de8cd18315dcbd8582e98f9f9a21d8cd822d4d1bf1ff1d1bb98dc0ac25c4c268d82ec61dbf32dac496eab4622be114a9309634cc85c16036088026da96abd350152e549552500d6ab9341f6b695c0d4d160f6d50fe97519b44cd74edd65bce876db5da9adeb87a7cba1c5c02f0d0fba690b4ca855024dceee68d04f48679d5c63ec87fd65e1e42604d32f0453db7e83a1bf4dbb8230308bf7c0e36013d555429c6650d7bf576b37b25f420798b22842340e370702fd1cc0fce98a407fff326017dd985f8c64bb6686aa274b664ca44e40de1cbbbf79ad760693c256f820d0dbdfcaaa440b0e69899b7b9bb2911082ba957c4b188e6d6db]\n[sLen = 20]\n[sha = SHA-1]\n\n# tcId = 1\nmsg = \nresult = acceptable\nsig = 50dfd875f0a46683f4783667b72993151e6a69e2954538d806fc362725ac6c05d7cb2b99b28b8e2b1c911402bae45fab0270b0eba744e97c00eed757e57fc0ea839421587b3011237adc3373963dfd3d31f5d254a6d6c206f1eb360e9b0ad3675250a4b0cc09f6e63e1bb578a440b2a2a83296056949f61b81a5381e7d05f24f593c471b43d0b408b090af63893bbc535ccf9e1a6c6c96186e59e5428999e2df768ee7ccd4a7ace1feae6b0794d44688ce59c3c5086e5dffdb572abbb4929db6ce219257421aec6f94fdcd2f519dee15d3a0757e366a3942d606937701f5d7e4a1ed9b903739e7c73d98bac19075f050b782225824ce3e28a3175384dab91935\n# The key for this test vector uses a weak hash function.\n\n# tcId = 2\nmsg = 0000000000000000000000000000000000000000\nresult = acceptable\nsig = 3b32d1225fc5702a3b4fc4bd29a0cb84e0ad17f8b9879d5d8c870f12ad5a77e45995bfc79f6f73078aa76dacfc2160bd322f5a6854604da364b44d267fe13a9016ab408436d5fb2dddeee07bf0d936b7415f565e0b0d9a0cecbb2a62677a3059d07ffa9a191ec7dd5b26914aa15084c10b3ee4c30444f5777901f15f693077876f3691845f32e94a5ad991f6135a7d139281fbf01ca27a889e93d07a79e48c2cbc02847a4ba685ad4b84e1459fbfc848dd203d04361df1441b3184414704ccfad2e7f5b2dd863cdb1ae52989e82148a1c6bfb605bbd0f38fb7755c7381e6392746477d96304444a1003307f7b21faebb44333d88435b3ae0248729d17cf83e81\n# The key for this test vector uses a weak hash function.\n\n# tcId = 3\nmsg = 54657374\nresult = acceptable\nsig = 719d263205cdbc0d8a9af580628386f68501f29f4026dad9116f149fc285870ac06f570a3632abd20a01d76f617b0001e88ad7606f0a48bb49a8ab1331ce61439ed35c7e45df9c22e54f499309dc2bde89ee9edc8dbbf9b25b60b021f25ae11166a9fda31a0f3a84efc891fe436e3b22e3e0a6c0f2dde3868179abf673848a53ee235671eb401e3b79faf94ce508a7ca3431c2ade11b7fa629ed893881ac731d6d673e5ef4d5ef7f1c12145c9d060fdbdb49fd43db4fdeddaf526cda93dd1a45636168e1b9115ba41e17adcdd95e6a1b7525452244ab6f46cfa01bfa787fab605b82c43a2f65d2e0b066b34b5684369d3ceab10c37a73d3c979be2ac996ea036\n# The key for this test vector uses a weak hash function.\n\n# tcId = 4\nmsg = 313233343030\nresult = acceptable\nsig = 1ad9d6447423c4436a96c17407f8ffbcb8a41ab5421fe319222899e9091fd219690a97f801113d33e13fb5920335646616a35ce4996d63504a2c0dbf7172533b06738706ce20484698cfbd24eade67ed91e6b985ac2df1f17c4598125b2439286c9c01fd10901058b7318f8cc49aadab349560d473c30c3389905311d78288f900cab33b5db060694489a018c2552e588f32832820703e3838b44519ee9430eafd65076e5c8195acbb85ea1e4502810ac13ed72614db0c4bf94ad83dc95ca2bd47688021a56429c4b74b1acd82f242aca266f8a02defdae8b47e12d790c6a7c157d2bf530d50134b1e7c8446bd13884f3de0d44fdca612cd3d4260b6570ad0d8\n# The key for this test vector uses a weak hash function.\n\n# tcId = 5\nmsg = 4d657373616765\nresult = acceptable\nsig = 19f7396f4f538b1dcb82f556ba9b4817aed67eb97229587db7ea1d70f5fffb2af67f4bdf31915ac5c528648fdafa19c21e41d868a78709ec3a1f1f9a4d992c8e5dc98ee7668e66812bac88d39721e6bd6262679652357be5a5d54569ec74a0ab4e9c52244a927b1472d97368854c1dd1bc253d7618d5a94d1e64dc1630461c1c506a5323583e75fcd32b2e30efcff352250580dc8b780dfe1abd5e2ce4b2c58b17f9a95b177e4302e99815aa1de7e84050323cda3fd9fa0e22f5ece22278f075fbe3a09874a464795cb72080a3ba4d5a94c2aef5733fa3b11a9a0172e761aed2eb7e364c885c6fb66c54996d92a98ecf837ae2c3e55354f56def5d71c09a7698\n# The key for this test vector uses a weak hash function.\n\n# tcId = 6\nmsg = 61\nresult = acceptable\nsig = 640c44887275af542fb28ea33a7cc1c05188481d69c8a46d05a3651abb658d7ebe5c5d955c0b27ecbc2cbc05d131910b563e56409d2d0ffd09380a880c58324bb77d4d91c64d94d4f50751a046e1f2a617c20bc34c18636389c89fae170370da1c83c3926431ed164d0518c1fb8646aa7ea43c20695fb9bb1a34adfa2a78bcd97829d87b0a87c9d8e510d25a51ec1969c3ee0b8a22aad0394a36f0a98af973f7fac61e4f9d5c6c0c9b6e703c33e28b39e28d9a65e4f451d3d5ff6ea369f65a38d93bd91b30459f4fd1ef5445dd6ac45715274d3ed28278424324a52fc1be917e4ead14a94fc2baa3e5101fc37f8f1beb2f9601e44c0789c325ad2189c9d4a2d2\n# The key for this test vector uses a weak hash function.\n\n# tcId = 7\nmsg = e0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff\nresult = acceptable\nsig = ad5150442d1b552326200ff1fe9bc797e4be9e3146b92b269a0b2acfb18e7ba326319c7752ea7e6392854a5070f3cf09e0ec54227b16526bc13dc8df4a7ccde94c7237c4d49de949c2c407679f8aa49be386e09f0e35e6a3fece34273a7e88b91a658d3e002a939b16637ee152398ba912284f2d3726354616c155cde76df1fd421936ce213df0a4f84baa01b111479e1c4593cec97a609e2fd54d0350d7f08b2a9dc094c6bde3907583da25f3d6abcc404d2a321282d3a17379137e5ad04e544efdcc62af54a544ae1c17467d99a68cd8e20daa5fb4f906e7528e306688ba58e80d41f2b0c6a1801780cb6b6c36e5be80d1da4e0af005e217d57c3fc26345da\n# The key for this test vector uses a weak hash function.\n\n# tcId = 8\n# first byte of m_hash modified\nmsg = 313233343030\nresult = invalid\nsig = 4f732634b50d2ebaa205b8ea73349ffb95cc494b4c8f722de0569c33c2ed4a977095e03e87abe532f48e811d86c8185042cc0dae7cbc59cba0f0aff6dfcdbabfa3dbb2e18e0033cba1cb2661d289c15aacf45469bd5772de4bf378fa4cf4adc7dece05436781c4ff1085dee1ede3f3979d553af3c68f42919ddfd151710644c80c8d1da6cf4cb51f9149efe4e7921ee2f192f057dc6690f6db54a1affd0ecd0d8c205818bac599856fa7729ad63332c1aac2a0148102f549b11b8f33afa638710abae7ab052ba118af38fa87c7f6b7b6f722b513c9c202ba47d3c7a7d0228b535e5f583ed19a014e2e81e4495dede1b72650a4eda669a0e76e78a40b46020c74\n# The key for this test vector uses a weak hash function.\n\n# tcId = 9\n# first byte of m_hash modified\nmsg = 313233343030\nresult = invalid\nsig = 52c4c54d30d822b6c7d1741395f95dc303f068680efd2bbbb864c0cce58737f3ab12f5a086603b6806812e3ce39330fde071a6c113a7f9f64c9bff494832f0bff229a0d40e4b67a6e505dbf942af6eeb700b4e6b6e0936ee30fa1a25710cabfc75348a30c951b84f975789e0fc78e9298af5f3f2cfbe9cae763e127720c8451647d3e9c39efc19761c3d7a0c880ca7f84d0737f59ac0e12a32863a34888518f95edaa1cc057e1bb6137d497807b878c91536e09a0a4514cad144822bd7d10c61d11a8810b9d5b81b2127bf626540a5b1af5eabb3db40bdcb528c6bb115ffe61d107d3d593ef2edb375ebf25a91d17ccb63f1f9be27127dc0d00c58e8f6b5f3bb\n# The key for this test vector uses a weak hash function.\n\n# tcId = 10\n# last byte of m_hash modified\nmsg = 313233343030\nresult = invalid\nsig = 5b7524c140e80b5fbded9106c9d731233aceaadf71580e5b5632f62c298c670fcb0872b1ff9034a27be61539484d477a3b56e1557b7e6f851ec0aa74e4b6df7b8e0d36771cccdc06c8a1a076a803cd31b1abd1c8037be9fa4320a339a28d731d2824070d7fc816691a6faf233c83e66c598943d41191912edcb298fbd35164c1d5d4e35483f477665a5c0a4d518e77ef60b09bb4281c47a25c20a1a91f6a1749ad0a94145b3c47113ed08e3ba5e938a751e1d1b282cbd48ae980ae02a41604b2f5ed10",
     "fdb6f1ab3427cbdaa9467caab56da29a2290b92e6be75f242fe97b96e55545cb18216bd5b654cd014107b2448ac33a833682bb4f79401be44498655687\n# The key for this test vector uses a weak hash function.\n\n# tcId = 11\n# last byte of m_hash modified\nmsg = 313233343030\nresult = invalid\nsig = 0a1a47c81b13e02edac4ee16a40e84e1b400285feef1224dd787516cdaf9c81431eb3523226d95856f83c0e58f804ad9c0765f5173dce0268a6dd73d65981a678bcfaf867bcd880bab60b779e032ea7ffa1c4755fa2cc0b67f1714e1db97603b47285e4d43b0e4c1c349d338f904968a8ae6a86683e840c3018186b4dc2d7ea58213120d1dc724a3fe72c980e148fc9892ad4ffcf8336d2f0d99963edc2ec7f3bc5382db750c3c6ea34d9a2c78baa9dadb98cf30361a91aaa01a12dba123745796e13eaa3e200c725a999cd84063f14657ab51ce76f7743333dfb4b74af77e8bd32092776b892430beeace6bd3c2f59a364b9820d31bb3adeca568491fcac10a\n# The key for this test vector uses a weak hash function.\n\n# tcId = 12\n# all bits in m_hash flipped\nmsg = 313233343030\nresult = invalid\nsig = 2b69fdadae6e8854e0e4aa6df667d4cb4e278388a25b4c37f90d45d425bf4f9efdf078cc2e7888c1ff71c2a593a8982c19a6c5b2a9b54703bb007c43226a2d51c35d011a981dd6bf3f5c7c68520468d42417b4f11f62e7bb35c4520bd7d02b74cef0492ee32caabcc35b42166af3a7fd3cc8dac12474a7c71b87f8f018d7631f6452bc7ddb35ceafa5964b010ed1595ac53098557dec598a0c7e861160949e1e5e43ce126add866eaa035b76d1b10724994703178faa228aa0c3ca90f1602dc90a53e8b1493b44192b4488068b802c3ce91c2696c336e1b789e9cf4f1e153cc0eedc8c7f23c580d842078199a263e26bb6ebe469612694e8c6121d97edc64918\n# The key for this test vector uses a weak hash function.\n\n# tcId = 13\n# s_len changed to 0\nmsg = 313233343030\nresult = invalid\nsig = 63384fa945e41c0e4343f43ee12c115cd021737b7cab9c778cc451d180359c9f39a1c457ce5308d029a508c19ca61fe3434bddf28e836726e6e6d4d635cc3d265c8918b4bd921971fcc7fe8857ca330d01cca47d0dbea91ffa7bc813240cd9a81f799f961d00adb060f599836987f5ae194e22262d27f216dd48497205fbafc4274e97f427ec99ab29c6090a62ae6edc777a0494d7e9812dcaeaa51c436d924a38d8c731f4a82243f0fb132fd9f77403f9f0c7f5569608b530b61a69ee8e0c9f32da8d5bcdb0e8370e964a952250b3fece411cbe28d39ce7eabd54f23110f97fbbdb902966524493fd47833addea2baf31979ef65e9ea5f087f7cc898c463503\n# The key for this test vector uses a weak hash function.\n\n# tcId = 14\n# s_len changed to 32\nmsg = 313233343030\nresult = invalid\nsig = 6249a0d0651ea272e9308178eeac74e98e48822bcfa21a2663689e1cca6735d5d298be1d1aa3bf70754a91d87342b78b385cbed55fa761d6ce58ed81411770cd7f4d0d1ac96b2966caade37db00e27c74b497cbbd76f9fa13c08596880a3357cbf05e42f826cef564e707e378af170f9ac892e081930b20183925d6f4a8e934829784472c49c9f384fb631310b376282476130750ef3de53fbf564f2d2cf3161485ffbfd0b96d98b47d4df23dc35974bb853544389fc6ff6eade53d9f4f14f0ace492eaf59dce778bb4398478a531a5ea9fc3f230e0bb973eb173a197d840d1eb080632cb7f4f0193e82a1c9571127616609f55e9f258b42890189a70adee22e\n# The key for this test vector uses a weak hash function.\n\n# tcId = 15\n# salt is all 0\nmsg = 313233343030\nresult = acceptable\nsig = 0580894932c20ad27584f68b560d97e095cacdf2b69286eca83396ef0a9ab5d89263ca8e90f6c7fa59736d0d99ce437f6409f56a07b6ccf228965f556f6ae9f1e505a512bda0420e177535582204fdd933d510dc3ed9cbfd80ae37d1bc1c621f06d32162e0509f2c5e139953796cf306216106ab4379030a26d87b9c761bc9b35d26e296446eae2c5df7a54ce98a155292a7bab987c7eba884b0638e659d57b85ee9093401ec11514e67bd0106fd59542470ab328bdbead97efcccf9d0f85bc6ec1879a2420c5ebf6aa53afe3f62b8197ae16593ef4049c0e8d76b2990beebccb407822701fef5e8b5210982a9f392192491113a7e2e69bae2b1779554d97435\n# The key for this test vector uses a weak hash function.\n\n# tcId = 16\n# salt is all 1\nmsg = 313233343030\nresult = acceptable\nsig = 8f183006f11363b35cb506412c27a1b2b12e0da08ae92233b0248d8ef6c4981ed0993a447e6a5e2336eb33fd8145e8b1465f5ce3cc157bdabca33a2aadda31223ce2f0e8c4ef20546d98476f889064d8e95043ad7923bc2e97498580085fc84a36bd14e3fd056d859a677c3fb01868f8a2bd27d08bc52056d060b25c9b5361871e693cd084918fde00f2d6794a3975c92436dca1d07f20f321c0e5d0a52499be6c1ea7be2ebfdfb7982bb51e72a4306ec1ed7484fda2cdc3d38655d92bded1541387d90ceae0ee0e14837ca61c3acad3b3b06b45b84819fbd4df0502eef53139ebf96c804d780396b397eab38f2ca25ccad4cfc8bc4cebe70386d7432e876ec0\n# The key for this test vector uses a weak hash function.\n\n# tcId = 17\n# byte 0 in zero padding modified\nmsg = 313233343030\nresult = invalid\nsig = 6dc8af93242468b652f14c470730651d6b2de224c15701f025ff056a7b0d72b383fe944e0e4537ab47ce5818e13787e652c373b614543da38a2708b6a522e4c3ffb5790a16d2aeb1aa69610a7dd858ac9bf415ff7c277cf6c9cfecff85df6bbd400f000bde74206068a658f27ccac13055c50911af77d1647c582d5ee140c971701f15c5520e355d32704e383fbf8c4fa571c26a55c6c49ebf4b3f6bc26ef939b575ebeefd4cad99afcab0a9ecc8551e428b9858bd5f6f8d497fc75121d0bcb651bd739d93223197b9306fa6842f695fe651e9b143023b962eb166d21384bebcbb99bc9af257b0f8997da90410646f7783ac65741171e7c94a10c3aee10c1a25\n# The key for this test vector uses a weak hash function.\n\n# tcId = 18\n# byte 7 in zero padding modified\nmsg = 313233343030\nresult = invalid\nsig = 89c0510bdadd44bebee7eb52cef303a1b751539ca4ad31752a9dcf3af755844eb1b47d1879a4da10ff766d47df1871fcf6fcba06e101134c304e87f1d8d255f5363bb123d56c9d2bb5c3056aa5561cfa772a1f9265f714fa0a5118356699b57efdb2c2c553af1ff41026bd8c01512dc760ce0d62a88d868d46914f6ac3793be6aa65e0059e61babff5a8e58c3bd459533013ca0bb19e63018c926c11e4f910b18263fe58b259f1e6f517f0241d4787cc2da771039ef73db3ab3bc364f65a672561c533205740e0c5a0ff754aa90683d3a8637781d3d4438acb8f917d946543f9054a2d032723e0106c56c278ebf63f66dec7eb6022a5afa352bbd8c19248e6e4\n# The key for this test vector uses a weak hash function.\n\n# tcId = 19\n# all bytes in zero padding modified\nmsg = 313233343030\nresult = invalid\nsig = 5e0670e048659ad9e3b9ceb3a07cc4a549ad80fab3f76b532dd077c2e841383a781ca0bcb4de50dd0f737f923fe03062c2d33a9ae9f4ce827cb993369088c8cf6dc3e1765d09d836ed63c3f6a949d2726f429841c6b945adbb8d10d5d7d3f0570d30a813a32c20633f03a6cac4850f5aac776c7e573902af39daebddb205efdbb057662116c41fcf9f46d1d0ab536e300dd9c56fb7dc702fc0385e25149c64cfbb5fe663660feeebbfa009bd40a9d011203a2b216f449c5b949805abfb766a3c2a1d8dc8fd37c1ab4f228c0719f72e223c3d4937fc871f6972268313fba32788f79d20df3ce6e0a540f061711059a7a259f5c38e0389a77e61f13b094f1c4010\n# The key for this test vector uses a weak hash function.\n\n# tcId = 20\n# first byte of hash h modified\nmsg = 313233343030\nresult = invalid\nsig = 5694842681c2892a52cd903b55004859553dd7b42f85ef93492c74278aa4ded900a13245b4e3fbae340bee5880e2be0ead44c5ac0d529063d9a22145ddd9652259b0a134213a56b7947c66e525e136dc86d1ead3e2d057018085b5cf03a2621683d59e60cf7712515343681f857821548dd55092644219015b2e39ba4efcf3ac8794f942e1e7f9285dbd7b24eabe422a23e1c9e61bb42f3c204f572ffda99ba97c90cb0db3936c262177e1562fb333f9cc1b859f55c9f3645e14086804ee965184a436ca13fe458ad74818b554ac834ebcffa4d54cde2a82233da5aa9ab0de031960e1cf48fb00aa89949f8cbb9e149914aa401ad948b32f90f93505706a8cf3\n# The key for this test vector uses a weak hash function.\n\n# tcId = 21\n# first byte of hash h modified\nmsg = 313233343030\nresult = invalid\nsig = 012739d50132db2da632e03fe9126b3b3044f3c71aace80cfbda5c58c22083d0be128a972a6dfdece0445e19161713f33bff4a49ca808c5d0ef2e79de010f3e28eeb00233e2ecf35cc7766b1c130912557beae44717524da4ba553eb2d4ecf06a331c9a82ab6182b02c7143dc9ad1bb33075d234a6c40c6551c864811bb1a4cc8171c6d814d79bda4647f2f11df515132f605b38f080ed400a976f36fb81e58ddd1e01b7de4f96a952e7fb13b2169f70ee679f07b99abca564efebb234a0d66c24bcd7710f89839c93ee6868341327a14960c0e385cb786888e8d462668f0d5f1db94c69a3b4f271e4e7cb64117a0004c87df15ca9fca63f19a0f49a9b61da63\n# The key for this test vector uses a weak hash function.\n\n# tcId = 22\n# last byte of hash h modified\nmsg = 313233343030\nresult = invalid\nsig = 9e98e3431040f3f939def28cf782ba23cdb0a92ceafddd4c6469351c639780a195140eac331416d00a2f846582433b5141a3021459a2eafc229448b178c376c0f6ad8dc7dc1a0cd048def48eace50e8f77a0345cd3666d20389fdeafa3d4474d50a41b7bc6db000b128174c82df7cff6bd17335dfd3f6d954e065ada694ed33c291b82191a1a90cbff58dcfed4f0fdc720369f74a9b218d85eb14c0450e1523b688f5ea1e5ec9ff10d39a42f58902f6639d0f8e760d8f6067a57921515b2edd8338cefe09171decc00a50ae806a47a7d35dda7376aa962d63b0189a63642d33dbf9153a03c1e496c01b9ef74d6871e1d63bb61719b3ef5d40f4dfc15264a07d8\n# The key for this test vector uses a weak hash function.\n\n# tcId = 23\n# last byte of hash h modified\nmsg = 313233343030\nresult = invalid\nsig = 76533757a9a6f4efaf59b8e4fa38c50cc7ac5f9bbaa7f45583ef79dcfd50afe07390f572",
     "c5880c27badc4ba3130494aa396540b8fa3d15d1d510d0d0ad7a07d3b44fa989957d6e50ad3921449aa6adea1af2879cfba9f8f045f5c3457fdfc53525c00de55ca0069e239b737e0c02b497c5f2f33f66c9fad5599ae3168bbb1b0dbf40f4d941ad26a9483488d06276b167d089d242cc423b785a4c34568817af7747782db559a32610cbdb368511b7ccb5be09c0ba5a21f677405c73a43088b193d445eb54416d282fab82453ffbeb68e3a1e5eb33a705db4d8be0149817a255c40a53040c05395abfe2c56fae34b8e2ba083955dce77bb7cb5e5905d0ad9bff6d\n# The key for this test vector uses a weak hash function.\n\n# tcId = 24\n# all bytes of h replaced by 0\nmsg = 313233343030\nresult = invalid\nsig = 80fdee23937b15c70116b060340bc7a430914506880dd3f71b5fda9f24964a9ba69454e7929c529327a7bb648c2789d3b4d5d2ca465c74b7659cf445e57a8e7d11e614e34b2f9917139352c0f322428d7c1dda1fa11750a7eb9e7558a6152114f148a90a14250adcdc8918dd0c748b71ade03126ff13a8a191c024291bbb1ef80e5e559a27d6d204247e241864ecff580c56b3345a803967aa0952b59a5401780299cde2cf1b783bdc3f8bff9ccfdf283896ecfdc995ecdb54e394add4fbf16c0904a5f581b4061bf00b2ceda8f7acffc463323584ef69a194f2ddc2c2ac6002bb5647643eba036f4ccf30472387c99b6e199a3a04caea8135ec82654a2cbe3e\n# The key for this test vector uses a weak hash function.\n\n# tcId = 25\n# all bits of h replaced by 1s\nmsg = 313233343030\nresult = invalid\nsig = 2fd19f1af2e56de93cd223e96318b336fc587fe333ec6b81b0b4304d85af72cd56dbce64d9d75f023c39e7d82307ea6504c81bb28119df545e1ac8b73453a87a6c1fff0619c537c6c1f98694b35afedf37540a70f4665c1fc8ee0cce2e29e68c821ff558433845ae46118179cb24ed247419bdc48c13b927e9d4a6da9e445dfb0a1d0d3f599ff1927956fbf04cee1f6e004490198edb6b9cc440ae786f74ddf257474ef3a5f273d87ad361434117ea0172e7cf4a8fa3f0768eb4c26cda4f8d0bc7ce90b2ad39b588897f85513d22ad0af86ddc0a2664ba2dab0b0832160010d743ac0a5ac69b00a68a148ba6c4ac36496addbeb188b58bab9e9b06a2f5e30ed9\n# The key for this test vector uses a weak hash function.\n\n# tcId = 26\n# all bits in hash h flipped\nmsg = 313233343030\nresult = invalid\nsig = 004524fd468f6b32c1e39aa51df5052e174d02851aa433871dc4c9f72b6fc5dd776a7e68f57d180f049d6f90c4c6d5aa21d0749d2232bc2e257dbeae0640b985706eb285b700f6480a29fbf42152f5505b91a73ec8cc80e17b5236dfedd15280e6de907080b339b116f644ddeed18361851ff25f0b6c174e49e0b33962086cf19bc4423f6ddca67c52ec62b8b664504b6a5d97c6d68e80ac522a98008b3d4deef1f0147f3574f4acadb8e3687b410c2f4e52cbe85163a26356dcae935581fd75434da19e1022bc7865ebb1c15c93968fa357e7029b328ba7e59ee6429d4858bc9acf78fbb68508d653c73b97da4bcacb1088ce88c651a7d90c7951b920a2ee80\n# The key for this test vector uses a weak hash function.\n\n# tcId = 27\n# first byte of ps modified\nmsg = 313233343030\nresult = invalid\nsig = aa33236940904a0c0c88e3f7b9744343c4577854cc017e8ab0aa08694393bf1166a55b56f6589fed56bb4bf4c87151407363c36a9530d200a92eb7a04f2451245b105d1d44260ae10385edb5edc6e118e7b27f4270fa2988b1dbca3fd21e1d3ae6d62f24bb4af5138eaef53c598fabf108ee78a6a986c14e5c472f71b24aa67a48c5986ac3962a6eeb9f35d0f09d22f0f9a665cf80e08a19e9cd7bed243af7edef90e5a025fc2b8b0b3ea49940836e9971d3558defb2a08ea6b7c40a4c3db6fc4a7aa4891297f9c9dc92d16b2e6cfb7f558603fd17ce5bada483688b344278e27d05c5bcc1d2f44f91cf24bcd50b53289c744ca67b909ea04fe1a1bb4f680b41\n# The key for this test vector uses a weak hash function.\n\n# tcId = 28\n# last byte of ps modified\nmsg = 313233343030\nresult = invalid\nsig = 7fd4d853d91dac3e29a1d24df4586aae452aeb7d997ed8a039490c2257a259c2fd4e868320a5391d5cdfe13905ab7fb248d722a6932ea15750d8a26b810d10d5c494639b88265d385516acbcf6dbce502b834999387635690b65b65ba1053a42f909b05d590498bfc9962db35f14a1ffa10cecaef5dbcb6ce73b783ac4ec4119cc22f976f3e91be86d67b0a1a45f3b8b757f893bca0f717e9dc4184aac01296e18ce1a1dc643a37635d2ea0618793b1624c0c0da74a46e422df25c56a6610e02a723bf80f147f10939eed5ac347779dbdcdc4b994cb4cd3388283cb6a04e4837d903f75ea7d08a43d334be80b3c05a6b0806502eaf4aecad28abb86c790cc4b7\n# The key for this test vector uses a weak hash function.\n\n# tcId = 29\n# all bytes of ps changed to 0xff\nmsg = 313233343030\nresult = invalid\nsig = 952e142d407387b8bf807790bbb1c8bbf73f86cf8efb897157d5f15ec6579ff2478216eae543b9e81fa45a015070d31f5e8087a987df01e66c332cc0626c984032b3368621b53157a7531d491e70b756a2112a4644486ea74eed5536aa63e5b992317fe1a68cf1f37109aa4709b6347da34c4f846a82b25d51837df3bdb59a41e6edccd92e25f4885d58a164b23e11dbb9ecf3981917ae8682f7ca8606d770114527f34799686bfd3b6e000df2e719fa88d6272bb308403cbd3b216133b60ed74448b04909dc24e2bd3005673667157fa336f3934da3b9991f5584641e67b8dacae279d6e92bd564364719f8a79415c59e1150281ceccc23a312f39c783f0c4f\n# The key for this test vector uses a weak hash function.\n\n# tcId = 30\n# all bytes of ps changed to 0x80\nmsg = 313233343030\nresult = invalid\nsig = 3cc78a8aa312cb60d3452c235d8a530b3f32c376eccf1c981f87658ccf492989aa059aed5a18971182d1a083015c2616b6f5305e37843e8b182a71f19d09a03e46447ee6a4b03846b6cc629c2f39dea75aee0c79040cf6ed930abeabda242032e47082ddb23e62cbf11379022ae08d5463837a10d22d9faf63f3436c8a762a030832333064e73642a01a0bc722d39b11dc720247081280d6790847314401a4def0b1ac9e307c8531fc1136efca55b19c4d0697af168f81c62aa82a8105566b46f690209b6829b7238f579168e11ba1f02646c4a8557a4b15d2136fc2a2f9a46da9688a5c3ae61e91b2463075b5422e82bc40903afa867cd7a77998e097b921f9\n# The key for this test vector uses a weak hash function.\n\n# tcId = 31\n# ps followed by 0\nmsg = 313233343030\nresult = invalid\nsig = 3e68229146bee8f86f1a85439d59132c20f161762d35e117b46a8c9bf6ef7a7b3a6ffc7e83382c8f0550b491c304c397d8240ede43efa5e1cc889e90d0a5a7b829e885f72f764d1574478c2dfb9530e42de5003121a2aa865daaf421e973899c8f3d6479b80b500c10e1b8375f8fee56b1fdd5fe1d1ea4f0ed1ab3e42abed62134ed5ac8d513a91ee782c79e92cc3e76bd34fe66ac3ed4f6865a6c0c5f04c3b430aa2323c9ea5a0409abb64c1fc95af535a3cb45596323431e208640d6f8b9d425bc2c75f0f2f431bb1943198ce80189755569b8c1b09acc729122357de8c88d185926df71ecafcb0122edb7097165337c83340b9676ead12c692c4025177d88\n# The key for this test vector uses a weak hash function.\n\n# tcId = 32\n# ps followed by 0xff\nmsg = 313233343030\nresult = invalid\nsig = aa68dd72cf47df9a0d01f5e7bdc297b35a5cae62846e707b0b8116fc2527dff6e6991ba01e8b5b84bc20e82cbf26b2afd524c68bbc3a6c872b6fcaa92e4fd55b69ce5b773861b3308228f09cab60387779da33213724669fa119ada65d4945bf8c3af6e445584c85f553b17ce6bccec8535e66952c34c9517bafe73a33793ea80e3be07d607d4c7f047198708f973e4f635f190018278824e7e5c8970413239e48854e107b26535085c61309b62a8b2b96320523cef60f6ec30d278bbaf462221bd56950a1f042063148685642d5721ee35e5935aa80f82a16457165b22ba48cc79c4b2cfefdb1b88570aaf760edbcd1f8fef2fabec9d70e3e425daf7ea47d66\n# The key for this test vector uses a weak hash function.\n\n# tcId = 33\n# shifted salt\nmsg = 313233343030\nresult = invalid\nsig = 70ea1c8cf6d950da9cf4f11da5e91089c7b60097004337aa1394e004b58ea4b722decd23dd2260095ff8179f70f9a7c29430247b4086a341302a36daa6e925e42d192835c7d69207586aa6c97c184f17ab6f2b6bb6f97a3d866a2155d5199a6cb0121ee1a31030635bf505c0fb96d883cad6050bc1802769311ad1ea23aaf884e347d2a2ed71c460285d0d4d064bd276be732e899d01ad3b5e08745732fa1bc74622bd20fd0a53320ee5b70cecbb65ed51d6f29f87774b36f26ff66129178beeff34630df9af9ec80cea6b3e307614be9a20a1038079801c24f089847404252e5ca4d60c1613d5e6b1c596ed7a09ec162875664a6bd5168d352464e13ee81f2a\n# The key for this test vector uses a weak hash function.\n\n# tcId = 34\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 84fd2800622e4808ffbf30bde60d9a55c702ba39e344230d8d5a1fff44be6322abce6f1c7a702e2e1c3660c891fce6aa3833bdd87a6d1b28b629c19d01d24d06bf404d54e444f055bcd659815944daea78df4939fe6912f9c396cd9139852a76aa8f90669013e3307ca045793044de1702e98c3d2e02a4023861d13399f489fee3a3a1ee91272948d08cd6503f79f321bbb936910f36c63f8e24a3ff10908547a2818e9d5c954cf3564afc71884b47299e16c70f9f9d2affb68f2620acd58f5e4538f5b56adb6c7f4461d586e1de2bf3c99b7de01bae479ac124a59aea4d4df707dae47edda3bd3c74696fb62a9cd24282193f0cc43816279ee0e2683b82c8bd\n# The key for this test vector uses a weak hash function.\n\n# tcId = 35\n# leading bits of masked_bd not cleared\nmsg = 313233343030\nresult = invalid\nsig = 764e687e19fd6c0f60ef4767262faf217d6bd83f402f72c46dcfcc346f3170d67c3ee927b3366ebde5fc81d576bbf8a0da76ffe950a8dc441d4bcd3485f5a821b5d58dfe6567b7dd5a3a77f3062809ba7ce311fae758ef696d1b36f3066a054d11a38eb124b17b5387ca71433685c14042cf68a1ae42b749083bd852113a214af76c7e34a791c9819b59b261cf71fcb58812c52c9636153a893ec60372b24388f28eb15a806ef912052911661ed55b71e4ce3f5b16d4ed589c27a2a07d2c488990fbdfcd9760fb7b61d56af8ccf00e93814add",
     "5a41a436472d7c5f848cbdf269fabcb9452138b06f810f2958b04bf5727640e1d81d99f4e7d6b413976fb59ab4\n# The key for this test vector uses a weak hash function.\n\n# tcId = 36\n# first byte of masked_db changed to 0\nmsg = 313233343030\nresult = invalid\nsig = 452efe45f5f852f61c14e7bf357e58f1a601d3322ba60b7e4d09a226fbae5af2ed866226ad7dd0e658b00afe58e0f017cb218b28dcce2d10bb8b099d8c3a7b4fbc6dfc2d085fef16b5cac7123540e9623fc4704ddb48a3120c1753c2a4de13053e4fb61135375768ef35baedd1dbd31b1b4b51e8a7b9108c8c18faa5d55184e2aa693e27e4534a60627c1cf2ab332fbf13eded03913b310c29f48a09912eaf2128dbc0e402bfdfe5d10dcc3a7071fd12497d904038ceec21382a71ac9a0dc28260acdd23405a291b2c0fe2c9764b04f53db8e2f640f70cb57c452807a01f588529da21fdb8a93f569268c2e5b8f14ccc21e3c05d88a9856a76a58b9e7201b1dc\n# The key for this test vector uses a weak hash function.\n\n# tcId = 37\n# last byte in em modified\nmsg = 313233343030\nresult = invalid\nsig = 2815361aa080fada916df00abb4ff6745144271e36868facb4fd3d42e079b5f0aca5db90991e454f7349e9e8aa85517f8c5a148547c646f9d89dd38a18ecc439b6d8e1f1a67420af089f4030e310e3a9aacdf32c687946b1f2829364bf6127ec9211327793468832090a1afc178901946b552e399c5f4f83fc099c31c950d3f7b3913c13f93eb23186bef7bba43724caed7ddb3551e937ca006ac892d1f3b8933d9ca952ee0d307ca131b53fecc975b29b611a5c95585cdafdbe8f0037488b65d4b4a3bad17a784171264f257b4a7febbdd5a959d99d4e1aa89e6bac530d38acde8acdd068349332b32e05715bda82c25d2eacd58fe72d08af9fbe3ed60990a6\n# The key for this test vector uses a weak hash function.\n\n# tcId = 38\n# last byte in em modified\nmsg = 313233343030\nresult = invalid\nsig = abf40fa37aec687e46bc355e0dc8534f27e9bce3f9ea2d27b5943fc27730d38bc948557b581e548f46d47a18d726806b547866127657414f9b1b0bef341cc2c6cb80bcfbbd7c59112268c49d3f7fd896a4c121b487a99929d94606acf882569d9d63c92bf46232059a485400486558a5041737205709fb3996a8e0f697d4d98a7131bddaaf2000232952c6343a81cfd8d10b4a944cf16cc70c5b78b8adb0a10d690c2454581e5e36aa83bb106be6a753f0807e8c6383e32f6e4268cc91af1a67c09f85b43db732cf401414404a2bc378c7546ba6acf93ce409eb049c58c286a3ad8bb24a8390c166e6d7860a511ffb622a587d44040936238265def3ce8b0972\n# The key for this test vector uses a weak hash function.\n\n# tcId = 39\n# last byte in em modified\nmsg = 313233343030\nresult = invalid\nsig = 18215b1083aab4e4dc911b55332c2dfc7fe776dbf8873eaa7738d79e6529c27081b43e24ba7fe52f9d38933aa9a91337c1cd607e82f092b82895eee08ead942d344a813be0575b110e95e39ad7fa07ca1904926e526d04831c355059570fd24015e2ca660207b55a5bd45f2043f2704dcce5f2f992dc9b185221ab4eb28272cb5b179c6f934e218471f989da57c787e12cc1079428485104cb8cdb380e74d0d8bec8f75cd4831beae12379493f58db754c1f332fdf51d61f2d34f297dda0f761be3afef70ed769fcb786348301f954586f135fd55a67cacff16760147c5f38c796b4837ad5f0688fd0ea5e6567fe0c7f89803004c45a5343cffa5e20c7630c9f\n# The key for this test vector uses a weak hash function.\n\n# tcId = 40\n# signature is 0\nmsg = 313233343030\nresult = invalid\nsig = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\n# The key for this test vector uses a weak hash function.\n\n# tcId = 41\n# signature is 1\nmsg = 313233343030\nresult = invalid\nsig = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001\n# The key for this test vector uses a weak hash function.\n\n# tcId = 42\n# signature is n-1\nmsg = 313233343030\nresult = invalid\nsig = af3897c38ca932c661de8cd18315dcbd8582e98f9f9a21d8cd822d4d1bf1ff1d1bb98dc0ac25c4c268d82ec61dbf32dac496eab4622be114a9309634cc85c16036088026da96abd350152e549552500d6ab9341f6b695c0d4d160f6d50fe97519b44cd74edd65bce876db5da9adeb87a7cba1c5c02f0d0fba690b4ca855024dceee68d04f48679d5c63ec87fd65e1e42604d32f0453db7e83a1bf4dbb8230308bf7c0e36013d555429c6650d7bf576b37b25f420798b22842340e370702fd1cc0fce98a407fff326017dd985f8c64bb6686aa274b664ca44e40de1cbbbf79ad760693c256f820d0dbdfcaaa440b0e69899b7b9bb2911082ba957c4b188e6d6da\n# The key for this test vector uses a weak hash function.\n\n# tcId = 43\n# signature is n\nmsg = 313233343030\nresult = invalid\nsig = af3897c38ca932c661de8cd18315dcbd8582e98f9f9a21d8cd822d4d1bf1ff1d1bb98dc0ac25c4c268d82ec61dbf32dac496eab4622be114a9309634cc85c16036088026da96abd350152e549552500d6ab9341f6b695c0d4d160f6d50fe97519b44cd74edd65bce876db5da9adeb87a7cba1c5c02f0d0fba690b4ca855024dceee68d04f48679d5c63ec87fd65e1e42604d32f0453db7e83a1bf4dbb8230308bf7c0e36013d555429c6650d7bf576b37b25f420798b22842340e370702fd1cc0fce98a407fff326017dd985f8c64bb6686aa274b664ca44e40de1cbbbf79ad760693c256f820d0dbdfcaaa440b0e69899b7b9bb2911082ba957c4b188e6d6db\n# The key for this test vector uses a weak hash function.\n\n# tcId = 44\n# prepending 0's to signature\nmsg = 313233343030\nresult = invalid\nsig = 00001ad9d6447423c4436a96c17407f8ffbcb8a41ab5421fe319222899e9091fd219690a97f801113d33e13fb5920335646616a35ce4996d63504a2c0dbf7172533b06738706ce20484698cfbd24eade67ed91e6b985ac2df1f17c4598125b2439286c9c01fd10901058b7318f8cc49aadab349560d473c30c3389905311d78288f900cab33b5db060694489a018c2552e588f32832820703e3838b44519ee9430eafd65076e5c8195acbb85ea1e4502810ac13ed72614db0c4bf94ad83dc95ca2bd47688021a56429c4b74b1acd82f242aca266f8a02defdae8b47e12d790c6a7c157d2bf530d50134b1e7c8446bd13884f3de0d44fdca612cd3d4260b6570ad0d8\n# The key for this test vector uses a weak hash function.\n\n# tcId = 45\n# appending 0's to signature\nmsg = 313233343030\nresult = invalid\nsig = 1ad9d6447423c4436a96c17407f8ffbcb8a41ab5421fe319222899e9091fd219690a97f801113d33e13fb5920335646616a35ce4996d63504a2c0dbf7172533b06738706ce20484698cfbd24eade67ed91e6b985ac2df1f17c4598125b2439286c9c01fd10901058b7318f8cc49aadab349560d473c30c3389905311d78288f900cab33b5db060694489a018c2552e588f32832820703e3838b44519ee9430eafd65076e5c8195acbb85ea1e4502810ac13ed72614db0c4bf94ad83dc95ca2bd47688021a56429c4b74b1acd82f242aca266f8a02defdae8b47e12d790c6a7c157d2bf530d50134b1e7c8446bd13884f3de0d44fdca612cd3d4260b6570ad0d80000\n# The key for this test vector uses a weak hash function.\n\n# tcId = 46\n# truncated signature\nmsg = 313233343030\nresult = invalid\nsig = 1ad9d6447423c4436a96c17407f8ffbcb8a41ab5421fe319222899e9091fd219690a97f801113d33e13fb5920335646616a35ce4996d63504a2c0dbf7172533b06738706ce20484698cfbd24eade67ed91e6b985ac2df1f17c4598125b2439286c9c01fd10901058b7318f8cc49aadab349560d473c30c3389905311d78288f900cab33b5db060694489a018c2552e588f32832820703e3838b44519ee9430eafd65076e5c8195acbb85ea1e4502810ac13ed72614db0c4bf94ad83dc95ca2bd47688021a56429c4b74b1acd82f242aca266f8a02defdae8b47e12d790c6a7c157d2bf530d50134b1e7c8446bd13884f3de0d44fdca612cd3d4260b6570a\n# The key for this test vector uses a weak hash function.\n\n# tcId = 47\n# empty signature\nmsg = 313233343030\nresult = invalid\nsig = \n# The key for this test vector uses a weak hash function.\n\n",
 };
-static const size_t kLen78 = 27481;
+static const size_t kLen76 = 27481;
 
-static const char *kData78[] = {
+static const char *kData76[] = {
     "# Imported from Wycheproof's rsa_pss_2048_sha256_mgf1_0_test.json.\n# This file is generated by convert_wycheproof.go. Do not edit by hand.\n#\n# Algorithm: RSASSA-PSS\n# Generator version: 0.4.12\n\n[e = 10001]\n[keyAsn = 3082010a0282010100a2b451a07d0aa5f96e455671513550514a8a5b462ebef717094fa1fee82224e637f9746d3f7cafd31878d80325b6ef5a1700f65903b469429e89d6eac8845097b5ab393189db92512ed8a7711a1253facd20f79c15e8247f3d3e42e46e48c98e254a2fe9765313a03eff8f17e1a029397a1fa26a8dce26f490ed81299615d9814c22da610428e09c7d9658594266f5c021d0fceca08d945a12be82de4d1ece6b4c03145b5d3495d4ed5411eb878daf05fd7afc3e09ada0f1126422f590975a1969816f48698bcbba1b4d9cae79d460d8f9f85e7975005d9bc22c4e5ac0f7c1a45d12569a62807d3b9a02e5a530e773066f453d1f5b4c2e9cf7820283f742b9d50203010001]\n[keyDer = 30820122300d06092a864886f70d01010105000382010f003082010a0282010100a2b451a07d0aa5f96e455671513550514a8a5b462ebef717094fa1fee82224e637f9746d3f7cafd31878d80325b6ef5a1700f65903b469429e89d6eac8845097b5ab393189db92512ed8a7711a1253facd20f79c15e8247f3d3e42e46e48c98e254a2fe9765313a03eff8f17e1a029397a1fa26a8dce26f490ed81299615d9814c22da610428e09c7d9658594266f5c021d0fceca08d945a12be82de4d1ece6b4c03145b5d3495d4ed5411eb878daf05fd7afc3e09ada0f1126422f590975a1969816f48698bcbba1b4d9cae79d460d8f9f85e7975005d9bc22c4e5ac0f7c1a45d12569a62807d3b9a02e5a530e773066f453d1f5b4c2e9cf7820283f742b9d50203010001]\n[keysize = 2048]\n[mgf = MGF1]\n[mgfSha = SHA-256]\n[n = 0a2b451a07d0aa5f96e455671513550514a8a5b462ebef717094fa1fee82224e637f9746d3f7cafd31878d80325b6ef5a1700f65903b469429e89d6eac8845097b5ab393189db92512ed8a7711a1253facd20f79c15e8247f3d3e42e46e48c98e254a2fe9765313a03eff8f17e1a029397a1fa26a8dce26f490ed81299615d9814c22da610428e09c7d9658594266f5c021d0fceca08d945a12be82de4d1ece6b4c03145b5d3495d4ed5411eb878daf05fd7afc3e09ada0f1126422f590975a1969816f48698bcbba1b4d9cae79d460d8f9f85e7975005d9bc22c4e5ac0f7c1a45d12569a62807d3b9a02e5a530e773066f453d1f5b4c2e9cf7820283f742b9d5]\n[sLen = 0]\n[sha = SHA-256]\n\n# tcId = 1\nmsg = \nresult = valid\nsig = 20081f8894a1330c4d503f642880e3c30e398fc6235c24f1be752e2d49cd9493ac0cf999e275c4f89ff08f0d9ba4e264a332525a616d336bd9e822f41ab3f4fae2f48ec66c2e52642ed93b7cb944396fbaa727cbfdfc1f20aace99a6f2a74475c338f8d9f22a38cb5bc51752076503b3aef1e65e5a8f8583d9ae7378ded038cf516898ad06beb90a42b85764526fcea44f74258fa4efb1da253d337f65619181ceb832dfe285ce78ae6b15f204e23bab274e87445d9f5df97f41dc8e3a97736b62591d075744b2552f90bcf1b1393e1e7627ef1f985f2bbabd52e43a35d0ddf4c67126e391f922ef7b1bb1911cd6e1b303cb2910dd70672bbfb62ea4eaad725c\n\n# tcId = 2\nmsg = 0000000000000000000000000000000000000000\nresult = valid\nsig = 4bf16f098701d340c438368e658ed8904d3a21f7714c02440d7476ead132766b3d578b325ae752f906873af1b795585a2a0d0e6788fe903321b2080bd0dfb9de42c3be41aeff37e32defdc0a75f12adb5b9de4d067a920a720cb16cfaf56d7c09d8ef384a8aa106545229b540c52b49ecc9d6d14ea70480642b9cd0330efc005502e4c38b96a36456447ce2133df78854307010ec221305dc90570252321e06c1bb01d75100e85e68326fe92488c0c5e58524b10f8ec7458d887cec254d39b0bef921ba31fd5a117977f1945fc04837727456949ffdc9886f21071186bf32dfbd9c3cd6a2a00a1cdd5fc3c22f4bbaab92aa85116711f1c53754bdd2bc384f2a8\n\n# tcId = 3\nmsg = 54657374\nresult = valid\nsig = 2b3155b14971f79c9e3294723c7e41ded41af709f6edb2c19f3526584aaa1ef2de2e7a8dcaf5d7c3239f604c421656dc58e8b0852f7a65cd557724a9b2a17cac38d8020e939bfefec5dce0d8993e75615b974944e4c4a811e40db63f13d2b626bf26257a706a7bedc863d0100b676ab70d4a4f6eaf4692e0b69ee4426cfe7cfc3e92d93bb804569883cf31fb282efa5a81ce9f6d9f0ed79251ef2a0b596f80e0eb96ede67e30457a07655d777928b898ed1679046673e489d9c6305dee05abfdeba7357099f9cffd00735165ddc39aa7355b10a8b8612dfa2f836fb9f5f89f1407365d6b39a39e89c6647ff9da5fc6f960306686a8ed8e2ce12cc7fd9870d576\n\n# tcId = 4\nmsg = 313233343030\nresult = valid\nsig = 5e91b5dcbf02d6f19621d41a83dc8f15ea83c0edb83765ef029b0acac2e1ec8918b1d2afe1fadf11c48d27594cb9c01fed79d90e5d5a8085c438450111aa7d9fa39c2345b14fc3c2cb34128f86db5eb00bdf8dfe38d61f29a41fe31342e7aaefcb4b122eb5d63c2f5c263c8df8450e9428ffef974d535818d51dc03a7d60c8b2d16c999ae46d73ab40515fe601d9b89b1d09c6d60cd51639a97c1d211e097609ba5e8c319c6fbd21b34a634ec8fb8971c5aae21c70b847a4539cc10dc314ddd8a9629e8a0e51c66c0cb61fd1f7228c01c6769190abe9bac9a3897800050014358594e0fb20dbb458b12aa1346826cc9f7e9c5352b073d62853dafe77c848cb1f\n\n# tcId = 5\nmsg = 4d657373616765\nresult = valid\nsig = 501c8119a0f8aa2139ef5e05adc65384fa389b9023532171d514651ff48677aad546326a2e3c02b39ed84e5b7e4630604f2979c1fd7bf37da8e0cedcaecfbea6f9c715141a1d052529d0d0fcd71eb70867e2704377801a0ec721fc59fca9d8b1b08cd9ae3ab094f5bbe2faaf3171dcf1712c534bbc7ea802a2a72d8cebefeeff1530e4081b85a42ae38f630f38c1121199f2156e267ce2467f9b4853dbd29dd999aebfc402f2a0c33b8c1b8022941e754b7a187df4c59633dc6e76cb3200e34acfde53a386647833dc2accf244726fdbf440cd32503188a291e5b0678aa729b539c1f5f97e7b788c0c20b88d90c90a3bf33300d181b9ae797cbc76049b43be3d\n\n# tcId = 6\nmsg = 61\nresult = valid\nsig = a17d67937354c7fcba18dd5383edbf2f0868ccbe0a316876fb1c4fb14e7f4c048ef5ded5d01d02556cff0c8bf081bd09c46ce4da156e9810df195c5b65ddbc3025b84f91047049f205341ca8dc55e440bf8d9a3e98c231bb74e71be019cdf451e962d8b7e8e6d766d3be430c7596ffcafbb785e5fe8987ce721ae228832c8b4fe0b0071b0e5c652856f785695f70cbb3c62394a8291ba5f587d4fd7bb448649a72261447aae6a2b750824d400ca402543c8bdbbb8e7c3b44cb7085a83392346abe999ea2a5ea15e9eef6bf08a88096ee4e532369f0059285298b387a428e5e34ed7296e0b53d34c5e23f0d3c12e8a2d3132672a655c7048bdc0c69b36cae602f\n\n# tcId = 7\nmsg = e0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff\nresult = valid\nsig = 64c26d43b028f284e9667d5951e70c75e611ae2ab876f66ccfaf09bd54a26dd17983d993bd4f5270537f4c4b2e48695eda28c8c365486b5fc3bde4049dcf6fd722e634fdf5571d29b1e156a48b0c706d96155d86c20dbbb1a47c7e54efa15b25d76f502b3069e2514f89d9bdfda9bcda02301c58e2173cf4f3dd49d8415802c11aed78f031e8e2e50197443e5fe9ab55afd8deeb7b5db8ba7a7b9fce6b7d9eeab9ef25035742d076935c059d076b4714127d408c9428a90cb9891a151eee8de7d0cea32b0ad2d8ca4abeb0521b296b5ac08f7c53d5c85e47ed828e0c11468d6cb50bea89e4b455936376bde9f22eb98b3e2395eedd05d1def38fd5e082ade3b0\n\n# tcId = 8\n# first byte of m_hash modified\nmsg = 313233343030\nresult = invalid\nsig = 6b77fb8cd287c666cbc30f00bcfccd31f6dc01655c3c976d1b2a980d53be40d6a4a7676024abeb1825ec47589365c07e5d4c3d34e249814126e32ba40aa81ddea0f61fe4e3725aeb9751103fd034cf3fa516fdc1569aeb7b028d192c8ef4ef60a5befb8a4de595bd4717462879f424e87286aec0bce6f9e763ee341765c24cef24f916a52a777595879471e2f3188c1be77fdced941fe0cf739bd8d5a4ceed9fa1e47f6f12dba68cbe7bb2eb81e46c2788b847d0ab6f55951f787db4ec736772851c43534b7ebcf226c2540806d925bebec9d109915e466d08e2470b7e85b4fac66e089b1a535ba703dbc10f800f6bdd557370e9ce761e86466833903efe315c\n\n# tcId = 9\n# first byte of m_hash modified\nmsg = 313233343030\nresult = invalid\nsig = 4af6c02b1f3c2719fd1c84965658e36651ff891484f4c4177fce2185b7098c861939fcba677e8ad461577a666ac77653ac37fe61b5fc235ba76917e03c3419fa3b055171f959edc7f9fd349209a23a4aba57ca80744f69be6ffd1a2252a182a3a2c1a2c069dd4953dab9a6acb4c7047d7402584275cb726875c0858066f50caebdf7e9afb6d4f3270662afbc66ed14ce69a846fc0c54f9e57bd4f827c0b780c30dcf8661cf4bb678ee0396bf8e0a08d259593170dff3f93dfde9f4d9ced510e07a2736c8727d2f9e973e32524e072a92dba8edb2d1628da03741d227255914717445407111eefaaa889febfc6f4b0d42dd958937710ba5e94414a26e09cb3f5c\n\n# tcId = 10\n# last byte of m_hash modified\nmsg = 313233343030\nresult = invalid\nsig = 601f6431b0607c80d5c92c86a63d06fcd862bb35eda31a7f331a59abbb8ec18fbc86ec95ad63723216e151b7bf73135c028a5ac3b45f30a7ff8ea43d5dfa6a52f5fe1405e6f5d64abc4999f8c580701bd9e451bcf6d54bf0bd1c83c7e0399e7805757cf436164f365ee76f29433861856b67b6cbd8b235365786c2de9b305e3293792202e1848f9595265ed6fd4b1740bcbcc697d719ff70b9200e65d7711494e18855fac36bf9487b54798f39d5a32b5d62dde3de2c3b5f8f7f4bbaf3ea04e11cc8a4f6247e25c8a3a4e05d831199d14cf44ecc8e66c8ca3883b5aaac3eb5889b23dea6ba6649c8a69cfed547ca936a57b220c44b8eb8604c8dbd81a3500116\n\n# tcId = 11\n# last byte of m_hash modified\nmsg = 313233343030\nresult = invalid\nsig = 2a31524193054309ce7b6ae9c4bb053f5a5aed273d7a4a609496c7205f5077ddc746e8a4ea376bb879556d4999e788fc8f82378f6281140663af2fe0995a1b73eeef60341d0720ce47282eb87bb79908be8c3ffe86182d174afd0522a87fa56e0d149ab4c32292ca1d1a8478ad4090006b32a147ffe4303487196d308dd59f81eff956bd6ca87ee0246927e279bf80807ef45829824c80b82f7442021bccd8ce4513cbd4d4150fff20ddc2ea",
     "942ef318455265b5667a74ebbeb83a05d15f3215c04b113c8b55ec8be512e797a3ace15d2514c2bb74f50e0969eb1a2291fdb6fdea1af0cbea6f05937be614003c1569b648c2012ec5dcde806f68e247597bcce6\n\n# tcId = 12\n# all bits in m_hash flipped\nmsg = 313233343030\nresult = invalid\nsig = 8291cbd81529c8f1e27a907dfef2de16dc6d382b112cc3d2d69f4c6915e7c6992eeac6e4b82f5396a46eab562858835ab0c0aee63d2585dc7537dc0008a4b40803467abd5fdca4114282265c2bd929a03c7892774a21ed6454e73684673d6448b19555d0cba9e4c00c99af77b30f1daa4b15eef8489e15a276fed1553e617a64dc58d5dff3c05853a7039047d243c52e53f7dcfc40641bb9acc33ed96c74c79c93b79f32566cf553428cf85d2d36a070c89f1eceb4606fd285f7ba3ddef70ff151ed0fd3a5b6c5338eb2f812cb4cf4827caef0b896a1d49f49e2c3049462d07d0e64d33f1e2c615c62a958abb6942d9ac8fdc39acc595cd381aead075ab7b51c\n\n# tcId = 13\n# s_len changed to 20\nmsg = 313233343030\nresult = invalid\nsig = 57e8cc1dc00c07383d89a79b5c8e4f5bde2a2ba55a3c7201b3291c4d805b1b2eb36f8f326b542342da180abe508669bb6cc2dd54e327bc70c1e317ba93a0fd21e7fce22a0c597c7420d1d5602ac43d9348ba3eba561f250e301ab955b0dc33e4abde32946b9b3e86c8bf07a44646ca595960bb988fef04b2824967e9da8b0264f1da0659373935313a574b5380f0b54ce1bc0dde423bd3a54f6ae5fafa772a55c1c44eb6edffecf13e6e5e1edaf87a79e338577304141fbc44f0e9eeb286f553f879addd6e12e436fa3af51ad53a72f2679f0ed102d504ee08706fe111eaee49d880d1a0b91924b3b79968ed0f9bff446dac199ee89b158c074927d27b864498\n\n# tcId = 14\n# s_len changed to 32\nmsg = 313233343030\nresult = invalid\nsig = 68caf07e71ee654ffabf07d342fc4059deb4f7e5970746c423b1e8f668d5332275cc35eb61270aebd27855b1e80d59def47fe8882867fd33c2308c91976baa0b1df952caa78db4828ab81e79949bf145cbdfd1c4987ed036f81e8442081016f20fa4b587574884ca6f6045959ce3501ae7c02b1902ec1d241ef28dee356c0d30d28a950f1fbc683ee7d9aad26b048c13426fe3975d5638afeb5b9c1a99d162d3a5810e8b074d7a2eae2be52b577151f76e1f734b0a956ef4f22be64dc20a81ad1316e4f79dff5fc41fc08a20bc612283a88415d41595bfea66d59de7ac12e230f72244ad9905aef0ead3fa41ed70bf4218863d5f041292f2d14ce0a7271c6d36\n\n# tcId = 15\n# byte 0 in zero padding modified\nmsg = 313233343030\nresult = invalid\nsig = 1abb40f03dbe5b4f1365862d9f095a8d57e8922565372f0b34ef5e232441d577b3c1f19a240ebda880a09cb41a7267732623b0faa414843f9ef063f93a92bfe5f98f7c28da184f011aa787ebd0b5fda4aec1beab6757add32f7a35cb407779aacef43c0429280e5a040cf5943dfb579f86e0c63cc828fbcafc9c8a15ec98fb64ecb5e295dc360f50230f415337aaac6fcac02fe625ef61744488eb7cd81a4e788a443f56b32bb3a7a344900806952f6f3f55f8d9e9217ddaf06a0ffe8b0bf5551d87cc9251d839441cdb3c72ae9c6a5a3de7ab85f908ae7d04232c52143d272e87a54c5b39d399b49ca7e96edd3b6e22c296de69e9e1848038025780e4f1ac29\n\n# tcId = 16\n# byte 7 in zero padding modified\nmsg = 313233343030\nresult = invalid\nsig = a11bd4fdd30fb353314530d60b1cd921d6091658e0c775432b6b702b1563a9e5b547f968ac13ac5b7027aeb53ea8987c9441fbcaf414bd04434445b2ce6a1d9dea2f2f179a6d40342a25b10300d45358f703f814917870f0a47f4b4ac47228574096ff240ab0966bb77ea9b5155c6a4fa0a185ce5d389c6ce28821262698beadd0fbec4ba2b66389d610f290656b7a4f7ea1f4a3c44b3528bf62f72abf7935e0d8b6cfc2db947e440752410a43a0ef77c0dc31b58be021b94118e5e0cab1d8994e76ddffcc2e5d55fa59d1ba792fda9db2b5ba9ec6f6bac395c250e2b8ff245a448b611797322bce637c0b1537c9765a8498e0e0371af2f8ec15f32e765ee234\n\n# tcId = 17\n# all bytes in zero padding modified\nmsg = 313233343030\nresult = invalid\nsig = 83673bf6d178e873e986c9a9750befdf2d6a3f0128ec90b5a8059d32f9f9592349095e24f88e9fc48ae549009f52b4d821fd40848a9aceaec252374b17d4950296e30b3ff489d420b8daaef47488696762ae4cc55ade170c5e0d72e696af793d5cfa04477c147732328e275999746c3680c3dca701592b17bb37dd8c5eeb3a929f932a3521a8004c10c9e3eed8d956835a700cabca21038a9d6dde44f888336c167c04ac26e800a99130a6e1d3b3bd8061dafd2b462102249fd07dc50a2e57a8c6cd52381fd4e1bfdbab18fd602c8890d51e8053c3c2ab5c96bae2847b5539aed3ad83953f47841f8f50fa28446d30c20b2b7dd8abf4e49c0636437c22833ba9\n\n# tcId = 18\n# first byte of hash h modified\nmsg = 313233343030\nresult = invalid\nsig = 90c3cb3331e8b352c37db46283a1a66b647ecca43e3461ce1afc49d6230457341a52b558496ff83053175a7bfb4755a1bef0e65f470d6139eaaa28cc1c083905859c1475868ceb1e3829437f64a7ad757c9da3b6e8443e8f981f5c0724c5909bd4ebcfa65eea4e4f7af5222dba64a51228759c69e26c44d9a528d75a5b96855253da88f9b54744b1a8b02328394c452e62ef75cd69f7def67b80e4859ba3e73b08a2a3ff931f44d1d524320a33416bf4fc744847d12e3e973cb870fdc3ac1bdbacb677bcc63f927366f4d0d61ee3bc0d1a1b3d149672c6398f3409fe9e7c7c0a150571573b87889b4f23ef49b6f5984412642e5b0abe7f5ec4b4cf12c46a38f4\n\n# tcId = 19\n# first byte of hash h modified\nmsg = 313233343030\nresult = invalid\nsig = 7a7318799477eb6da55c7b5f6a0338071d981011e1a9bc6fa3a2258ca5caa039fc7f768234cc08e425323f57691cbcf5f83d6a3439a639818c6b2bd3a860c9a6b9a8e0728aa7ddffe18f82c02854ca07b17db0f166d2e521ada5c1f85d0c2f259301d3f4b4f1380f94bb819dcfac9adb764a198091e110f0d3c5fbe20a29366fa52d246cc922bfd2b44a619b59b497a5379282ee30608f4243f7328ca8aec20f61aa8b4083abd1c206fbc9ea598d163e52da1026ae349d26469e2244b86139895f80ec4e8b6f5965a28ac4e9636ec3b1e5d685483a0475fa645421ed6ee9633f276aa4000eefb173b5ffe824d38a4d7e24146e4a6adedc3ffde4521dab879120\n\n# tcId = 20\n# last byte of hash h modified\nmsg = 313233343030\nresult = invalid\nsig = 331756b92b346379e1c50dea5e05d92912eabc568905d7f290ed353e705671f0f5a43921d71cef11fa2cc23c954ef27eebfbaec77a33147b5c6408b7fb8ba9d8e3ccd5af541942a946bf057d39ac34e954ca3eb308449a9a8fed15f760d9392c32618c289993b38875df412d460500ed0ac7d9b79b0c34e8a64310ad4cb0e7d6dd1dd8ad6aa81683a3420618783a315b2643f7e8c8a95734aa1ea526752bca4d443a18224ced3d2a07bbb734d01629483f5c8b91d94926916e86ee430f4f6f07c40d5808f0f59b9f438723bcfb0a8f595e3da00d5f2c3bc9eba4e64cfc5edd9c244eaa4aa8f7181fc0895c911305fb8dd3d404865f6ee2a4de8f5de7962cfa9e\n\n# tcId = 21\n# last byte of hash h modified\nmsg = 313233343030\nresult = invalid\nsig = 28481a5bc8762ab8cfad8d7888e5db6b678b12554a244aebedbb4d83fe0fb676d77411285484ec8b76843d4ebed1dc9dbc2039c3d0e7e5288de9602f7ee82793e75d2320d8a7c254116ccb086573142cfd33e36cce3f830901dc734ef18364e1c0125cd8fcc3c7f4f333d4b05386c3cbdf616d386a086862b591d80c34832767feb83aebdace7d19269b0b5bf340499a9d530c15b19c68ce227364080b27e6f4e017d6dfdf6ef05f4b73b92602a6249391812a286d8fc87204a477d14307aa2e23f12f7452e15d4bfaa3deee56903ed66031304dac16f6393008a53496845079af72e6c5d4781664ec757c741ea0dc9ba628df2dbfa591f16c352d5171b3a0c5\n\n# tcId = 22\n# all bytes of h replaced by 0\nmsg = 313233343030\nresult = invalid\nsig = 267cdb3f7ec390ac0910a3acd42893b3c445226413ce38d7fecd825e29d3a7c8a2c361607b70b88f1ccedee4c9d3c8d109bc3e77ad749236f546352713b71581ef0ed3b9a9d1a11035629c8f6cf912cca10eeb2b02d3bcbcb167f02ce43d00513999e4710cf5d4f4d730dffe9e52ac5a11d6453821298e66dd882fa7eeaa99d06d324a1436e2e2f3a8e78744cdb21d0070987a4895697f26d37f79e93f6702619ddc4b6986450f84630717643224d134a922b5aebaa430444bb587079f925ba93a42bf847579b8bd7e72baa5eef82af83afde809ead8f810bf4441107a3095a4f4f137a3a24bd5f21a18cfec809a164f4471c49091390d2fc1c6578dfbc2060a\n\n# tcId = 23\n# all bits of h replaced by 1s\nmsg = 313233343030\nresult = invalid\nsig = 7b9fb586f1455c9fd95db25ec66cc1b8e0237355177cf1c40df59ec1eb84a95149fc4c06117e8301836a32aae7e9ed18b9eae67e5f76ced60e89b8e11d3467afd71194b494f7062c15731a475586fc90ebbd1b382d5c55c0b319869b3d409b82cec0afb19f6352efcd6f1ed949f27a0306a3fd1ec4722cd335c1169871c63796bf3a933dee3f81f01fa8b6e710072fea562cd938fb2bb1053845555b07cda74f144ac84d9557326cca799af501f9474cd8b18a2af4d1a12f93a5b6dfd1880e58ea82e98fabe96fa76981a6243e8e4ca386f5ea4463f615ba1812e38842fd51c71e0b6a9da68a2b1432a7ce2686638e55129d4224c94513207ebf90e8c5f435ab\n\n# tcId = 24\n# all bits in hash h flipped\nmsg = 313233343030\nresult = invalid\nsig = 6bd414e877abc92b608b08a273946f90ba6c6c27de2448175638f67a6b14492fc1415ece540be3e3df8c8ea7154211637d9b5144312e113bda2526b6fb2caf7b07673332dfa605468e37f4026eadb4c0f84b7b482ba6752839fba46b765709c3c6e54de13953245a3364bbf21222374eb63e61e68d73a126f40f115405fe9092b00b60a7f0b995092061427454f6876ae2ab3b2757337349ff3ca3e2332888b9616fcffb3b924977ef856553f55b2f1b115ef0ad7856f666a9863109c6498c52271ea2e6854fe73e9e4d4ec666fe668f0ea1d1af19853e9a07066418697429cc31fff107b6ba212b4a3cc19b59ada459efbc4ccb90da8a0bbb48280456de69d2\n\n# tcId = 25\n# first byte of ps modified\nmsg = 313233343030\nresult = invalid\nsig = 487bc9021d8e95d05c1d3237c3e9f10df764e8f70a068fe6d93b865233f6ce8088bfc117c9086a3bea29d86e6d75fd9c8700e871f6027bdd0b37c1b581dda807a1401721f8a582a06309bfdfea5ef177c",
     "b7bff47179d9fee32bf545e3e4513212b68fc3eaa43f9bf86ab066fea31018299f4401e3e0985c0d450f102162896e619a2083d5fd2f2a03fac6ad99d38eaade1c56a7996a35e5e657078547c43d13fbf62a64a007c8f03b79b9c59d19697069344b7ab309b532a7449878d3c33472098026917f99d07d4b24c39c67dac099d77c2c0313a557d8a5aeb896214211fdccb531f390d91848be459df01c014454c8c9fb390d6f759713e30128a9184e881\n\n# tcId = 26\n# last byte of ps modified\nmsg = 313233343030\nresult = invalid\nsig = 5bc1e96ad536dee1b3d23e31f053b9b0e1439ce7c48ebb54f01a81de10133612dd0c1b4dc0b60d6afcbd18e40123b40236bcd773b5ff473b5f35c6ed4294541e7f028acbc29f5583e93331d4c03631afaf79bc683c187c7929d2f7db52d1a34d88210ab50231219837e1b60d49ce8048e9ee4ef55c2218674f297158c711e4fba62351879e7d058e0cef25575cb0ab9f6d6961a4cb6d9ab0a68a301fa3bbb8d0899f43bae40ec19758591e5e0cfa84dd08f7859ebf54c76e04e74748833313bf15793b5bbc47494f3bf439d7fb5225640f3f3756d9d4452f7fbdd828fe844f757a0cc585ae0a6a5410065c8ce4e0319c356565ebdb1ba0fefe780c70a5135365\n\n# tcId = 27\n# all bytes of ps changed to 0xff\nmsg = 313233343030\nresult = invalid\nsig = 2b3be6997057ae17c749c435dbc68110204e95b3e127a230121e27c95aace90e9f221e2763833024b3bb873368e3e992897d8767eba2479637ee9383796cbc10455da3b52c7fac1d91131e3f78f5f616b3fd413b310fe8f50ef4f721fc026a6222f0d9113624cf7d481e79e788587ee659e81296eaa438ff13454e36ea50e9f038ed2a7548a8d169635c3e15bc20cd83c8279d16e6b0edcac2e9c72b9048dd7fd1d298e414c3832236d612af3841e426c74f20484ef408b19f22449e701460633fbc5155851e812e886cbfd6218bb27388e20547fb4a48d2e0f9a284f9bc1e9391b28ab7f3f45ff5aeb6af12faae437361877d04e2df1a1057ac3a680e5123ef\n\n# tcId = 28\n# all bytes of ps changed to 0x80\nmsg = 313233343030\nresult = invalid\nsig = 4bb8fd79da58fd3217661938c90772eebde7bfe5d49fa597cf448019a56d710ea126e8b94aacb45bed81df07ed4c89a9889bac0ad2abd506374d5ebed14777673fb1c51a3f844e9619bf707c9866b21721a75458c100d57b9ebf6ca58aaff1d47cb2d0f26074dc15d0900a11d681bcd76b111140500a51cf8c1b5ff4771176f1dc0884d42b36a15690b991c77f9605ee9c4329fead40364f2b6372812319c0ed4a6a15c0716da9426ddbbee79938bbf8dc3b459bad11ce79c0bae6080a06b6c8c1c051fc37e0bf0546c7b55b2cb6d90bbf4961ccd1adc623c9b9b51912d6b78843932ce04323f8a9159d10ac94c2d980e9b48fc143299d4c830050ace61f7238\n\n# tcId = 29\n# ps followed by 0\nmsg = 313233343030\nresult = invalid\nsig = 9aca5b5fe1369dc46eff908e690ba88744db0c86f7da7e644eac314493ba6a7d003dc5400e1c521c373ede410afcaae8a4ea8e14d1e6c2ac3f39c0bf8bfeb688962260f91058ef9c1a0ba39689736d039ff86524a97d8eaaf248601793023ce6569c3cf15dff30f41e384690ab40812cb1e4414a0370fc39f526abab87bb9a405fd44869069f343f28bab50a1e582d4bced25d41f9fdd2e958177a3625bb59c4677f7f749321023fc9b9b724e8172a4a512743a1c78c3c8b1f0556fede02e9f6f2f851fd31e21f0886a35d12a0e04f041251524bd7838d91657026540e133a2ac1ade52f03efb509c30578bfde272f0d9fc2e515e541259dfc249bf1762b17b5\n\n# tcId = 30\n# ps followed by 0xff\nmsg = 313233343030\nresult = invalid\nsig = 9211ea6374362d77f491d9dca7e8e8d2b672bd565dda1566814670d22e3f211b38246529a5f01333ced70323e6cc4de58e9dee11a90f345fc53c1cb0f0c2287230d1cfc83d33c6158a8730853b5163c825ec05084cf0816325e21ba87f1685197c9891ca3b89d8d8bbad395f7f71b91ef937a1d81bf7497356928b77b10fe270500a731d498beb85490c1d3c4145336d2a8ce8430354b3afcbf0c923b0b0e824adb36d7be69a8e951f64a5b1d648dfd9fea49b59c99efcf015c6b3937d8986100f48022346136eb56f9538b115284ead85196385d91dd414ee22a3c7f40f632cbe565c8d0a325404d0d4905282cf7acc6210a6eaa26f3c3961660a944771b342\n\n# tcId = 31\n# shifted salt\nmsg = 313233343030\nresult = invalid\nsig = 39112e1c8251d5ffe1373e70fac946358b00bae6a461a1af561a82d81ec4acdc63eecb3b98f5f070929dec66a758d4a12cec2600208d7597320ba5db412006ebe76ed593d8b1090e93be21b1c00700e393ddb4b7d7a8bbdaab603087abd2b90a0408a775a4469d4f2f6b34d228da55bb4872ef6dde5282f5bbcdd6a8cefc71c4caf00453e6d6c59321b738d3b21a3d8f0da4afde30c16bc5722ac30ad6bb1f9fe0451ad150fb3d67a805993e506a80b2dea3801bbedb8ff7b676f50ca3fa5b9bd744c00822c975e2ab8cc6a917436279a9e85aea62477ef84270f6efe495ed503623108ca39d5c47bafa3505f04995ec9c2a0e411fed9179c9a9e94fcecda5ad\n\n# tcId = 32\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 1baab34d753d4c169107ff7dba46ec1a4203cb1654489d6fc20d206bb21fab483872c44ae8017b7c07aadb8e8489a2b41b89f9331fef63317408105eae19900377ce150ec89a37b26bfb169a89aa1c71a83cba6858d5b47353e82017f19a6688927768bfd0e75bfcd71a5e1948543907d65bc8fc813436a15949fbaf0a7f95ddf010f298df9314203838a60b39c5bcbc7a438500649950bf28e78f94155cc664ad5ff996e51789fb13038e1757dc19b6572f028fdd8be318ab933adced2e87b569544503916030b4060e231b0265372805cb53214c6f21e13c632ce08031ee368bcdf3eacb3b87269e8a8684703a348524020e820de93f1f334b59cddff51a12\n\n# tcId = 33\n# first byte of masked_db changed to 0\nmsg = 313233343030\nresult = invalid\nsig = 7f04560acea95c8b3df67a74fb2b32d904e5c59b43b10b11519e796efa77c0c9b14beaf1ba1308a65fee50e7862289d46a3cfe79f423e7d9201dfc7428bec7f304228508b7e8e5af4dbabbb3958d1f48dae4016cf699421b7a9a0b1dc1c806a7b19cf65fb7d4465a031bd8c24071b397dc1f6987cddc8b69f5f3dde25fa36c2ad6e030c64413bf3eb39176bc003c909e37d28d5a040c15bb4a73c74c39c4d132d09fd565abd7b63d81115ecc8a151786f6ea50882e50db362cced39702ae1ecc176cece9509ff071b87f142547ca3aab04bec1a7d0c6ff35060420b99e285515eec016ec419caf75cf11af56a395187fe6575786998b6b4348561a0dd68878cf\n\n# tcId = 34\n# last byte in em modified\nmsg = 313233343030\nresult = invalid\nsig = 1c029185061385643943dca8adefc5666ca039765d29f8baa20dc3cc43981ebe1e6d1f09a617559955437323e50f6464a69950baf23c7463b1b1c6761b50bba89c81299d4543f76e3e4ca4e30ce710a20707b18dee5d2ac9e0d9330148526f193439cb33238ef9d82424fc1287097e7626bae0130b735a22cb6ef08ba4d840b370c9e8658f83267e52b8d56ae0ada9dc5114920f97884d6bf529bbd7c81b2f9a700e4df4c71a8ce3141f9f4be31c9d639619b20f725f55475b38ce36faee929864a5c7793ec26dd6d1c4b75f111feba3765d0d35a272fc52fdb85f2c0bd1bd22cfb47bd0ba58d00af119759e1f4d5763f15cba4e788fc6f8a221dbdeb32c484a\n\n# tcId = 35\n# last byte in em modified\nmsg = 313233343030\nresult = invalid\nsig = 0594a2a0f3d10857e8e2a89d72df80c8b37977bf2c390087d1df7672fca50d21b7a3b24453b55afee4c6fb2adf83e6b3e6a63db31b685ca956bda1f3074eb53364d9bbb9ad16883b56ceb66cae51712d592e10f851c4431a4f7b3625c774808bf7c694c582f1f20c2f51ca9f781c6172d05201e1e0ad96f7231c2786e039cdafcc4045bb078c2f432d3409dcaf25d8c0549de03d7964606aa0fbda333a0eac26e5f3ba13b1d6dc710c01a17e1a24241bd741d51db4cafbaca518fe32feb0ed5cb916c8c094c41f092cecb7a9cc0818351b5c8b6563bba32fb8e86b4c81f4f57c24a880e91daf31cd1911aa6690c8e45f00dd62986369bfa5824b785c1c56fdbb\n\n# tcId = 36\n# last byte in em modified\nmsg = 313233343030\nresult = invalid\nsig = 10bc1d1d1fdd4a8f74b17f2c8258078ef5c4f5fb973a2505060b126504c9366a4578e2a333b1a9c580239ee959d17017664631982cb8554fae8cedae07eb7e2fb69cb702db93d948d0d0e4654d9eb49192ef87e92f4d229ba56f165a8ad4769d0c707111b9be90c6cc29cb3389a9ae4d5045d8a69234cd5e57fabb76e5d1869d83cd2f3ea8f0419194cc54c398a288aaa35f765ca8e0e264865b709d5a21c9d807c4c0751f9e4e68c9cdc61d93113e5bb811c2e217f31eb14f010aad77abed3e4305e7bdb1066879237849883c3ef099b85c78352b32374dd244e173edc3824924098cfce9d729166ccfccadae8871266927763ae6a5e750f49b837b60682aa9\n\n# tcId = 37\n# signature is 0\nmsg = 313233343030\nresult = invalid\nsig = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\n\n# tcId = 38\n# signature is 1\nmsg = 313233343030\nresult = invalid\nsig = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001\n\n# tcId = 39\n# signature is n-1\nmsg = 313233343030\nresult = invalid\nsig = a2b451a07d0aa5f96e455671513550514a8a5b462ebef717094fa1fee",
     "82224e637f9746d3f7cafd31878d80325b6ef5a1700f65903b469429e89d6eac8845097b5ab393189db92512ed8a7711a1253facd20f79c15e8247f3d3e42e46e48c98e254a2fe9765313a03eff8f17e1a029397a1fa26a8dce26f490ed81299615d9814c22da610428e09c7d9658594266f5c021d0fceca08d945a12be82de4d1ece6b4c03145b5d3495d4ed5411eb878daf05fd7afc3e09ada0f1126422f590975a1969816f48698bcbba1b4d9cae79d460d8f9f85e7975005d9bc22c4e5ac0f7c1a45d12569a62807d3b9a02e5a530e773066f453d1f5b4c2e9cf7820283f742b9d4\n\n# tcId = 40\n# signature is n\nmsg = 313233343030\nresult = invalid\nsig = a2b451a07d0aa5f96e455671513550514a8a5b462ebef717094fa1fee82224e637f9746d3f7cafd31878d80325b6ef5a1700f65903b469429e89d6eac8845097b5ab393189db92512ed8a7711a1253facd20f79c15e8247f3d3e42e46e48c98e254a2fe9765313a03eff8f17e1a029397a1fa26a8dce26f490ed81299615d9814c22da610428e09c7d9658594266f5c021d0fceca08d945a12be82de4d1ece6b4c03145b5d3495d4ed5411eb878daf05fd7afc3e09ada0f1126422f590975a1969816f48698bcbba1b4d9cae79d460d8f9f85e7975005d9bc22c4e5ac0f7c1a45d12569a62807d3b9a02e5a530e773066f453d1f5b4c2e9cf7820283f742b9d5\n\n# tcId = 41\n# prepending 0's to signature\nmsg = 313233343030\nresult = invalid\nsig = 00005e91b5dcbf02d6f19621d41a83dc8f15ea83c0edb83765ef029b0acac2e1ec8918b1d2afe1fadf11c48d27594cb9c01fed79d90e5d5a8085c438450111aa7d9fa39c2345b14fc3c2cb34128f86db5eb00bdf8dfe38d61f29a41fe31342e7aaefcb4b122eb5d63c2f5c263c8df8450e9428ffef974d535818d51dc03a7d60c8b2d16c999ae46d73ab40515fe601d9b89b1d09c6d60cd51639a97c1d211e097609ba5e8c319c6fbd21b34a634ec8fb8971c5aae21c70b847a4539cc10dc314ddd8a9629e8a0e51c66c0cb61fd1f7228c01c6769190abe9bac9a3897800050014358594e0fb20dbb458b12aa1346826cc9f7e9c5352b073d62853dafe77c848cb1f\n\n# tcId = 42\n# appending 0's to signature\nmsg = 313233343030\nresult = invalid\nsig = 5e91b5dcbf02d6f19621d41a83dc8f15ea83c0edb83765ef029b0acac2e1ec8918b1d2afe1fadf11c48d27594cb9c01fed79d90e5d5a8085c438450111aa7d9fa39c2345b14fc3c2cb34128f86db5eb00bdf8dfe38d61f29a41fe31342e7aaefcb4b122eb5d63c2f5c263c8df8450e9428ffef974d535818d51dc03a7d60c8b2d16c999ae46d73ab40515fe601d9b89b1d09c6d60cd51639a97c1d211e097609ba5e8c319c6fbd21b34a634ec8fb8971c5aae21c70b847a4539cc10dc314ddd8a9629e8a0e51c66c0cb61fd1f7228c01c6769190abe9bac9a3897800050014358594e0fb20dbb458b12aa1346826cc9f7e9c5352b073d62853dafe77c848cb1f0000\n\n# tcId = 43\n# truncated signature\nmsg = 313233343030\nresult = invalid\nsig = 5e91b5dcbf02d6f19621d41a83dc8f15ea83c0edb83765ef029b0acac2e1ec8918b1d2afe1fadf11c48d27594cb9c01fed79d90e5d5a8085c438450111aa7d9fa39c2345b14fc3c2cb34128f86db5eb00bdf8dfe38d61f29a41fe31342e7aaefcb4b122eb5d63c2f5c263c8df8450e9428ffef974d535818d51dc03a7d60c8b2d16c999ae46d73ab40515fe601d9b89b1d09c6d60cd51639a97c1d211e097609ba5e8c319c6fbd21b34a634ec8fb8971c5aae21c70b847a4539cc10dc314ddd8a9629e8a0e51c66c0cb61fd1f7228c01c6769190abe9bac9a3897800050014358594e0fb20dbb458b12aa1346826cc9f7e9c5352b073d62853dafe77c848\n\n# tcId = 44\n# empty signature\nmsg = 313233343030\nresult = invalid\nsig = \n\n",
 };
-static const size_t kLen79 = 29254;
+static const size_t kLen77 = 29254;
 
-static const char *kData79[] = {
+static const char *kData77[] = {
     "# Imported from Wycheproof's rsa_pss_2048_sha256_mgf1_32_test.json.\n# This file is generated by convert_wycheproof.go. Do not edit by hand.\n#\n# Algorithm: RSASSA-PSS\n# Generator version: 0.4.12\n\n[e = 10001]\n[keyAsn = 3082010a0282010100a2b451a07d0aa5f96e455671513550514a8a5b462ebef717094fa1fee82224e637f9746d3f7cafd31878d80325b6ef5a1700f65903b469429e89d6eac8845097b5ab393189db92512ed8a7711a1253facd20f79c15e8247f3d3e42e46e48c98e254a2fe9765313a03eff8f17e1a029397a1fa26a8dce26f490ed81299615d9814c22da610428e09c7d9658594266f5c021d0fceca08d945a12be82de4d1ece6b4c03145b5d3495d4ed5411eb878daf05fd7afc3e09ada0f1126422f590975a1969816f48698bcbba1b4d9cae79d460d8f9f85e7975005d9bc22c4e5ac0f7c1a45d12569a62807d3b9a02e5a530e773066f453d1f5b4c2e9cf7820283f742b9d50203010001]\n[keyDer = 30820122300d06092a864886f70d01010105000382010f003082010a0282010100a2b451a07d0aa5f96e455671513550514a8a5b462ebef717094fa1fee82224e637f9746d3f7cafd31878d80325b6ef5a1700f65903b469429e89d6eac8845097b5ab393189db92512ed8a7711a1253facd20f79c15e8247f3d3e42e46e48c98e254a2fe9765313a03eff8f17e1a029397a1fa26a8dce26f490ed81299615d9814c22da610428e09c7d9658594266f5c021d0fceca08d945a12be82de4d1ece6b4c03145b5d3495d4ed5411eb878daf05fd7afc3e09ada0f1126422f590975a1969816f48698bcbba1b4d9cae79d460d8f9f85e7975005d9bc22c4e5ac0f7c1a45d12569a62807d3b9a02e5a530e773066f453d1f5b4c2e9cf7820283f742b9d50203010001]\n[keysize = 2048]\n[mgf = MGF1]\n[mgfSha = SHA-256]\n[n = 0a2b451a07d0aa5f96e455671513550514a8a5b462ebef717094fa1fee82224e637f9746d3f7cafd31878d80325b6ef5a1700f65903b469429e89d6eac8845097b5ab393189db92512ed8a7711a1253facd20f79c15e8247f3d3e42e46e48c98e254a2fe9765313a03eff8f17e1a029397a1fa26a8dce26f490ed81299615d9814c22da610428e09c7d9658594266f5c021d0fceca08d945a12be82de4d1ece6b4c03145b5d3495d4ed5411eb878daf05fd7afc3e09ada0f1126422f590975a1969816f48698bcbba1b4d9cae79d460d8f9f85e7975005d9bc22c4e5ac0f7c1a45d12569a62807d3b9a02e5a530e773066f453d1f5b4c2e9cf7820283f742b9d5]\n[sLen = 32]\n[sha = SHA-256]\n\n# tcId = 1\nmsg = \nresult = valid\nsig = 4f01e0c12b08625ecac89a69231906edf826380f37c959a96690d046316d68ffce9d5c471694fcebfc6b45534864689256e4fc81c78e583f675d0c94b449647451e81beff01a11a516d5e5ce3f1a910437cb8a3a5096b19fb15f4524a35b23d89cdba12cf5b71aac1047b28c562df7c5542c34ce23a182cf7e0e231934b17294799d44877a1d68ef1b8f073619b7618e6b7c22db20030d98cf591ffc3d4da5f58613ecd5ecfc3b40a1d02f40891ca43695cd4c088b05a8054c89c595a47e274816f35384226f74459ee63e25a1bfc03c360490552ec38343f8ace502f065303b00bc0ec320711b211fde92e57feb9013c3609342495ec0d7cabdec21e54acc38\n\n# tcId = 2\nmsg = 0000000000000000000000000000000000000000\nresult = valid\nsig = 0658c68fe0895646056d9bca422a64fe48813b4e14f0c8c4122e56d345b6813dc6286ffde014617e351c7af0a0d2c0f285def79cb734e1e055a25fa6fddc1c07da17b4b235c637413b1849c24311fa72331f4c0458c364a4916de8619b884d7e37288fad12926fc091f4851686a04fd0a504dbce3db370663a6ea6128fea86c2ca94c63e0d34d7f2c845b5d71d9a5e544451f524a451acb85c49bba7864e0a34a48613a819caf3dfd0d510c940f1df21c3373915be1f3509a557fa4d5a4e9f273e85467961133e2482c0907386454228fb0246638616fc31bbb6fa7c2361b8035994eec69a923f4c0bb0ba8696dfe8b1400c2398d7b343fdf498b1116c8de602\n\n# tcId = 3\nmsg = 54657374\nresult = valid\nsig = 401eb03cdb47ca88033e3030f6bdecbac8f5c8fc1dd6a13d23d379ed9a2b309891d13d74fea9d21d159b9e6d8f37efa2489962e24555f56dd434ff1d31ce4f9f5abd3f22cbea8b691d6a11e44efb83e2bca155e6a164325e0fde2a8865afd5c9f51161a9d615f62af7ec2e31b3e5ab649c164490d31d88cfae35b84aea7925690f929a144b6d2f48e8fb894a52deecd1b9a6496990c4ecf1588699a42cacd10c53af350514e4291ea9a058e77f101e32c1c0cefa61d945f7bc931f8bd19e7ba3169358a60e5a8b0123bc3199b9fdcafe8e519c41ba675491a27b85e44ef2d77277c10fe107293c8290186913bc9a99b640d8da041b64f31eab1d35920985f4a5\n\n# tcId = 4\nmsg = 313233343030\nresult = valid\nsig = 68caf07e71ee654ffabf07d342fc4059deb4f7e5970746c423b1e8f668d5332275cc35eb61270aebd27855b1e80d59def47fe8882867fd33c2308c91976baa0b1df952caa78db4828ab81e79949bf145cbdfd1c4987ed036f81e8442081016f20fa4b587574884ca6f6045959ce3501ae7c02b1902ec1d241ef28dee356c0d30d28a950f1fbc683ee7d9aad26b048c13426fe3975d5638afeb5b9c1a99d162d3a5810e8b074d7a2eae2be52b577151f76e1f734b0a956ef4f22be64dc20a81ad1316e4f79dff5fc41fc08a20bc612283a88415d41595bfea66d59de7ac12e230f72244ad9905aef0ead3fa41ed70bf4218863d5f041292f2d14ce0a7271c6d36\n\n# tcId = 5\nmsg = 4d657373616765\nresult = valid\nsig = 599724adc1bae31e84eb6e1399cd90cd67f48b432c63719b600402384aaea9b21ee864cdcf259029180877c847a223912b0647f066a59a65df6c2d3a6675b1450f0b05185cee486bfac56cfded182babcefe60568a6954f026cb2f59002a2f755e9bce49793f280d89822c9bd3a06a7ad2209c3d6cab7c1f74c8bbf4bf374e7ae8a539fccb83a78cff96a4f538adeba0869659d0e9647d98f96cb55d9cb7e58440c4c9d85b8e9dc602e909e29e45f2b82ded44f40e9ceb1292da20063967e3a116f4aeb202863cea523f215b8ec7fc4f6a22cd8652ed661e33803f3fa1be966fa8754cc7b0fa894cee0f045efba14c4f4a1d7cb837cea69e30522526b8a5878f\n\n# tcId = 6\nmsg = 61\nresult = valid\nsig = 4e68a8375e086990bde05fc4bbde2d368f8d96a5bbcf16d9239fcdd45942d764fc2317d90f4f62ec80059490240be8f32dfc32414a427c7e34be25ed0dcaee6927881e797db97a0341fdde459b9cc915d0a348e15dcbfe1b0780472f52a887faffc988a9ceb677e1cf5638e44a9d6f2532417ed0bde5d67f5dc9229ef1f3cfd9cb46c695738fd006cc62d02f5df76996270223060f72505ccfbdf4e88d961e2e7763705480335148ecdd23d1202c26a963860dc769a43e44c72285092ba7f24d81844e612bf03f9c2ddd4e5960622f71672f4e42b8a8f36c6847a05f70400207471c575d6a960fac1de809118efb52903ca37f12d40f6de74decb9a5b8a415d4\n\n# tcId = 7\nmsg = e0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff\nresult = valid\nsig = 8bdd6db90323f3bf26a36a4ab5b92180c96881bd32b66317c4b48c2ba1421f8434000c06adde4264c6ea2d5346468c6d5e97cb13d3cb932e523ac57b59c814fa0397ca6dcc9bec4be1147d77abcd318a6aba1af46ede2f5640da06511a006fd1bd5fb8e04be22789956adc47bbec7988be477150f9b24a07dff51530e8f0c14cfef7d25ca141f512939987b7eb0825633d41a48742bd7f56d4db9733d92ac0f36b4041f51332695f551ec91076da2301120c438eb9ec197cbe318d4571b6b79098d17eded0ca47747a143e34f882ad6e3f490f3a710ff7ec1bffce022027165d96281e593180c67f44aeda9ce6605e6b8e5eac1347695dab211a965bb3d3f928\n\n# tcId = 8\n# first byte of m_hash modified\nmsg = 313233343030\nresult = invalid\nsig = 67d1d1c0a398148625317c3f5e44b738bdf461c27a59594b39ebb2aebef233c7809379e54411411b82d2e7ac88f989b58373d532c758baea121878ce9759441738d121881c1fa2d04421f02dd565b12770d844611ed1873a0b64d822709a6b78d6d3892b294404bce6711001d6c3a54546c76a1d17819674b0be904497a233b466fe4becc832dee740f9ab79e5b9f5db0b0f9aac0084ba05cebf42303b5ca2ad95e3d61b29ed6475545c02e93e7b0e118af92f5cddb1faeb2cbc23c9e69c120e29df7fe31991e887b3b29e77688c60e80be65cccf3d7861a7a14c39e6a6e5645568e2cc5e4a17b75db1dd415aadb45e112a9b582b2ff6e82a43d7a7347b7b56d\n\n# tcId = 9\n# first byte of m_hash modified\nmsg = 313233343030\nresult = invalid\nsig = 842348f2b2cdd4c72cda7dbec0fb8b114e419cbfc1ee1b7ce5d70ec56a833c4ebc8c114dc3c92164b13f4692f236d6b88e5618b23af9fa979fe9b5d8eb228b1efd0da8e47b4c4042965c8b9f08eb9f6fdf7e472c88f532d4d851623b4bf99e021e82ef313c7d93179af810b70aaf929a395ece713d5fec3339e394210b56f1edf26dedfb04083bd24eb0d3ca117761f38319c3b97a9453993dafd3d2dd8c01cd63117f8fda46f52565e4d7de9f718f1f23254c4f9ee77ad1414af4d4dcf959a89bef438329516cc9b79149db058d206e6d7c0133e7c870335f0490b8c569d787443c4a84ff665dbc6f4353dec66f9c488a3f91071ce19553a7c156025f1f81b2\n\n# tcId = 10\n# last byte of m_hash modified\nmsg = 313233343030\nresult = invalid\nsig = 77c9dd7786f0b5cbe76f20abf24361f8979d3a6c6c122e798eda906b0b9700cd2dd26e5286ddd39d07b7c24379cb40f8350354a36b0759bfade61d3d770702b58218c5dc64ddd0d5fce405a16fbc4de3a5fbe7737032605c06ac82e174619c3004d24bbf22bd1ab3e4d432b4ae36c23573cbad845c16a1842e5de1a3bfa2f12d3496a3114fda830dd6061cf538a4571fe088cc03dd7e8762fb08b84501843f5f0362a4fb097d6fe9b96970c0c505d2f6a59754c42684908627fa8c734ecd587c161de7b7bdd69924c0b4d06cb7db2a70dd9257876d1da1ed8cc00fa68279525c346b7256c916ccf1df9386ff9d1eb27f0a5d83a00a2738fa2dbfaa500baea789\n\n# tcId = 11\n# last byte of m_hash modified\nmsg = 313233343030\nresult = invalid\nsig = 455221c385f769fedd123afa37a42b7477d6c3ed968ce44d4982c41ad29a3f59baeb2b566dbacc91b423fbaec371f3809c20cad6afcc2b8df782e472c954cdeffca49553f6eca58781894c67fed1d9326a53422f9642031b69ff45e6a826d18e4241b5214231f7d252d4c640386a17c2a1839ba9c5a34e94b2b8f30fb259fa752339f134e54375a9a4f3a5dbd5f3fb93c38b59fc33a77dbdea9b8fab7c209e6f403d188958b5fa5481bd22",
     "5b266bee6761132104890c8c25f04583084eb01c266ccbca401617120c61a388cc683fdd5d195c8dcd48f4d1a9be80c07727f78a10cd26359c8dd1d87614f8acac1506c5bba79b30c0af745c872433f17e8a52a94e\n\n# tcId = 12\n# all bits in m_hash flipped\nmsg = 313233343030\nresult = invalid\nsig = 5d1f5b3ada8d4507a7447829f26764b9f794ccb4c287870b5c5aac649f9272fbbe22f064cb75e5b3813bf874c6977dc286ef1deddeee1a84a9302fbbc9c8f86ec45eed5469bb85eed8618efdaf29ea4bc0a9cd0c0be71e82bdab6f15a9f7a637f297e0b5ad4c7885bd27b89f4a52452f0176df3d266f9c13fc44d3fcc3e71e3cc5ede3fe2555ff2bf2b72a2198af709e29c2f6f5ce44997c02ea7aebc9a33d0c609ff0f586e753e585ee5052a0bf2f71247cf43ac244818c84347662338384d6c1a4c9b9ebc14f912db688e658d453bb2082c8def4c440a6b25e03ea4459c1c9bd5495e2ce9343439cbbf03affca63856cc50936d49cf2dcfc73679c9aa32e56\n\n# tcId = 13\n# s_len changed to 0\nmsg = 313233343030\nresult = invalid\nsig = 5e91b5dcbf02d6f19621d41a83dc8f15ea83c0edb83765ef029b0acac2e1ec8918b1d2afe1fadf11c48d27594cb9c01fed79d90e5d5a8085c438450111aa7d9fa39c2345b14fc3c2cb34128f86db5eb00bdf8dfe38d61f29a41fe31342e7aaefcb4b122eb5d63c2f5c263c8df8450e9428ffef974d535818d51dc03a7d60c8b2d16c999ae46d73ab40515fe601d9b89b1d09c6d60cd51639a97c1d211e097609ba5e8c319c6fbd21b34a634ec8fb8971c5aae21c70b847a4539cc10dc314ddd8a9629e8a0e51c66c0cb61fd1f7228c01c6769190abe9bac9a3897800050014358594e0fb20dbb458b12aa1346826cc9f7e9c5352b073d62853dafe77c848cb1f\n\n# tcId = 14\n# s_len changed to 20\nmsg = 313233343030\nresult = invalid\nsig = 57e8cc1dc00c07383d89a79b5c8e4f5bde2a2ba55a3c7201b3291c4d805b1b2eb36f8f326b542342da180abe508669bb6cc2dd54e327bc70c1e317ba93a0fd21e7fce22a0c597c7420d1d5602ac43d9348ba3eba561f250e301ab955b0dc33e4abde32946b9b3e86c8bf07a44646ca595960bb988fef04b2824967e9da8b0264f1da0659373935313a574b5380f0b54ce1bc0dde423bd3a54f6ae5fafa772a55c1c44eb6edffecf13e6e5e1edaf87a79e338577304141fbc44f0e9eeb286f553f879addd6e12e436fa3af51ad53a72f2679f0ed102d504ee08706fe111eaee49d880d1a0b91924b3b79968ed0f9bff446dac199ee89b158c074927d27b864498\n\n# tcId = 15\n# salt is all 0\nmsg = 313233343030\nresult = valid\nsig = 1591ae743c58ceb723a76f502e21ff6a65c24cabf5f527bab5a6f2a69f20c776fd2251e43ad22e09b1486ceb1935b2dc2ade95e233f296cc0e5a8af8109659be76b6bfdf37e14837fd6c34bfed1f19ec9d21f974b984fe4d4773896ebcc7fb862fd641cd0d77178485c70c2d68b4d9be1d863f6f254b77991fc9053f5d5415d1aa74ba9067e2e6607fb651638c9cc0430a40c9b691977b557a31d95a290a95b56ef2ec8e4313686a9c5ef48235912b210fdd2c50aafac28131104c795c42ae75810b0284b2d257e81ecac4240622ebc261ab8bceeeebe80f1cfa70f18d782aebb97d803ea3a895be541be6941df103eaaabd870848bfaf58cdaf6cecdd5a10bf\n\n# tcId = 16\n# salt is all 1\nmsg = 313233343030\nresult = valid\nsig = 6f2f650ac10d5aa2c16703f657233da8c035da67a6e9e950dfd0391399da3a86ca7837dd7cf23e864d9cfca1fe77dae45a01ba21d23dd918ca7bba094aae376100198f59834396ec942fcffdd7d6a44953f69bc60291b1eed5921a0434d8b8953beb9d1e1b15fdca7090fa5c646847c0b759e94f056911ad188d4b0cc399c8c345757d5022f1a38926de0cbda8648a7affd9f031262b1079a3681d58249186fec4f6e98bf151c9b680a46b88dada9b42cca365cf908ed0501cd21e02a5bc4c0675f23ece50987b703499eeb94b6c40b5cdf22299776fe30800f887a1dfff18cd8a7da8c2388060dcb78c925c54b4e620cd3fe7546accfb3bbae9de08ba886009\n\n# tcId = 17\n# byte 0 in zero padding modified\nmsg = 313233343030\nresult = invalid\nsig = 37487b948dac95a1e57bf1ac40888b8e074cf9db9c9825e7b7267d3b105a8c67cb9b33c0e5fd641836798f41b8b1f024b13243da4fa5e527098337e5cac41e0523a28fb135ae060e7c1e4eb9556222bc43bf1659f65a2a2db108ac9b7c9942a5658fcbca5622c115e34ead883ea4ef03f7f62990f282fa791b04489053771329a482467cba8a13ad98f27ff7b61c24a452e085d432130b7259e59b2866e55320119b21e3c706f3596ec174517c43cdbe957e012b573961b1fa925373945ab3209a1007d197e1e9301dd0afa485acf6643ba0587a69f7c44bdf1e53c32f05a3b96db0c462509c292d7de09a6c78ebf1131453d37ab037176011296730f57cda97\n\n# tcId = 18\n# byte 7 in zero padding modified\nmsg = 313233343030\nresult = invalid\nsig = 241a3a7569210a47b83125fb67039a68d9859b971a49af62bfd4bde01e3b955ab166bba5165657fbfa519573027ef1a0f40cf7533f941d64e09fcfcc35cdd564c1ee0823166dfc054ed93e01c5831c036920335d8b8daa32220dd5c0b6a071f08d19411c6418aaa9883375587b19f0720e79f184535d7ed8c5360e667ade541c1ddbf9c0629255d8d286eae8defd34f000a3be1fa7fea65a4cd4f64b11c641806fa57d67b4c6b7b49892f38dc5d13abdabfaa6cb91ed6022d4fb467cdb6046b13fcc8142a97bc34eddd045796f4e19b1885d04c51f53e5bc0c272678990aea50a124274cdf048ecdb7074ca86f36841a7ade80a8aec6a653a0292c82a1b5c678\n\n# tcId = 19\n# all bytes in zero padding modified\nmsg = 313233343030\nresult = invalid\nsig = 484d71be451d1f3667e01f3e7f1a80db9764f751ca87ffc6352953a773f6519e8a0f210d6d43b417670d9c0ce3c11a668cc83394a5e2d7bcd4ae98e50ed26c0ab66b41ad2e28fa703f2da04db0963875842d90a77899642dc297cf37a76fdb007a990c5b7af83e264be9323149fb680acb69a19e0c5aa949c2094e0a18abfa1b199b73363654638d86f9abe73a678ff0a41f6b702b70ea1aedb287add79b9a7f4a97535d0db46c05983072481dbe43fe6dfe33229ca1aec42e19afeb5bd35f1e44264c1fc6c18fddc95fadf1b1676f185e5b55f9a2bfe6b6d40289f240633513828a7b967748bbf0ccd1d3fb9f6240f31790a789d8c709c278ddbb0f706778b5\n\n# tcId = 20\n# first byte of hash h modified\nmsg = 313233343030\nresult = invalid\nsig = 3f27e0fafc57629ccc0432827187766a30537e821a2fcd5f1088100d4d8b6a6a9ce950f51102e3b55167d4b49e0b6a306e0fdf90837d0630859093e90a94fa564b7a4a82f4ccb772377e07a2b5a6873d98bf665c92df1ce7cbdb583cda83947b3c9c3df5b3807b470f23f8d08df9fba78e13d6b635f9f59d2d4baa34831dc6c3e5a29695645b1ed50f3a3389e9e119de765e6d7daaff0b454eadd10f445e402bf3cf4d14f4d16c2d9e4fb5571cea7929d53019d414d118e82d491bf3fb3bd7427abd6eb48a0ed277221c42840eaa1fd5e7ce658f7763099c1d59431e498cb58357a659aea8e181ec0fb5ad8a55d1c0f129500a25b85cbcc8733fa3dfa9ea30a4\n\n# tcId = 21\n# first byte of hash h modified\nmsg = 313233343030\nresult = invalid\nsig = 006e3f343b22fbf5cce816efbfe06636c1619632665591f9b1fd2bd0aaac9a0f776c501d7a232fd2edcc12ac63b3b56aa12ae87982c1997e5ac5fd50f6a5c350e6e84fc17d2149547babc4830f8c2eef1885e4bfb15c9b73322b693ea74eabf43e5050c477c0e75ecf75cfe487f41f4a2df4972a16e0580d57946d504fb073f23ea691086e5bc40e2b2e1dd653f2ab201ad609fd06983a5cebb98678c039150563f6c944bd6558b422de25b9720887d97ef63b34cdee0139391c48558941ba94bdc0c22e605dd9cae669406c3ddb361787ec6437c87a688b0c64f0290b1bc0ce17466592a48b83b27f0442bdb15ef753ad56eaabeb08bb3b7ace7f9620fea113\n\n# tcId = 22\n# last byte of hash h modified\nmsg = 313233343030\nresult = invalid\nsig = 838d0ad34f2393aec53682ed48f937a458a32216a74dcc4a1e591a538119c3b56cad78b1c4b722948373c51c04a50e46fb5f3034f43c5d260364617e6f03af7d75d66baf3dfa1ca94e75e77d304c63ea5015cdd7fb1e1cdfbd6b5ebef2b2addf697f14c97cf9b5cbb1bab7f612b3a428d32cefbb788bdb70729e53d5b8cd14f586aa2b9410bbae2d093bd11f491469479eb640847514d72269cddab484d882aaa9761839aca9851b3d409211de83df742674d6305cc3a71143fa5077bce9d3c8da1f6da0df5c271f048ba589e5c34a23ef12747299d9dc4299589364f2137ace59781e3f01011ae145a5e1af20c74516e0b56d729e49b3de310c197e7a760efa\n\n# tcId = 23\n# last byte of hash h modified\nmsg = 313233343030\nresult = invalid\nsig = 6b19a03c774e1c3c24ea889b552e99fe0068a6cda022d5ccb6d75a447cfa0b16b5b144208dd407e440230ffaad4f12a0746da108dab5d4f162bdc9b24dc68a2e9e077ef5702472c4ceaa89c29cac41b4782b92f6c87e014df2483580cadf2b455f823fe12c9c79a155ea32a9f1ed120fe0f13b10ab4792fd94b99e0aa6ffd27c04ef7088e3cb935436529650894fee6b5b78e0bb5aa59ee7bbb2fb46af784e2c33eb76a12cdd7d0087a081d82d3e466a381dd37d25d3b4a92756723cb1f1f49d0481d12baa21ff77c0291f902682226d99d77d36bfe58d1825988c97d9d00e15ab48c9919583fd60593fa93ab1ca8e7dabaa912f6535bbb05e82bbfaa8537b0e\n\n# tcId = 24\n# all bytes of h replaced by 0\nmsg = 313233343030\nresult = invalid\nsig = 682673d7c98ae70039e9f259275c884da7c77136e06d47e8af72f82a09614a08ed125c6d3a80f701a61dc2ad967e9637662bf40b48543e5b620daf37e3088d2a54a8c5147ef99227cd5cfd0a478d1fd1ec62c495cb89046df756908621099913aa4142c3dba2a62de6a8899f0acc7932e33581d4102020423a99876777c59292d597428f50b846a39d709d38c3a842f9a9531f26dc2a11f518950eee92560fb6b6667a113237a3e6d7bdae48bafc90a76a6839b97e6301e546f5b136ff23d662593f74920dccb56d47fea557adca4b36820469425cdd4071ade7c5c14f365ba4e0da97cdd62cec66fdc724d3f309b6297c1c84091a74d656b4b030787df593b0\n\n# tcId = 25\n# all bits of h replaced by 1s\nmsg = 313233343030\nresult = invalid\nsig = 1452cef4f4e0d46ca8caf3a628074f7ed0acafd0a16c4c4c423cd361cd61319d5e912b162bb2b7326e56e20d5f9814d6339e0cc44da9ba1be28e473880b6276a86b8cdfd91d2f5fa830024b842834bcf2d425c48b5a58464b7a3111f55ade",
     "2d3b9cdb958392efd559f6b6136cd158e157faa4b7ee86a3457dcdbd877b82d53c23d6e71488e554574b78f0be72da8d4160aee680ce485f9fa544562a12a89328560a773ff25138decf4200e2558e3b5a364a4372cd1f64fb25887b8c2b3938aca10d8727535d0eb0b73af2b7ad70656f97c5c1a97d3e2c2d1cd2732c5fe8fdc5ba6f554bd5190a54742313a6175db2a77d36d24934dc056d66cc6bd83abac61e0\n\n# tcId = 26\n# all bits in hash h flipped\nmsg = 313233343030\nresult = invalid\nsig = 2f5ab041e87b74c0ffa6f5b0a4c5ec8d0ee3d2357a0fd2face275dbc6b50a230f2108b4b37fa45d5bb1211fb26b96d315cec9391d198ad7713faf3c4fb60806cbe6378c7a08c2e75a67848ca98c80a02680650eda98ff0c818f1e7af9ff3a3236150699a4c900c394c2a00ea65b39fea873504898c6fced5e4520bf3d69a11debd3e66ad681b7d03bbca940fbc809f03f99079d0f24f31cdc76afab73ec0b4f5baff4437b0a304a8893cf593bcf47b2f63a401f1b456f1741b3b3641e3154e6f4bc035723fc3532ee22d4f65a3963c1b278c1a9a8ce7e04876e8c327a70463e3785b9a5aa5b4a50cb4e35d92085172a61cc5407af2752a59d06b58a242926328\n\n# tcId = 27\n# first byte of ps modified\nmsg = 313233343030\nresult = invalid\nsig = 31ce7ca597f76ab95d47563f728ff93bf43d9864e5bd1229b824ae26b5a13c79f6f7957217b37e1af0537fea81616187ff08a0d5c98a92da8dba61bc5c14da3321fd1146d83c2cbd0ec0687d81f6d7349f5a0cab0840e22cbfa83f02a79d321ff88830d47d4842c0b032c27a181ac06a42cd0bfedaf75f2daa53f64eacb5986545bcf150b8d433e66b698f2553f9da259bec319d8c0cec05d9c320e7300463d41eb077028c1e0a7d6d87d4dddf54c5b78d6a15e4527e37110b9b9ad2f3b2dd0db591227d41cc9f26f2349581dd89e0ba639d0cf9f8c86fe819dbadc688522b58d7284caabf843e7143395255e9a0d710ffbef6ad13f6a9361e20d2f6f5a414f5\n\n# tcId = 28\n# last byte of ps modified\nmsg = 313233343030\nresult = invalid\nsig = 5798785187910703680cb2109f492c3f0a91b4a8f11d3da775aba891eedec3d76fd30a939f5d7a2baf7290c573e886cec8ecec0b1598f2cd169d53b4abf8accc09709187f32a12c80fdb42ed98d9e98b0923828f0e38acc338234f7b7a0ee377644a655f48816ea4a5bff0f6d63c3945dc3aaf921e9404864594bc323c1f3ef42f9361ed6cb8fcff2994293e17865e2fad2d885277251fa24d7e7aacebc48d61c3b48047dd7c99826b3105d2f820cd62404cad5d758da461af67677e39e55086d8fa52ea0334bc3b77f95191ffacd28ead07a34e4672577c4c65b5bb9d5f9cab6e1f1242216291b69a0c98714452f01f37722ff26589734cf6020c5ac9196374\n\n# tcId = 29\n# all bytes of ps changed to 0xff\nmsg = 313233343030\nresult = invalid\nsig = 3747c7c116cf30567e24fd4213c126ec84366a26eb304a65d144dd9b453054df4e5036c861b5807137934b1cef351411e40654bae5df6fbe3c42d763407f273d3dbe059fc6412a366775603e064b1561a58e70860edf954dbe666f8fe44f44f87df3b0e3f3e19c904966ada52f00806f975f256d4a855cee973e20f33c31f9f2b3792fcf326f075f86f275d8ef8df2dd0abac83d491d485fc167cd40f3802f66036df4fd64fc441ac8a25b405d5ef960127623c269ca836671a66a6bf2f39c0792dade17564d31863c7e0161ee0bb88522ac0c9054bebcedb603a2d18ddb0f64a91ca5a2f0086afd0d8c07cb0c1e7f24d12f866cdcde46d663c1d4dc7f7c6f62\n\n# tcId = 30\n# all bytes of ps changed to 0x80\nmsg = 313233343030\nresult = invalid\nsig = 1377d4997c03d885e4b95f0350b1c8091a4d9beef9533dc6abd194a1439c383622b9dca5a49da247cd55c02186829f695ebb007ef0535c4757baad057d7bf76dcfe37cb9181b0c290db16d0abc51ff32d03b6a8e56ecd270dac231c81e50c7e0203d22b991291fec650b9904b2539a8a330172843bcff0cf46f06e32f55bec1f5a734e70ec8e4e8883e3c22eab7561d9c76737025352b5c9fa9c76eaacb909d23d0d7d7b6f1094ccec8ba94f149f81946faedb39ac557cc28817c9114a89a6f720d849f90cb23ad202ed4682036b3cb70b6fd5df0225900eaec7a21e39fd433d3200aed4bb4abc3b531393fa462fbc920c918f1938d33ca86e7ca3bbf1d34d74\n\n# tcId = 31\n# ps followed by 0\nmsg = 313233343030\nresult = invalid\nsig = 7d0f3cebb4372569e8f02df9f42222151cc31659df8d5078e9ee8e91030735d27e66da8c87039a27ac28588e8431d7ad1583534e8570318cbb2554c07016bfb02fe59af00576b7908286f4b27e36f768a118c3f3a1ceaeffee03a1b67270c3e489cce5c5f1171e0a8734553403047faff680dbcd70bf0fc1f0f4461bd4e68c6c0978da3490a137ddd8f62bd79c6a1daf70f7a9a3e90056ccd41c62f04915bf128f74dabcc47cba85b0fae47a04da32e17799ca150814d27793816e6a198390c35d1f35abf6816761a5ff0c28b1e60eeed244b1f24934174a1d2c469475f3eb8842eb9f5c6224386994aff9579f26ea7d73c668a113ef7dee8b2bda576135d452\n\n# tcId = 32\n# ps followed by 0xff\nmsg = 313233343030\nresult = invalid\nsig = 53f2db262358c21792eca635806ea1c1ad041d9334e977a25c1de0fc8233ec6f01737adcf1fb4dbedbd0078406ecad921e37c77d4585b5eb5ecc74c07ada1864a3c13acaba9372f852aef55ff2dc42c0aaef74bb656b8e0beccb7b9eae587fdf3b52eb678af1032e60ad12321c9c10c445448df523856ad262208a06b8817ee229df825f080a72d5e1a43f222215824a8ea6d455c80b2563c65be1eaa0455714ae576ae67e46d006934cf0c137b8c9900af9ed716391ce96ec43296e83a5a10390ed91f2e6753ed0254f0290ad899462b3b7af42c3c5f0893863a3b5e6052d3a6dee554746960a07fb6ecdf781e47b96023ba01cfde4c7214611a1be5735e2fd\n\n# tcId = 33\n# shifted salt\nmsg = 313233343030\nresult = invalid\nsig = 11e8938238a20f0e6947015987380dfd88a1661606bd05bbe4298f4746e81e3bbf34aeceba5360f1839ee0d7d7fe3e578cacc2d24b15eefe2064edb1fd04ff9a44c0a600ebf00f64fbb1ead4246e5ffbad0c22441ed073462f26e30b61a0a9142b4f993d1b26fa32e11382da33b9eb5855cef6736bec2f4f5bc6bf82fdf7da62346a4d9696c53e1cfa789667b721f32f7779daf7df85474096a9e9a7291afc76df3a66c7a0b997b41bfb71fedbdb4e65095efe1a81d35b66be55432e0a6e33905475b46a94e05bce7fee84645f500d8ebd7c0282c35f22774e7089262210f83ed485cd2b045acd5d62b4bb53dcbeb2588dc6535518189cb0220a7c9406e454d6\n\n# tcId = 34\n# including garbage\nmsg = 313233343030\nresult = invalid\nsig = 39a8e947c919ecfad7ee28bb708c1f9e825036374ea0f610bf5531d89b813d506fd00bdc15850b250ac50fc556a676c894fb641dc650999eb6239b91e2c755126bbb9fef5783a5ab834e0ad91c60e720e80e096c091167a2a1dae838a16fe0ebaa8efb3573c89ac5d8e0584b5ec4e2168ef097f937ef0f0d2a2f964a8e6a810dd15b9c27b234d788af3c4f54dc97035657ff19f2835555dbafd02c4ed3c76654fa868babb71534bfe84674eeddbfc2b27a517f666bd03a27d8173bb92826a231cd9a241c171445b416934ebec5f7eea4fb41a61937d9a98f61b2fd1ca8e2be125e85cc8d16d553b114ab72395e86fea52f54edd853e9c5156557e38f621b975a\n\n# tcId = 35\n# leading bits of masked_bd not cleared\nmsg = 313233343030\nresult = invalid\nsig = 9c13d877ac2bd8c02c11e29ffcc0c1046dbc9870177e843c30b499c2bf7fd09daa43469caf2b8c3e955ded95e4d62209f7571bb45593f4cd8b0c7bc9470a8a693837248b5a7854dc8e37e752d949479272642994182061d7af80b0ac6f6e984874c8cdc6a5d7d17dc9e9de5ad12120cdb9f6c0d09c0e11b87b3423e37ba9437a4f76cc1e6124579e5f79832b89710de1968ce46e3e69fa185c0a924e8cb5f996ee5963f6826dd37714de264d75545e8509caf8735330cde7ed4228e5779471827b83757c466022117c45d598f5a4a7fed7be4e1b4d320f894879061a75d1a41efd8dcaf3c61733ed8ca2cc2f83714f8fdbc7a97cd6d6b97ea3d36ebd69890633\n\n# tcId = 36\n# first byte of masked_db changed to 0\nmsg = 313233343030\nresult = invalid\nsig = 00566c95524ad0995eda7d668fa08e8f75bea868b60972d6488cbe8939bbde68fa5206e671f35555f628fa707ce7ba0f468cfa8b9737e0ef64e0e23c901e4965ccaaeefa9b84363a3037cf5f9e044e295fe57f32c1125ca70c639b22732aa4c4b3e5562690bc1d7e7e74dd01c674212dcb63c58fa23333d45e1e4ccffa5d186443cc785c5ece3f2d7a8995e25de6a171cbc960c272c2899f6f87ceadb72eea1be085245669ac08993591e72bb9aff8bc29388b35c99f1ba7477af9d16754894a50d4caea4bc80e2aef2ced27f4a1c88be284bbb40cb8ae279b4e38a4cd8a51a92a279a799b3316c2938e1386043ae7ab1d8605cd310d7239c805a07a19c7b17d\n\n# tcId = 37\n# last byte in em modified\nmsg = 313233343030\nresult = invalid\nsig = 2b46a0aab5f573e32ffbcb411cd99d2f90aa9b1abbc600b0cda0d824f79020aab47a2494caea20fc93017e77b99eb73a1f8a550b611e2747ad29207772629c2ec40918c07adef1c90c99a15cddb9eac88955b4093a9e743d2420b4647e167bff8ddb07ce197db89d8a7d3f327058a41cc459ed4f6d5d23dfc015479d95e195da37f5b1fc318a3f74a0ac5fe2b9569c7fd99b8eb3ed3967a5eda1d246a3b225548f67ff860202033e7164d4b99dcf95f4232d18a7913f7258a33179133a6fb4ab5a4937b642eacb92908cf79495745abc583524cb0236fbfadd2c7e8b0a6597017912b4737fc01432625a508355869670bef25d32afe6753c38cfd96ec38953fb\n\n# tcId = 38\n# last byte in em modified\nmsg = 313233343030\nresult = invalid\nsig = 3b65975357ab2a410c2fae7f2f0381e6c40951260451f2eff05f0dc707abd013a996fc10658a6963f462877a808f61ad0362b9f640750b19debf3d59692134e357a49ed3693f50924b7c8a1824ccafcb4b93f7679dd892823cd479895d41fd1c40fb89fb1da19bc1fdc72eb038782f24ba3326428cfb166a475a9fd27f94d1a0ca6fa0e6a0d2c2883db3eeb2c0a59474da36211695fb811b9e8bc7f05ccb1f50d26d71a2dd209b0d269a736610c7dc1f7343a4736fa2b8c27827dfcad49bc4a86822cde1579dfbd646474f11e1a60f5e4ac2f2a3a5421a7baa9dea5d24be03cb6fee771dd808b67f886b37be5a300f6551d7e7636e9997b3255ceed5187ebcc0\n\n# tcId = 39\n# last byte in em modified\nmsg = 313233343030\nresult = invalid\nsig = 4516c8a39b8544d1c65d96472fea0b2753060330e",
     "76e6f90f41ab349953d26ab1b95fd87484535b68c0afcf1542a9b966a9bf98b89a53bb28877b34d168a4ba8201215c55f9e86d30b7159093517682e6e956078947e54e3f3a779da032af7dc6bcab1c0b2a6693fe0eeb9de0d158bcc125293a6f10ccaf1499b6ad912ed5912537e3c3c5f18eb0ab8e701056d7b973b8b61af918858b87152b6c40671bf96735ab1a112972346e771e7cd9482f6f59d320b8798a271cf21779747f964281afa1303142eb3e1841772de825b4b5e68024dea014193c4e1c206bdc6121a8f2d41837be3d13833ed615d5b9df4ac4c86cd25344fe1022df0adabfe2d46f7d9f0d0\n\n# tcId = 40\n# signature is 0\nmsg = 313233343030\nresult = invalid\nsig = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\n\n# tcId = 41\n# signature is 1\nmsg = 313233343030\nresult = invalid\nsig = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001\n\n# tcId = 42\n# signature is n-1\nmsg = 313233343030\nresult = invalid\nsig = a2b451a07d0aa5f96e455671513550514a8a5b462ebef717094fa1fee82224e637f9746d3f7cafd31878d80325b6ef5a1700f65903b469429e89d6eac8845097b5ab393189db92512ed8a7711a1253facd20f79c15e8247f3d3e42e46e48c98e254a2fe9765313a03eff8f17e1a029397a1fa26a8dce26f490ed81299615d9814c22da610428e09c7d9658594266f5c021d0fceca08d945a12be82de4d1ece6b4c03145b5d3495d4ed5411eb878daf05fd7afc3e09ada0f1126422f590975a1969816f48698bcbba1b4d9cae79d460d8f9f85e7975005d9bc22c4e5ac0f7c1a45d12569a62807d3b9a02e5a530e773066f453d1f5b4c2e9cf7820283f742b9d4\n\n# tcId = 43\n# signature is n\nmsg = 313233343030\nresult = invalid\nsig = a2b451a07d0aa5f96e455671513550514a8a5b462ebef717094fa1fee82224e637f9746d3f7cafd31878d80325b6ef5a1700f65903b469429e89d6eac8845097b5ab393189db92512ed8a7711a1253facd20f79c15e8247f3d3e42e46e48c98e254a2fe9765313a03eff8f17e1a029397a1fa26a8dce26f490ed81299615d9814c22da610428e09c7d9658594266f5c021d0fceca08d945a12be82de4d1ece6b4c03145b5d3495d4ed5411eb878daf05fd7afc3e09ada0f1126422f590975a1969816f48698bcbba1b4d9cae79d460d8f9f85e7975005d9bc22c4e5ac0f7c1a45d12569a62807d3b9a02e5a530e773066f453d1f5b4c2e9cf7820283f742b9d5\n\n# tcId = 44\n# prepending 0's to signature\nmsg = 313233343030\nresult = invalid\nsig = 000068caf07e71ee654ffabf07d342fc4059deb4f7e5970746c423b1e8f668d5332275cc35eb61270aebd27855b1e80d59def47fe8882867fd33c2308c91976baa0b1df952caa78db4828ab81e79949bf145cbdfd1c4987ed036f81e8442081016f20fa4b587574884ca6f6045959ce3501ae7c02b1902ec1d241ef28dee356c0d30d28a950f1fbc683ee7d9aad26b048c13426fe3975d5638afeb5b9c1a99d162d3a5810e8b074d7a2eae2be52b577151f76e1f734b0a956ef4f22be64dc20a81ad1316e4f79dff5fc41fc08a20bc612283a88415d41595bfea66d59de7ac12e230f72244ad9905aef0ead3fa41ed70bf4218863d5f041292f2d14ce0a7271c6d36\n\n# tcId = 45\n# appending 0's to signature\nmsg = 313233343030\nresult = invalid\nsig = 68caf07e71ee654ffabf07d342fc4059deb4f7e5970746c423b1e8f668d5332275cc35eb61270aebd27855b1e80d59def47fe8882867fd33c2308c91976baa0b1df952caa78db4828ab81e79949bf145cbdfd1c4987ed036f81e8442081016f20fa4b587574884ca6f6045959ce3501ae7c02b1902ec1d241ef28dee356c0d30d28a950f1fbc683ee7d9aad26b048c13426fe3975d5638afeb5b9c1a99d162d3a5810e8b074d7a2eae2be52b577151f76e1f734b0a956ef4f22be64dc20a81ad1316e4f79dff5fc41fc08a20bc612283a88415d41595bfea66d59de7ac12e230f72244ad9905aef0ead3fa41ed70bf4218863d5f041292f2d14ce0a7271c6d360000\n\n# tcId = 46\n# truncated signature\nmsg = 313233343030\nresult = invalid\nsig = 68caf07e71ee654ffabf07d342fc4059deb4f7e5970746c423b1e8f668d5332275cc35eb61270aebd27855b1e80d59def47fe8882867fd33c2308c91976baa0b1df952caa78db4828ab81e79949bf145cbdfd1c4987ed036f81e8442081016f20fa4b587574884ca6f6045959ce3501ae7c02b1902ec1d241ef28dee356c0d30d28a950f1fbc683ee7d9aad26b048c13426fe3975d5638afeb5b9c1a99d162d3a5810e8b074d7a2eae2be52b577151f76e1f734b0a956ef4f22be64dc20a81ad1316e4f79dff5fc41fc08a20bc612283a88415d41595bfea66d59de7ac12e230f72244ad9905aef0ead3fa41ed70bf4218863d5f041292f2d14ce0a7271c\n\n# tcId = 47\n# empty signature\nmsg = 313233343030\nresult = invalid\nsig = \n\n",
 };
-static const size_t kLen80 = 41798;
+static const size_t kLen78 = 41798;
 
-static const char *kData80[] = {
+static const char *kData78[] = {
     "# Imported from Wycheproof's rsa_pss_3072_sha256_mgf1_32_test.json.\n# This file is generated by convert_wycheproof.go. Do not edit by hand.\n#\n# Algorithm: RSASSA-PSS\n# Generator version: 0.4.12\n\n[e = 10001]\n[keyAsn = 3082018a0282018100c6fe23792566023c265287c5ac6f71541c0994d11d059ee6403986efa21c24b51bd91d8862f9df79a4e328e3e27c83df260b25a9b43420affc44b51e8d7525b6f29c372a405104732007527a62ed82fac73f4892a80e09682a41a58cd347017f3be7d801334f92d9321aafd53b51bffabfc752cfccae0b1ee03bdaff9e428cc1c117f1ac96b4fe23f8c23e6381186a66fd59289339ae55c4bcdadbff84abdaa532240d4e1d28b2d0481dadd3b246557ca8fe18092817730b39e6ee378ffcc85b19ffdc916a9b991a6b66d4a9c7bab5f5e7a3722101142e7a4108c15d573b15289e07e46eaea07b42c2abcba330e99554b4656165bb4c0db2b6393a07eca575c51a93c4e15bdb0f747909447e3efe34c67ca8954b530e56a20a1b6d84d45ed1bcd3aa58ec06f184ee5857aaa819e1cca9a26f4e28d6b977d33916db9896d252d1afa762e287cb0d384cc75bfe53f4e922d02dd0a481c042e2d306b4b3c189371e575b25e0005a164cf69dd0976e4d5be476806ea6be6084e71ab4f5ac5c1b12030203010001]\n[keyDer = 308201a2300d06092a864886f70d01010105000382018f003082018a0282018100c6fe23792566023c265287c5ac6f71541c0994d11d059ee6403986efa21c24b51bd91d8862f9df79a4e328e3e27c83df260b25a9b43420affc44b51e8d7525b6f29c372a405104732007527a62ed82fac73f4892a80e09682a41a58cd347017f3be7d801334f92d9321aafd53b51bffabfc752cfccae0b1ee03bdaff9e428cc1c117f1ac96b4fe23f8c23e6381186a66fd59289339ae55c4bcdadbff84abdaa532240d4e1d28b2d0481dadd3b246557ca8fe18092817730b39e6ee378ffcc85b19ffdc916a9b991a6b66d4a9c7bab5f5e7a3722101142e7a4108c15d573b15289e07e46eaea07b42c2abcba330e99554b4656165bb4c0db2b6393a07eca575c51a93c4e15bdb0f747909447e3efe34c67ca8954b530e56a20a1b6d84d45ed1bcd3aa58ec06f184ee5857aaa819e1cca9a26f4e28d6b977d33916db9896d252d1afa762e287cb0d384cc75bfe53f4e922d02dd0a481c042e2d306b4b3c189371e575b25e0005a164cf69dd0976e4d5be476806ea6be6084e71ab4f5ac5c1b12030203010001]\n[keysize = 3072]\n[mgf = MGF1]\n[mgfSha = SHA-256]\n[n = 0c6fe23792566023c265287c5ac6f71541c0994d11d059ee6403986efa21c24b51bd91d8862f9df79a4e328e3e27c83df260b25a9b43420affc44b51e8d7525b6f29c372a405104732007527a62ed82fac73f4892a80e09682a41a58cd347017f3be7d801334f92d9321aafd53b51bffabfc752cfccae0b1ee03bdaff9e428cc1c117f1ac96b4fe23f8c23e6381186a66fd59289339ae55c4bcdadbff84abdaa532240d4e1d28b2d0481dadd3b246557ca8fe18092817730b39e6ee378ffcc85b19ffdc916a9b991a6b66d4a9c7bab5f5e7a3722101142e7a4108c15d573b15289e07e46eaea07b42c2abcba330e99554b4656165bb4c0db2b6393a07eca575c51a93c4e15bdb0f747909447e3efe34c67ca8954b530e56a20a1b6d84d45ed1bcd3aa58ec06f184ee5857aaa819e1cca9a26f4e28d6b977d33916db9896d252d1afa762e287cb0d384cc75bfe53f4e922d02dd0a481c042e2d306b4b3c189371e575b25e0005a164cf69dd0976e4d5be476806ea6be6084e71ab4f5ac5c1b1203]\n[sLen = 32]\n[sha = SHA-256]\n\n# tcId = 1\nmsg = \nresult = valid\nsig = b520065682633ba54c9b713b2ef19cdc1fcf275ba1744c2350da7307a20971cc30eefa37d1667d23d20001a674f0e00df4f9b9e1d5fe7eb85cc45cab5dd625759de83017995c93d48b126df03aa74ef87daea0c1652dd370ad5d663598a383cac217a208b22c7cf0e448cc7ae0555f892ccb8ded6894cfb0c328cb542be0485d860ca77203081f3b04c6f55c5689b1a66b1c24819a4a7ea55f32e00f61accf4b411bb320a96c990173b63ccd74e7da7df5ceaf33a39a8acb89a845a594b164ec6e22cce940eb06f2d487a8bc4574451878c2bbf57d241f76586e0703bf5f86bee832d05b75fabaed6accadfc1ec2cd6e619dbb29b65d6e6f5e118ad52d82a955d21005ecd63fb382f32bb8e2e1e57220b345cd6422bdd84a91495d0ab5775b08139edee960dab1b4ffd9ea5b27398b58e6e35211c3581501e99bf5e3f17fd79381528d28a4927e28082f45bfa9519f98ea663dc84c50317adf0bd5da98b01459011cec61800534dd5afc5a567c19e4a400f06dee74112083b5322615c144ce3b\n\n# tcId = 2\nmsg = 0000000000000000000000000000000000000000\nresult = valid\nsig = 8e10f23f49011d761946b283d7152e851ee76e5caa1741b0901eea317d8945f2a0368551b3f2b3a6a0d6a939aebded8fea0a96dd1d037be33b1c35ce78dc89693918a99d547a1d892f4047c09fff7a6523acb0cb0cddebcd4a6fdcc309a466ca9580fedf032bf56154f8d79d5c4686abfd2c7abd342b37e5373b59a07fa865b118c44f2c44b851306dc97eaeeb638f14bafbb09c81996beabaaec28c19f06ffd59dbe3080e0124e2386418052735f541d496322c03ebee6e4dcaba24dde9772a9f079973df26e854c255eb48df50c01d49831e54b64d0ff862d03fb4d82ff204d303b537176c50ea56761a83d0aed8ed2deecbbba981c8aacd1300051a864d1efdc897f31383ccd6f181bf976a75e7a7613b60b3cb2a6f7ab8636f672990c13017f2981c11ba36096cbea898f016c581ee859e950bec195cc4e376e134341b2fd3e3d6181ba4d377b2aab6a148c6ea8cca9ee3478297e901856ab18f61c0233c899841e5da125516cf5274dc1b22e2a51c922daeeccfad0f2a8bf84e531bc4f8\n\n# tcId = 3\nmsg = 54657374\nresult = valid\nsig = 22915cfa1d7dd30f50b4c0e4cee42c5f0aa1b7a6644f8a11e611b2db042b122af8211ffc1dc220b435d8919cf64d715b54ff8a762f702b365cbdab455509b97d9b310011467d4186647b957e2efa404aed3b84840529bdef7746348385a1c6a2ecdb88d1cc2b40b36c346386739c39d2815938e463a35348426f17d32d633b873d6124d8b49a726743af7c0e56d63394155b63089c63ed8897f8af2a2260d33499afab11c911faa754ced5acdac2de571f39c2768716e4308244a99d1e65da7061d2feb8ec8b4e517bd5e19cac626698479ab2019257cf83ad7b641db2345b38006d63f84b41772b90037778389cc30ed6aba6af212d9326792af746d7bca9211fa344fdc2798a490aed3a2840620c2a85e3d9b9c38f2330072663e16dd26bc414c7d68f6b11d2cd3e0387c1834c5e2262a9e2dc1bf7c0108b4e2052566c7a941ef6b38c8687fd7abe6add2b745c2c2d680ae3e5646ce2e717ef9899c7f3fb1e3088e8c0587d86546f752771819595a7a3d422820ceaa12e3ee671a456dac673\n\n# tcId = 4\nmsg = 313233343030\nresult = valid\nsig = 8f9ac1354af4161d0e55b5674821d02823b3a6b3f79cefb98cbc77f9ac2d91cc6345f989a7828132f73f3630a247a936b6a057b3e5a2fda0c5999ea7721ee8880960c24cd2377e869cca1799747142d57ad6a8d83ec9254d89f591add11a758e1ea1e29bd08f624d0e28cea52ed5eed7c0f5f49d3533eb1cdbb2af837dc42942f9a86b5f4e2d5ce506697ef067a344949bdd89afcc25978af4d50c300bcd0ffc9d93cc559e3ae1a13215a1d3f6030827340c6591061a5ab7e65153b1df8b25e1421f924d39c7e6f76243c1bb9ae4063d9a475cd2ece45f4e288fe0720074e87868d70a5584a9ac2b47a56417cc76f15154315545a3ed6704b365f15d34320804469c3b09ed211cbc9e9e767b6f21fa16f8641d8b78b8dff8062a25b5bd3b6a38cb4706c42c1fbbe66db1c05cb57531132eb94fe1569735c33ec491c318a686c837ac810be4afff605f92bb390e7ab3cd24c0cd997cf13f112e5aa01746f43902432639e1eefcbd37b413c586f057bcba40a8f1251251e84cb7c87c53c1d1d558\n\n# tcId = 5\nmsg = 4d657373616765\nresult = valid\nsig = 6e471c9342aaa27bddf64b02e8805611a13770b22cc3d24cdfa9a2fc14865f59344c288cf15d4c8785089968a12e9d3e63b8179489568743448f698f316640146322ef3b611fc98396cf4a4757e48ce6701f123fc0bb8df80b63cd2371522f8ed929f7bdb709d424af6eab2eab212b43afe537fec7bbb9dd02e64f116e02ad1214ae931a6fe28a5982029088a27bb95ef2ee46ad212083719327acab5ee51c82d94d5b14f6dffd2242ddf9fbbb2d03f945796a3e35346f2334ca6b4ec5d9ed6f1584688e661951e948cb95fc5cc04e90cad98c861ddff514c60275650ae3003185efe0c04356b07f361f7dc7e17c5de479cbf119c2910aaffa032aaa81ec9eb9f7e1ad21a410ffce2502e4829404d01ae090ef289bc28c9c3f37d3fcae33e1523b3c9b81e301f51d046196fc15c90d58bd35a1fb11fa04621b32cb61e718a434a0aaefcb676cbca888554d1e84d43b108fc1cb123cd2d300da630fb77a3ce29a0f53af32a5ce81c5ad772a199d1180a9e2f090847cd87ddf7b39aeec89a6b492\n\n# tcId = 6\nmsg = 61\nresult = valid\nsig = 39f7dc9010bf3c200df551499404ca40346e58ce0c56271e2eb7835187ae57a7b9a0688c9b088ad85e128f56c0299c437a1a9a9104f3f51aab7043d5714963e46ace5d8e435fd3e416dd61474e9dcac3ffa6c3f0ebc4ada987c4313ec36f2c43d2dc749e496fbfad639dc811304388990b98cf10ff616a866bf5d98cd5199bb74704ae4ef365424130738b9d81f893a5e2316ee6daea185c170f69ebd2ad455b56676ebda9d0bb0bf4d3357475ed8166a3d2dfe6e093c3a4bc5bc2fc2275e6779d809107b621138fc629a6767d5809c85bf88b46b14a8e4ee9e310db746f4c0a79a3d36f6e305125642dbf823474fb913a9967a6d120e82a79ace48c501fed8dd6edb9634df909fe6775f8f6fc5b79f5881e1f13b7cde37c7c3f97319cd612f8ad2b1ac921079f18213e5facba0b83c17887e69501a6d2eb37661f03590af1a15646165eb785f467cad0c625947e8a8a4a68f8938077d5ef7f1b8b4da0d09ad5874bcb22ccc4ee36b9341b974a51a1d6ca009ded4ace9faa99d924a23421aabb\n\n# tcId = 7\nmsg = e0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff\nresult = valid\nsig = ae8472e987806e5110beae330056ff974abfce7ea9927979cdd14346747414cdce06a9c78eb1846c75dc288d7da531531da49ba7651d3a1f79e3297fe37aa73e075cfe5ac004b166526cba55f914e0d2fb1f12a60a3222dac434fa378c2e7b0ea9c2cb5e22cc343ea624ad6cf5545a61364cd67d6dc23d22e4888a253e940ff0e0ce0207c1feedccdfa10f50d2363bdbdf10893e3967d7555fba157f9a450d6bbe63ff31777bdfd402afa72c3a2181e5cc025443cec30d253653db7e82eb7dd488e6491fd25001723eae2e3106c7b50c2b73c142a4a31ec43e",
     "dc9ec9011383c99a095b36258a0a77aac2af19b26af8a166b130f7f57f03a0e8007d5ac0eea9ecbe14fb7885538a22c13de5771bfdf523fef9c9b5f52ebc2af7902a0baf2a33923b0d0622b8fd5c938214aea4b9e7f0a647c5520c3a94a29737b95cc623f20bba8eaa3e9db60116fe1760d9b7ac1841e7586aec9708212a5bef2ff67c74462883062e052ab9fd90ffca0f0a6166b71a93bd289a1d4acd2d6ce72ae0b91cdde72e\n\n# tcId = 8\n# first byte of m_hash modified\nmsg = 313233343030\nresult = invalid\nsig = 730a26b2c3fc2df474212c04fcb346b3b78a58c611351871ac1c5262867ce19a6f553880d68ba4c35827610b72bb044162b083fe9ffa7a82e2366090464821946f2ce1a8ea19b12c10c0e42a52ff805851c226748a9d65d7cb2057c9ee0beddd8ca02ae1bc36ced39925d2429d531c2e607bfbf0648708ef4f7d816c8839cc8c62036ac37e811f94a943198acf6e19c66cd829bde9dec9969eb4724e2d4ddc4f8c2bb2527007ddbaf2975937ece7f1779db28c610503e7ebbf0b03459a1f4794136842b57d04f14e22b98ef37939c64d08fb242cca548b7bb2c2d8b1df6bb8b0b7f6f38e47226e9fc0a4723c2a518ebdc5c4c8f15db74fe958bb567e55f092d3dc8af0128b353e2d273d574433c22cca579c479005b52c715eff1ef4eca8d82d2f6d7cc972fe0e75f19eeea3b77ea7fe26b1d29cedbfa7ef0737e4aa50a567b5fb417e356fa8034a72a53c5d1c0cd467808df6faeba89dddeaeb09c3ce7937450b41e7c1d4403b3033d3531adc24e9f5fe35d877a3e36fd3702289e69b460b97\n\n# tcId = 9\n# first byte of m_hash modified\nmsg = 313233343030\nresult = invalid\nsig = 39e95e2dbbcf1817407146b19148aeccdc6b538729ae4f3bc240f4ed8cb9dc6a0e9cdf436bf5237e79e239a432a953ce3804a7a55bcc3f7a0d37d0123b1f046ecbf0eb33f52631e049b0692ba2e55db134f60e085c078b0cbbd66a74bd09c852fa9f029fdcc25679990dc482284de9fc74df343aa7197d84689011f61ec0d1d0fd3b811a918e80b9ede6c78c03f0ff6ec7e7ecba9cbd8a4124128034e425aacb004c042be805710e94ca4d36cc2f5d893036091950bb1663d3499f8ebe09ea2760e3939b835efa585834112a5515c8900db98a44914a6c3e5caead29b182e585092ee59126c9e6a7737d3b34b2fdaeb74ddb299cc3725687167d5c1f92d9186f3aefca61ad6c27283dbc821f6b5aacb238500a51f7439a8bf555ee26fba4c8613fc43ffcd254977f5f67095ef23e956721d5d71a8a73503106b2555c7433cabb304f30492c90b357127b09d45f171d7f4d4939c84516f96eb8f0693385e53a3cf8a6b4d0638b121e2e70b5451883ef368097c7a2010dfd889015eef0081513d7\n\n# tcId = 10\n# last byte of m_hash modified\nmsg = 313233343030\nresult = invalid\nsig = 84f1e37e7d52955a8d076e83fabce6a7153d49e771146ad665ac95b67eea85ecf8c126887c0b0e4ff2f4f3ca11ccc510fc4a062b3157edf20ff2763ed0c44ca8d48c571119bf5a4ada5d87eaf5c389cd8ce3a9ce70bfa98d5536fc731a2607066bb2cd0915511404e69ae5ba69bc197ed995f51d835bde74c5dd1d4e69a54445f3723692c3b201c28370e4892ea56c3d2b8354489a728495e7d7d611e82c739d53ded82f1e72c4e7273ec63c8fc4cd13241219659d9c6c8620a455477587737ab97959a91efabc1e1de8218bb67466b8e890f47b5ae46266ac06e06247f3a169a31f9fafa268bd453c67b77f7ca9a53adee42b3a9acd4af467f7defbcfb96f087717137bcc0bfb41f5add94af4981c00d95f992995aa3ae406dd6df56a7070834d201eb1cd12c7ca87779de0eb38dbb92f4e7f6f78dd224d0dee4b12b20836155553b0a76e2cc071abb59a70ab393679ca458d18f9a5ec69d1d70b074d6cc8f9c3d5143de1c53dac156d36d28660953ac68670e34317a8864cf7c7214e5c9c33\n\n# tcId = 11\n# last byte of m_hash modified\nmsg = 313233343030\nresult = invalid\nsig = 875c6f8f3395f75024b7ade4f6b3004c4607aa6cc99168d01ccd6cb481b51fb8a2bb44bd10a0e7768f282653ab6ca340b044ad03e09abd01bd0962a5e3724ff7a49ffee7818dd5acd0a6968c5c458c207d0f77eff3f8a2be4b559314b02e413865ecbfc0bf7ed7e66ae10b86efa9873eff30a17aedbf81cd98811ba228543ece8b14f64ca98dd26aa5ee83a1847d6fdabb8140e4dfe48db39f6a48a825b7af48c1e1bd124a2f6b76d0e37f76f4ba986ab3afeb55c7cf2f45021dc325322ae61b531f43242c65ba8b4a550801e966602730cc186bf4678d300d5783da4bb9d9ad54aceb656ec7e4598e3c209ac48e1b775b68896fe282bc2e3bf9cac99c601d64de18d31d1892b3098fae2933854f822c49faa09e079c4ffa9dd2c006471263f02e7e8eaf0345139482cd82ed8e6d3e080887ed13f2e65819a1dcdb6d3f5692f5ec7f3a0609f2f71ca4564d58f60a0311be5b597ddda9b07b52541ea924cc05146243d8b3899d3ab001184767f896f0e044224d96c975127c1c987a84d15cfa12\n\n# tcId = 12\n# all bits in m_hash flipped\nmsg = 313233343030\nresult = invalid\nsig = bed5c44c1e2a041c2130caf34ce43e4efdde6f7846c30d5a1bbdd88c266485322b1fd6d6353e85ca4538d862394fd32180b36c10b314a8823a6c4a78cb62b5b9884a6ca480ad2993d4f209d1895f9a4182a14d47f09a13c9c9bbaf211d07653f8c610c16d156c931df9436bc7b9ef929dede2c1d59a2b0441290f51825ef44964564e3420dcf3c1622a8227a82b8d3806eb5d246a3b0527cde1be3f219a9015653f3f8a3956d055eff6a90f42b48f3fae5dc57d6be111956e6a9b6ef52dc35ef5ac363f1ce802c4c09555dd343ad0dda96b467166ac515830e9e2ee40d56e68558408b1fb71cbc4a964ebd832e315d8bee13529314a8ae346f4d12f5ef00686f4ec26f9479f57e69244264d81a0fa39ba7670cdf2db9684e0b70d2864c4f2514e498e87d474e65cb188835d5fd8c34e5432944cc0874eadcd0a3e62d9f533583d33f5a99af63d6cf429363f58f691deb4a95ff409e32c393f344c5e0347b2f12125f6e3944f563d59c6539c661129f300267dde299972f02dcc240bb8541acf2\n\n# tcId = 13\n# s_len changed to 0\nmsg = 313233343030\nresult = invalid\nsig = 4e28f546283f9ac74cc99c6bca79bc208e47220cfb0717aabc521ac55119ec6bbcac880bed0007c04eef92a24b091d9a09ee5d3b5be790abdb2c98a07313d505fc876adcbb1089026940e03dfc10fb46a0c2a764ebe86e51ecc2ab489f56daf38764fc0a36a9cb4529367c9880bfd7631c340fb7fbac0edd2e1def00d65bd52e597e2eba1be1e41bd89a00f5c66fbc18b93e9cc1b5be962780f6d7a9c6d375a28556114f37a8a3606dcd68c8128bf7a7e5f1205778bcf3048bd4f7c10cbdb4ae759954c4e4db0a9fe4df270c41bb86885dbdd8cb7e72a33322238a2d29615a2f01e9fc59c230c2cce58ad096c2de5071e020f76c8c39874f1de677dd5d2f96ab4dc145098d25b740b5279f05713daff54ba695f950039882059cfc2f86c35a0501b8d0914aa59a806e8d1403fb2eef163ba1d6e3d1e18dc99c622f8c2d360bfab2c9e8fd9d74a027e466fbcf4fa56777ee0fea7e04ae1901e65b5361f97146d7f4a550adf77539fabb7135967dc16f8ca99e8283dd69627cf27cb9d2df20bbbb\n\n# tcId = 14\n# s_len changed to 20\nmsg = 313233343030\nresult = invalid\nsig = 78d3509284dc06b54583e11ddf2507d9e50bdbf079fc319d107bc2527c1b742f4c759320fa22435d74e94253feb4a379128e7f33c5f3462fbfb92ff40c10b23f8bdc5890114757364207768014380fc16ebeaf22a7b1a9366f3fbbbb912347f1ef595d742a976b69377533e7b61d3237c3693cf43b34f92773497b8df7ac0660f67439aaa66fe179b34d9dd4d013e8fab958fbe2a27ce84b6d1c3c2998a50d41b6b38000191673c23792db2fe47e4ddd3b5396c65dc44812e55298b8b50b5a2a01d508b9d215986113b099717c3a4ee930f479308c20c26630aa5419c2589c8cbbafa7eaebd71fca9e751793629d767be8709fef9177d6631a48731f5e59fc7e98cd466375e8775ba935f12b45575819ecef4d78d85b6e984d90d41c93bb03c832fe415fb567a1d951f7dbdf407beef8caa3a741ca7c7729c8d8ba98896dbe52d9785feb49332e646771e7d84b75476aafa0a54512806339cb54ec1c70943beb508966741eba4d39c2fe535aa82a9cb92eec99d38540efa3e39fbc02d757ad74\n\n# tcId = 15\n# salt is all 0\nmsg = 313233343030\nresult = valid\nsig = 042bea79b22418311d75e86d0c05a9ab4905e59b3e0b12fa0b1e372bbf66690e1c23145b23b92735f2214ac1eac2cc4045e299f40f7e418c91ff328e68bf17466eb3e28de3139ec23b57ce5aafbc1e0e1521a292935a35c6d6189a42a81c573f8be9a0cf80b34457392faf031b632544fdd50285a7fa82a4ae6150b60dd9a32cfd131b246d6c89fc92e9a1df96857a6b56fd9c897aa4c8b4ee8e10dcd0ee80334d2261f02930a3a54a3477c8e155731878637256f70853484930d180a37c0b604aaaf649ce93f886a5f9aaf86e529286bf1ab5c8e189d44a28814d5e1c7e5c376d8e80ece5686d6ebab90a51773be4a919b22bde123ceed06c76d2c1af878540b5ec81ce067959ea8333e2340a9f9d7f2b22e1052e7478382ca937cbdad62a6d8fa409170ef2a03299126965d558978cad7d399a683d19b76bc598b94f6c94c33c6bb1652d44508c777de0da7b651e7c938e802bac8355d3503029cd1725e2dd70a90627df66c04989e541a56dc7df6a6a24175d921ecdcfdcd0e8b454de4a6e\n\n# tcId = 16\n# salt is all 1\nmsg = 313233343030\nresult = valid\nsig = 1d8bfdc0ddfb312f4b902bd241cb5750f80312688daf5e29ec6fb8cb085fc2978b25f101483e99d6c3a04e7a66e800257ecde1ef18c7ba17eeecd94d89245d15a6690be9d61faa9c94cefd06a24ad229f521688af44a2b26f726268607a3e4c63228261ac1bdfe714ff0414d6029772e53243770d735dbe211df1ce96056431405c2c612ce307957c5e7a7616bfe877148650de4ef0b4cb342aabc9315beab5e33f53986efa2b49de12b7dd1ae3676ba09a2aeec8c39c65dd44ce408a8c87d91e2225ee776cc1d924f354ba2e91c0d52b55fff4ccca2cf6ee76ee6b9588ba8f2d1610a7c7ec520602b37e206095e658fa144393de3fa47d048a017ed93ab89f835b63f8232c3f31eaeabe76a056c53d87f2349198c73cdbe9bc89085f610cbbe5f5ba65a0190d7339f2c26a7e3913aa98aca138bd87e6178c169d8a120eb5e74c51bf5040214efdccf7f9fc61624079081f9faf9c70b294bce55895eef3627cfec1cbd488940f7dc5f34b386fac86a569760bd490e856d364912ea354d4abd97\n\n# tcId = 17\n# byte 0 in zero padding modified\nmsg = 313233343030\nresult = invalid\nsig = b01d88bdc0b6086a22c3ddd9b04a4e4a95c3b2550dc7e6c06e7a36ab17ecabfc5606a06f7ae7a0fe4723743e403112c7fc08800ecb687a64de4be5ea2482600f",
     "beb01b46fc799b4206bacffa8c38d27c99cadaa0af333a8002829398d1996d1e8f64688670e30f14e96d9977056f310ffaa9d10b83d1c0eec4d3d73f64adaa343fb8b206aeeb2990342013ff42c7242dcf30f1653488b4976dff36a79853cba1dd28c6447e626e14a92459366208b7cadc5442c1a0bf0d4d8be6e32d5306173112742a873e8c4db781cd362b4ef198f32c750b44effe3bcb0448426f090941ed4c151c9b75588ac0867a2f468dc2fa46f0be778a8d6f2ba01ff47534c6d71d62109dea6741c60142580a1f4e22b1761200f4f1599970e1c456496ff82525085c0a12eea8c412b929bb1873cd7dbb2ab35b9eef309d9f0617fd37fb3c56a5bc84d965098dd6b0c058908f9cbde6858f0d0734726c593f2bcec32236741e110acb9d536a7942f67f4c8a4b06478229bab09e8a3ec73930b75e82fd4ac8e466fa5b\n\n# tcId = 18\n# byte 7 in zero padding modified\nmsg = 313233343030\nresult = invalid\nsig = 52c636d91f3a8c269ea2be767293a325a7addd7b1026251d45c1e99d818f6f8b1d52306768d163b9d0de3600e18b8e6fc3d9e874ccfcef45e4011ebacf3500e712f36863e53cb01db1749798941d557428ac017d22be753eb401df9a96261126b017bceadb8a58e2d85bd51797e59cf9b34b9a42ad90ea441da58fd986e023d5f617498be1304552cb6f3b27a44a6dc9289a29f10ba879c82ccfbaf7468f65ffd1d9b1f44f60480a8743e4110a454d6b88f8f6870a32336510a0e967b352b5f73bd6a8f39ca6f40b65c016149ab7449452a59ec87dfaaef33fed36f1759dc4485b63ee302d302441502c61b1d8427843080d968341873b272991a0ecf9c19d6f37170ca7cdb8a3068acc8d6a7aa4e8a33ef463097a7978dfeea14018732672df9a124f7b3164f3ccc527a8c0d7a2d75abc03efce9adba296558fbb1110b4c6e7c8f7952f67bc558219d2a836c673467a4995140d9d7cc377adca9898f8ace6446feb50e5b744f76a7f75f103b654096fd2902fd863452ab4bc0f89c457bf1aba\n\n# tcId = 19\n# all bytes in zero padding modified\nmsg = 313233343030\nresult = invalid\nsig = bcf0f11694a2a707898454a81625b83e3fe9a96155efad7cacd049c348c23eb728fcb3eaf395015657059129328f19f6e44f050d10783adfa384f20c25ac545c38771a0c46c9724a000868043d60cb9c688595c134022a0b6e99d594581f94638d24cff674a1f2ebc77c0d13a8dbd61848bb0595c6e201608f00c75c5cec3d3091bdaaf5d9c7cc60337591edf4850e7b782d45292baa165d99a811d79fbdd75d8389a270507d3eb26d5c240ef00869d910883ccb5436b36907a82e4058b5a2c6a27e092ef4cdcd5c98bb410bf229d8fe9520559e8167c0b1fd3b94632209bfe0332892f879f25afbba6fb67cb1dfc225746df618ada74a2c085bdbaec3b4f6d675504af6221ddd35db01829df1fd386236df6ee476a3660178a7408dff69a86feb522cbedf7ff866d5878bcaf19e82f09bfe2e6d33b4fb70e1467caceeeae4e5e0d8c81b0a7d3e17ec594c9be9c9ec51c23aae99c81fe919d942de167eee370c605564b8dbf1fee860c6e052a280c7190fda3c2f8c1f401e82c4dc1d67c73e78\n\n# tcId = 20\n# first byte of hash h modified\nmsg = 313233343030\nresult = invalid\nsig = 58384fb43afccf19cdd00c2006d5a6bdd12a5ac149ba6b21d5dbfca1b394624007fa5a729a8d4e308daacece63654606e9be32ae8184ce9aa237cdeb44ce1c961a4598192a609d1edce2b9a9b8944cff2c9bfeec9e2fe6c7887f04e1911d7fdc994cdcc5c1282bbb2a519d4e6433bf087790c8833fc63e9236463121ade094e082d72a456ef9eaf928b2d38a7274b23a5136118e82b897414bb6cd0177298aac6970f179403d152553fc2d7e13e40c3b4875e6bc3fda904582ee49817f39e3c79b8ef70105de88387484595059453f9f57b52f1e79f5226ea2f8168e2e48de1d0d544daad205f6c32a6865f66acd4b318834741553cb1bce7a7c06e4c33cf51eabcbbe44626f53f7a2729cefda59ecba55ffb4bccb746dbd7689e7f3c1f29a6f26180fdfb143b16d10e58c72d4f8abb3dc3d35cabebe7928b5d61d5c1c9bed922bd44badf9db2f0e29f54d950a9978b1408a2935c6ab9e2491bb0624a888d306692fcf71e4c93bfd38ce6590e022c8e5bef0a9b5a3152edcc61c7ab8bdeef219\n\n# tcId = 21\n# first byte of hash h modified\nmsg = 313233343030\nresult = invalid\nsig = 4e71b92c27a22e5003c8ff639720b5b809b34f1f2797135bb4ce06a7d1f6569c5cc4910d7cd0bbb15ec6d0cbeb5612eb9645eab205130e3cf04a0011f56728eb447d26dc77a4ecaba396ae84ff1481422d83e4418f4858cf6639b831105d0f8c428fa9dc69e380dcd77d8d30c362b1ca067bbaf124aaaa0b0ce4bbe9afa7f2787b6b8c476b6139960e1b436f8b13a1b85ffad382e316223261d7e7a5f2300cfc04e51957ea4a0a65d19596c3034239b8bf8f0bea6f0d6d749e2d3df8241e4622204c334cd748c4d0254fac93db64fbbaf79ecad12ad19c74d944970779a6401135a5a8cbb32b6334988df3424c3993c157620988aee3bf276eca44daaa5370265a6ddbcee5d207670c0d46d555027c1854ba9221bb86dcc4df2fa8e99833e362147c8d2c4598f467d0ffb8ceb18c9187511b4135ea068d9961bd07ee0fe56b7dabb222ac542746daa4a45cfd77f0213f7e5bcdbfebb5a4ad18d79a599d0755dbaaa19fd03f4bd8cf9c7c8416c14d23b0ca54de5f0492d2d9ced1c8b5cb79ccb5\n\n# tcId = 22\n# last byte of hash h modified\nmsg = 313233343030\nresult = invalid\nsig = 1a9f21db6f3fe415a344b61db76ebf60a84ff0df70ecb5cd14a16aafdbfbf895303d9eb831d7a9bed89ee3ca737f49643b077a824dc3f433c00ef1b693f82d30449fcd323a48c84cc5af375d7bfa2d3ad882480225fe4a6adf05c0341a7913ab931bd085134fe470003d3a612d88ff0da54af1bede6bfd58f19901de43ba61c72d5f96302b6428bf03847d54ec1d74921787ba1fedc480605fcb45b74d37dd0abb4067f97e28ccbb86bc0a1c05eeb6582984606be21574bbb7bc04edef528a8581eb135e971c6dbba21b1155e777da9f6c6ac182b4de0c9ebfbc59c71ee6688d9b054cf7772f596fc9f6e87bca4ee8df7d6267e29824b1a70840c69e1d162858ece7de3bf08072f5caaadd1b8c6617fa7888bd5e9d5367be064cc82ac4b59b240e0e7397060417e6386a623c96bc7f9bc1da4365e08c22cbdd2ef1a4a77dfef4bbb3e4cbeee7012c25ce52ceefa18bf5056583109030f91d92de8200f3b202efb9cf58d375df1dfee699586298b9eef0d1e99466bd47a0d128fb9089ec6c87e9\n\n# tcId = 23\n# last byte of hash h modified\nmsg = 313233343030\nresult = invalid\nsig = 70dab9aba45e87811d667c5e8324d1f0cc50071c306e6877acfb9a58e4b74798b193159021875e18dde242a51c3885cc51573a95eee4029f663222e0fefd68cd4fa71c6fca4ee8e2876e62bf8211e0986b4e1e7afb2c19ddd5e4e184a77cb11a045f77bd2622665732d1674111166924faf5b935eb2bf4ac8cd47b63ac0078c5ec05d4dedc91595c2b3f5c8dc399051ed0654401cae20128c3dab28e7668b05b4da624fbfab83e425031c8b8f4bb76b78e2e666eb854b0af342011a5e19bb252f90a94ef9c916a945e3e1fa926639425c2e2954533fdab1f6b944650249478792339d9b2f77b46b094c986720029e040c5c6b7c14b777fc9a164004a5b011b15ce6cab8d080f9a006546be010591c638d601d775637f2ed7ab94cc786b05e0ea7b0b0b4c7d1c730de93fec5380c1fa76501f7e3a8eeb26287b27fca17c30952893136a5c12c48163c9e7796154b0b2d6cc7a5d9491a9c777e6d38c60413c5dfe921962ebad11fc6771ee4f3cef2a2717a78bb6ae0895160818881798b58d0595\n\n# tcId = 24\n# all bytes of h replaced by 0\nmsg = 313233343030\nresult = invalid\nsig = 9f8d0b7fc6934a3eb7ec6feb90bc8ed2c457eeac964f0fa9ce8924218c5dd38ce85083e657bbd19ce6d6ddb5422315c067ea8307381c7275e9757f11f94723bed3a174728555dea45c8deb3265879d95f005d6bbfb4c75ecc7452a20b923f78d681a010a2c5d1519841383cfa8b299ab60db09905ae9914c7ccf1d1bcb578eede63da12ab0b16231dd40f3e756a3ee84716c64db348b1bc3fd49dce7bee98a16a1f6d9190d57b940a265a31f8298beb1a1f759be17724c5f911ca1d8bc9f2233eddb09fe51d2d36ed1976f0431f06b8ffa848105bf019d30d7d8d05303daebb56980d1a696f1dc9224164932dfd119e8db7b87e44e0dcfa1b76aa2dfba2beba02f14d1410dfdedd27832c03840ff86844b41b73781195c820aae42f756959775f6038f9615bd319f2788756afd3f37d384a775c4d6484ad3dddd7cb9a45e2b750d73f4f802e60efebcc235630ace45f2c50a2d6fbfc10b951e36c363640ea762ce6ed57649be8b49a45c987a66b86c2d590056f7d4a178e1563bb07ed8cbb8b0\n\n# tcId = 25\n# all bits of h replaced by 1s\nmsg = 313233343030\nresult = invalid\nsig = 312fe5046619324e6b32a385bccabb713d787ff7a7fc9527bf1b57627940365fc84cb858435f078322935d0384728dc77a56e6429adb6ab9c9e3b6a250363d3a529c7bead31fcc57590faec372f816148fc73c8e0eed5b6dc591a10ca6711eb121eea991afd5b8a820caa377071a04a11f3ea526d150ce9e6f7e51522fa7b86ea5e03a4a37c44cf77c35b4907febb1fbd6d6d9c9f117dc0c41b465dc2afbdd09b93237564a4814cb2831a095fe9862d1f607a31905d45d6946a3d5b6377d85b424b99fe36e1d0fc5c7e74bdc6588bba4af33b9742e5727b32c24b2937a3fae82df3734e86b79fe21d9810fef8d6be753fdfccbdf78d735c4223cc8e7781f111da2d83a63288995d9baf1868158ec3117042a4bc4125f7db1a2e95877fe1437701f31955a20fa05e687ca84b6a8a4dcbf34ef627528bdd22a3daeb69761c47b8799d1e24eccbaa0cfd3f5684d98c5c69a79942846c745bfab428eeadd4dc52cf3827c08547c7e8a8fb0dc149e8b043a49ebd2160e0372733d38000581e775d0c7\n\n# tcId = 26\n# all bits in hash h flipped\nmsg = 313233343030\nresult = invalid\nsig = 69d4190ab2eb0b4a59fe3692c6b99dd3ec7a8498f3b81dbbc4709b77ad49ae344a68acc33ec05176a5c1f572dca5ca962d51bab6381d0dd050f539fb5f6532a3c811d2cbde95b043d854c50f479ccafa3cd7ddce182558693c701df66747e537e29adb9c7e2ec3f345fa5010ff3f8ca5cf4de31139dc3f9ed93b4f7ee77bf9bd29757f330e259e6ddd5e40f86152f26c76cf7a778b7565287406e431c440812420bb1c9e36614b51745cd35ad18a018acaf3a8871e904988b66e2a09662f88810bf5bfc17dd7465abb77d2f625ca83ccf2e2f187b217c28cc0818f04e259ecd59c0ce07f6732eb18c72fbd007a1f070c554424185ba45e9eb1b10b0555f8d4678fd7f7e91c92de9f2a11c45be7dc1366ffc3ab71f263eb892ecef25353bec9ca6ab78668cb9b66a9d0cd68b4df0b2ee17940fc1c",
@@ -3301,9 +3272,9 @@
     "65ef4186ad1e7ea5b56fb689fada3f377e0897e5cf86906dd2d894848a6f3d64d96a5523fd74d2e8418809fcefe5b9bf12f5ae7189e2aad268e835b5a701073e26be131c9dac06203142d93c95af3d00acec603aae2a24bff3d5481c7e71be5f63a1c47eef680a00991008ca0047c7bef7812c9b823a64e6cb40d0fb4472b702bf4f1c9483f835812eb3f70808e3dec7ab2ce2d8cf1c0dede8521780513140f10d84727d4f14ae06f65276feba1857a7e879e9c4f59c80760b117e1c4083e342018da1c42adc6c5255404adaf8460d122d3c670aa29b58c087d118643eace86667e6bad6c07f078f9cdb8618b48e92\n\n# tcId = 37\n# last byte in em modified\nmsg = 313233343030\nresult = invalid\nsig = 872f410815926494669ff81dc7114e096f007790f6a4ae3a946b64984eb28bf28351616cc82ed34172f1d1d0a8918f87d64258328db63b72127fbd26320a21c114a7f0b6c88ef717d949f57a28e66244b1fbaaa942d3ab2245ac76f0cc4bafcc119a64f7d167e3e2a64dc9a004464b28bfdcac00a24ed7e3689ca1ed23480c1a0625601c4e7f1e374b54c1c1fbed91e0967b40a3920210b84619c23217c2a6a39734320607abee432c7ad2bb0a8b735400bf775256a61324d4c4ee743ffe99a7bcd13a27b0fa33c0dfbe0cf9663116997573a59204c62aa497e98a698b5dd19314de9ef95cb8bdad0e07b722eb6795f6ea8098b7b092f7bdf73aa459dd85843b310d71e0400470ac14db383940519c060d111f0b80896083b6fb305ee6d9d7879d177f7cfd85c913d226fd6c75f38519d7e8f6d32bce50e85901fe6bdfc74997862a3b809e5ed5793013cd19af9efca616a9ac3e346136142374f58ca823b6a6b2870bfec41207b0a8f58d72c119e319a3934cbd40451f0a1e26b447a5687b9a\n\n# tcId = 38\n# last byte in em modified\nmsg = 313233343030\nresult = invalid\nsig = 5e0a2f627d11c2f5c2a61cec6b9ab6ea6f2620085e52ab1d162365a2c7040178b3e6222503efdbc66eff0cb892be95abee6ae02af0a29436de4ecd2ff63eb7e082d51ab31d358309747ce61e30df4ab3382341b88eb2da84406ae20fb3bf9a968cf5ccc871be02f6cd9f2a89ffc6f3a69a589526e8a4f1a8c049286ffca8359e81cb3173a2d2e2cc76a4829edebdd3dbda327a92dd35202b597bdf077d7ac2924f8cfb29a85dc25dfd2ab6e770cc80120a7bd594e020392e58acca9d7356773e58aacfabd66c2d9a888379b73868d07e3d14af1dadc1843f2a6c8e14c93b3b29134169c5ae3b293ee6f6a475f20c7c159258a8cf1a1cede602afa9fe7c61a3218c34024a87bdf4a64ef12c78a11a50bc1521836bc4d84eba90ab1db1b17ef0e6e95d7c9de5d6b84e11dd5422a869ecc7f90f952794f6093df89fb664aae86669c63bd46de5972388d81908fe56c6bd029e393047c52924a97aa55c07d482f98b784e6d39cbc280330a34ac4a8a72733235e66234903a4505228a3fc8e1146034\n\n# tcId = 39\n# last byte in em modified\nmsg = 313233343030\nresult = invalid\nsig = 07f0772411cdb1e02802f8ca699bf55bebadd254c9aadc16e1d6d4af3e12670bfd2adc2dbe80195f065d75fa4a25ef757766fffa4d902b386a9c7f247206f60c744938f50d6f840170ae94c6792299c386a1d6d7aeb73fecd5b72a28249a2ad771a5518fb694f54924e15cecb2d755da44b54535dc6f8fce0e91ea160ea942c9e34eef5d7367c9065f5ac270ef11a35bcedf663183f74cd2d504410b97b4034a59d201333f235f59924aad30fa877a31e0c1573f62e7be41f961e9c31ec334153d83adb0ef38963f0f5e20c90b67ae5c5e2ef8520587587c22e869881abc6bfcecd62a1f878115e6cbca7259e8b9e116fdeed841f1d698e85f65c7ae07421cf3096f6b31a07e251944bd7e2cf50ccf69a18de7c17700b25786d29ed74fe8d5757d4dabe2d6fbffc2227448ee8d5559f992a3b635cd74a68c329f1785e743ce9d3bee57b997f9ae2deb531f8994ada98d9a3536b074814c2d5003d6a3d50a9e56287f3aee8ed87104c19656a6057515fe17bb2a72a53a7c19b7a814252c8bee61\n\n# tcId = 40\n# signature is 0\nmsg = 313233343030\nresult = invalid\nsig = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\n\n# tcId = 41\n# signature is 1\nmsg = 313233343030\nresult = invalid\nsig = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001\n\n# tcId = 42\n# signature is n-1\nmsg = 313233343030\nresult = invalid\nsig = c6fe23792566023c265287c5ac6f71541c0994d11d059ee6403986efa21c24b51bd91d8862f9df79a4e328e3e27c83df260b25a9b43420affc44b51e8d7525b6f29c372a405104732007527a62ed82fac73f4892a80e09682a41a58cd347017f3be7d801334f92d9321aafd53b51bffabfc752cfccae0b1ee03bdaff9e428cc1c117f1ac96b4fe23f8c23e6381186a66fd59289339ae55c4bcdadbff84abdaa532240d4e1d28b2d0481dadd3b246557ca8fe18092817730b39e6ee378ffcc85b19ffdc916a9b991a6b66d4a9c7bab5f5e7a3722101142e7a4108c15d573b15289e07e46eaea07b42c2abcba330e99554b4656165bb4c0db2b6393a07eca575c51a93c4e15bdb0f747909447e3efe34c67ca8954b530e56a20a1b6d84d45ed1bcd3aa58ec06f184ee5857aaa819e1cca9a26f4e28d6b977d33916db9896d252d1afa762e287cb0d384cc75bfe53f4e922d02dd0a481c042e2d306b4b3c189371e575b25e0005a164cf69dd0976e4d5be476806ea6be6084e71ab4f5ac5c1b1202\n\n# tcId = 43\n# signature is n\nmsg = 313233343030\nresult = invalid\nsig = c6fe23792566023c265287c5ac6f71541c0994d11d059ee6403986efa21c24b51bd91d8862f9df79a4e328e3e27c83df260b25a9b43420affc44b51e8d7525b6f29c372a405104732007527a62ed82fac73f4892a80e09682a41a58cd347017f3be7d801334f92d9321aafd53b51bffabfc752cfccae0b1ee03bdaff9e428cc1c117f1ac96b4fe23f8c23e6381186a66fd59289339ae55c4bcdadbff84abdaa532240d4e1d28b2d0481dadd3b246557ca8fe18092817730b39e6ee378ffcc85b19ffdc916a9b991a6b66d4a9c7bab5f5e7a3722101142e7a4108c15d573b15289e07e46eaea07b42c2abcba330e99554b4656165bb4c0db2b6393a07eca575c51a93c4e15bdb0f747909447e3efe34c67ca8954b530e56a20a1b6d84d45ed1bcd3aa58ec06f184ee5857aaa819e1cca9a26f4e28d6b977d33916db9896d252d1afa762e287cb0d384cc75bfe53f4e922d02dd0a481c042e2d306b4b3c189371e575b25e0005a164cf69dd0976e4d5be476806ea6be6084e71ab4f5ac5c1b1203\n\n# tcId = 44\n# prepending 0's to signature\nmsg = 313233343030\nresult = invalid\nsig = 00008f9ac1354af4161d0e55b5674821d02823b3a6b3f79cefb98cbc77f9ac2d91cc6345f989a7828132f73f3630a247a936b6a057b3e5a2fda0c5999ea7721ee8880960c24cd2377e869cca1799747142d57ad6a8d83ec9254d89f591add11a758e1ea1e29bd08f624d0e28cea52ed5eed7c0f5f49d3533eb1cdbb2af837dc42942f9a86b5f4e2d5ce506697ef067a344949bdd89afcc25978af4d50c300bcd0ffc9d93cc559e3ae1a13215a1d3f6030827340c6591061a5ab7e65153b1df8b25e1421f924d39c7e6f76243c1bb9ae4063d9a475cd2ece45f4e288fe0720074e87868d70a5584a9ac2b47a56417cc76f15154315545a3ed6704b365f15d34320804469c3b09ed211cbc9e9e767b6f21fa16f8641d8b78b8dff8062a25b5bd3b6a38cb4706c42c1fbbe66db1c05cb57531132eb94fe1569735c33ec491c318a686c837ac810be4afff605f92bb390e7ab3cd24c0cd997cf13f112e5aa01746f43902432639e1eefcbd37b413c586f057bcba40a8f1251251e84cb7c87c53c1d1d558\n\n# tcId = 45\n# appending 0's to signature\nmsg = 313233343030\nresult = invalid\nsig = 8f9ac1354af4161d0e55b5674821d02823b3a6b3f79cefb98cbc77f9ac2d91cc6345f989a7828132f73f3630a247a936b6a057b3e5a2fda0c5999ea7721ee8880960c24cd2377e869cca1799747142d57ad6a8d83ec9254d89f591add11a758e1ea1e29bd08f624d0e28cea52ed5eed7c0f5f49d3533eb1cdbb2af837dc42942f9a86b5f4e2d5ce506697ef067a344949bdd89afcc25978af4d50c300bcd0ffc9d93cc559e3ae1a13215a1d3f6030827340c6591061a5ab7e65153b1df8b25e1421f924d39c7e6f76243c1bb9ae4063d9a475cd2ece45f4e288fe0720074e87868d70a5584a9ac2b47a56417cc76f15154315545a3ed6704b365f15d34320804469c3b09ed211cbc9e9e767b6f21fa16f8641d8b78b8dff8062a25b5bd3b6a38cb4706c42c1fbbe66db1c05cb57531132eb94fe1569735c33ec491c318a686c837ac810be4afff605f92bb390e7ab3cd24c0cd997cf13f112e5aa01746f43902432639e1eefcbd37b413c586f057bcba40a8f1251251e84cb7c87c53c1d1d5580000\n\n# tcId = 46\n# truncated signature\nmsg = 313233343030\nresult = invalid\nsig = 8f",
     "9ac1354af4161d0e55b5674821d02823b3a6b3f79cefb98cbc77f9ac2d91cc6345f989a7828132f73f3630a247a936b6a057b3e5a2fda0c5999ea7721ee8880960c24cd2377e869cca1799747142d57ad6a8d83ec9254d89f591add11a758e1ea1e29bd08f624d0e28cea52ed5eed7c0f5f49d3533eb1cdbb2af837dc42942f9a86b5f4e2d5ce506697ef067a344949bdd89afcc25978af4d50c300bcd0ffc9d93cc559e3ae1a13215a1d3f6030827340c6591061a5ab7e65153b1df8b25e1421f924d39c7e6f76243c1bb9ae4063d9a475cd2ece45f4e288fe0720074e87868d70a5584a9ac2b47a56417cc76f15154315545a3ed6704b365f15d34320804469c3b09ed211cbc9e9e767b6f21fa16f8641d8b78b8dff8062a25b5bd3b6a38cb4706c42c1fbbe66db1c05cb57531132eb94fe1569735c33ec491c318a686c837ac810be4afff605f92bb390e7ab3cd24c0cd997cf13f112e5aa01746f43902432639e1eefcbd37b413c586f057bcba40a8f1251251e84cb7c87c53c1d1\n\n# tcId = 47\n# empty signature\nmsg = 313233343030\nresult = invalid\nsig = \n\n",
 };
-static const size_t kLen81 = 54342;
+static const size_t kLen79 = 54342;
 
-static const char *kData81[] = {
+static const char *kData79[] = {
     "# Imported from Wycheproof's rsa_pss_4096_sha256_mgf1_32_test.json.\n# This file is generated by convert_wycheproof.go. Do not edit by hand.\n#\n# Algorithm: RSASSA-PSS\n# Generator version: 0.4.12\n\n[e = 10001]\n[keyAsn = 3082020a0282020100956353ecb7561945dc5544e4602466078c93f28507701ffd39e2a9813c8ac8740e6ad61c955d484e513b3dcea527e001a018ee2c207c1806a96763280236cd3c820dff79837c9b709cb4b522d3ddbc9192242259c43be75ea244d37ccfa8a4c75024a2cf7cc76e842ea69cc7ca1227405b070047387a5068e4976e4b8ed5f9aadd7b4db024fbb8d7bd8a040d8f6610c1c6eb1d4b606dfd182235d0360880304d5a750603af0c424b8c8e6dbc12c3697d2d609c97547e774e2e362ea96d1690dc9432112c535258b3db2c4c32ad510d6c07ad0788357883869efb8b629298724847925cf42b34386be700f02903db5852276bee2370941f397bdc3905e30964a0b5e73602703340960c3ed6078263b611f197955fecce4b9a32e43cd1d2e5e87c4ceb65edc8853a7ee31d28e16e5adffb8ac7b760fbfc63d5f174f4d0936461dbb12c964a6b6d6cee752e5fca1ab4a9fd238dd3e8860a1d763d2019f9e7b99ed7666d4e038710f90e0093bc566987d6c0092f571376e705b342d066c54e6e2578927b92c1f0928de44e9a6e1f49b907c6aa4f605ec9c398d55df81c67373b03cc8110162fb417f96fd321048647dfcbb392455115cd912ea83351853e6a185284648842adcbd25e67174a3b93b8a64ce2ce9de0e8577b8b662ce32e2565782665dd38e5bb5fcc4fe12e4320dab7773b545a09c6d39d9dbad459f21f3e624ee6ed0203010001]\n[keyDer = 30820222300d06092a864886f70d01010105000382020f003082020a0282020100956353ecb7561945dc5544e4602466078c93f28507701ffd39e2a9813c8ac8740e6ad61c955d484e513b3dcea527e001a018ee2c207c1806a96763280236cd3c820dff79837c9b709cb4b522d3ddbc9192242259c43be75ea244d37ccfa8a4c75024a2cf7cc76e842ea69cc7ca1227405b070047387a5068e4976e4b8ed5f9aadd7b4db024fbb8d7bd8a040d8f6610c1c6eb1d4b606dfd182235d0360880304d5a750603af0c424b8c8e6dbc12c3697d2d609c97547e774e2e362ea96d1690dc9432112c535258b3db2c4c32ad510d6c07ad0788357883869efb8b629298724847925cf42b34386be700f02903db5852276bee2370941f397bdc3905e30964a0b5e73602703340960c3ed6078263b611f197955fecce4b9a32e43cd1d2e5e87c4ceb65edc8853a7ee31d28e16e5adffb8ac7b760fbfc63d5f174f4d0936461dbb12c964a6b6d6cee752e5fca1ab4a9fd238dd3e8860a1d763d2019f9e7b99ed7666d4e038710f90e0093bc566987d6c0092f571376e705b342d066c54e6e2578927b92c1f0928de44e9a6e1f49b907c6aa4f605ec9c398d55df81c67373b03cc8110162fb417f96fd321048647dfcbb392455115cd912ea83351853e6a185284648842adcbd25e67174a3b93b8a64ce2ce9de0e8577b8b662ce32e2565782665dd38e5bb5fcc4fe12e4320dab7773b545a09c6d39d9dbad459f21f3e624ee6ed0203010001]\n[keysize = 4096]\n[mgf = MGF1]\n[mgfSha = SHA-256]\n[n = 0956353ecb7561945dc5544e4602466078c93f28507701ffd39e2a9813c8ac8740e6ad61c955d484e513b3dcea527e001a018ee2c207c1806a96763280236cd3c820dff79837c9b709cb4b522d3ddbc9192242259c43be75ea244d37ccfa8a4c75024a2cf7cc76e842ea69cc7ca1227405b070047387a5068e4976e4b8ed5f9aadd7b4db024fbb8d7bd8a040d8f6610c1c6eb1d4b606dfd182235d0360880304d5a750603af0c424b8c8e6dbc12c3697d2d609c97547e774e2e362ea96d1690dc9432112c535258b3db2c4c32ad510d6c07ad0788357883869efb8b629298724847925cf42b34386be700f02903db5852276bee2370941f397bdc3905e30964a0b5e73602703340960c3ed6078263b611f197955fecce4b9a32e43cd1d2e5e87c4ceb65edc8853a7ee31d28e16e5adffb8ac7b760fbfc63d5f174f4d0936461dbb12c964a6b6d6cee752e5fca1ab4a9fd238dd3e8860a1d763d2019f9e7b99ed7666d4e038710f90e0093bc566987d6c0092f571376e705b342d066c54e6e2578927b92c1f0928de44e9a6e1f49b907c6aa4f605ec9c398d55df81c67373b03cc8110162fb417f96fd321048647dfcbb392455115cd912ea83351853e6a185284648842adcbd25e67174a3b93b8a64ce2ce9de0e8577b8b662ce32e2565782665dd38e5bb5fcc4fe12e4320dab7773b545a09c6d39d9dbad459f21f3e624ee6ed]\n[sLen = 32]\n[sha = SHA-256]\n\n# tcId = 1\nmsg = \nresult = valid\nsig = 492e60b828a9847501c7ff46a4a304ee7bf61ae87dd88cd5598c76289a70ab3afb7fa9efa3228a1e826241c13c2e120d22cd3a38a9b9ec5826a9711bdb119748e0f7080ccf917e8cb53f6f21ed19f4ffad9efd94c66e329226a811eef928816b5edb3b10d1f483b64bcad9b055dc78e99491560f59a598001e76a0bff0ddad4ebfd565495e2b523b02dc80050b64db4a200b5ca9efd8a1339d6cdff6a82dcbf769d3b0ed7ae53ea8f1788eb025e186a5eac02e3e1fb1f0aeec29b2929c7a718c32159609f973109d4a876bcecdeee6c6418df27fa46eb5cd238e274f94ab571c968b2c4a838cd812aa90e4657b95c0ccd68d60bd7d33b6e291a6a13f68e046cd41ecfc2bbe35fa9b4a0c17d89a708f89f975bf5a5eb9abc812b0c498d93d2d161f5c7969afbcf798029f3c14efc3f7c265b93fda572d265e9e116ffa9416e111aad32072f61943e9f0754f6e116ab5119ed09bbe245022b6e8bfe35dcee4a53ed375f5451c43f38f6eb55b48e386030cfb76c408c81f606886c81aacc76a999735682413069cc016f6e390ea2df7e8e74d088fb0643aebf4899ee8177a4a5faea3889181612ffdffcdb3fc699d578eba383e23e1beb68824c0bc7f920afbbea8ce7bf2b7c3bb40f33c6b7c8fb6cf73e6e2f3679669f235ddfebeeafa872918581d99c84d6dc37ff85949449d3994982d332cb9f9b8aca691651c4b63e58f6b38\n\n# tcId = 2\nmsg = 0000000000000000000000000000000000000000\nresult = valid\nsig = 3731df2cf46de010d06775044db5ad8c98fcb8bf2be357fd39af55a864395bd24fe7cf104374159cfff1b537bb26ecd67a0488ba7a124d8273ee0b3cee00bf94c5d34900c4ccd6e200cac6e90d97d8b4197ea78ad36be7a4fea6e1b43b1ed954c737bd6ec6960945f24308b085e255c1142c61af876995bb5736ae19ca0e1cd9b319634ff7103a4dc89eaa41c00cd173236c275c463a1cbb67f65e45b1bcc4e10c7f3456911e4f9ac4cee8b43651980dc2e8c332e5452e35f256463b96bb21799e22f4349846e8a2583763226b3278134b9313757163ce6ce0628376001fca63c535d384a6aa7cfecc29ebbb5cf6be9d2b211464e02a09c089fa63cdd9571f3fc559bd2b92b7a5a724d3b88fb4e42079add87ae188a983c11fb769d3ce65fc5aa27dc17b6914283971278a749101e38d3b92ed2817ce2b37d4dbdec14f44f2b015433cd6e5a5de6d803e95b8b8196bcc4a77ff6a8419f5c78b4dcfdae0f9f98e8ab792cdc18645a14604a604a417abcee8051aff0eab887f235b1c6143327a0db2e00a63e4c6b8e002f21c86163de68e49c766fa91ad956c12d36856cf58324d417b4898aaa6db3eac372f06ef21d7a7e86b540972dd4e3f7afae7caec8a692f31386e7b3e8b934499a945cdf556eae3010cb1ece6a08d0dea9500157e78117d0f4cdff096fba973f7c04f79bf42a54e4a82e5456f065bbe9382605c444d21cf\n\n# tcId = 3\nmsg = 54657374\nresult = valid\nsig = 2b981b661e1e244b67e1892bdab545edc9ef68b50b4572a536dd4a40f31195648b8180454faa8765ba19b7ac6a59176c1a2c621e6f4131af96beb4ea47252d7617b9d8b432b5cd900f7b328b0013364a520ce46ae66a63b7181ab60b514839ec8f6bb63ec2f83a2a142d8ce532f63ebdd3f29ce26797f46f68481818ff1e00c47df1e7e8d809737307a63902c94d9c2ee5c69f1fa0602eeedab4d7f6d0032de1a8294c117ad2aa34f1175544f2bc1d466c5965ae5796bae216cee8bf7b91f9746a97749cce0388f8f443d14317e825cba2ea278045826835dfab50091cc988fc12d4913920cd625ac321df4d89175ba3f49f89d372318bc222643ab888246f8e5ad64f227be043bec3828cea0bc0229be6e71a035dca97bfe0c2f34ce03c1ee9d084d19a6d6c301168129a6589cee1119cee84e35b561d1f658b2e4f16c2b4ac2ded8ed5757ebec2d5ed59c66f7bd932d64c58af7fc16af4d3f6bc42897114c9ec537f8b7ea86752a2a26133a7b8085f4d438ba643f7a389a1c6811c2ee4eda48060d27e6299b44c8d504d280ca56ca49c246b5c4c897d3e1d352e047f735cb7e30ce87061ef267bd9c50e7de77032a162ac9a026e684bb4d0e8131a90240494418fbe471c9900a6b322306e47915f83cdd8e525566e8a71dfc869ee5c7e74d33ac8646d7c170ff82f2f3e5d319dc61cad06235145c031d03cd420fc370adb3e\n\n# tcId = 4\nmsg = 313233343030\nresult = valid\nsig = 75fbc044fe19c72f459b5a1fc4793f7893ffcc95bab8609900b3c3d3be6643a42987c167e7feb63ec2a57f961c1b9c35b11b34044e065d7d3df0b49496dd80f7cd1eb2e8c0d0b726f37e701ba62a3003a17657af55adcb0b6e86f95198ed435207663d616d516bf7222db241094849fb232bf6fbeeed7b5879a6b6c8aebc57646117220bf55403d0ff078e219ff119bd2e52e767b708b91afe30e9be348766e7537e1128087b4c9aca0281415e550965a395ab20d423330939b4e37551a7735c6df2b0395dd032266ec7dd4afaa3c477c64e3f95ee4945960b7a0c43b7a9622448eba4149e30ccaa0c234be7b06f4ebe8ef43063c62282e0643c6e483feb1942e3310bad0c05bb2f87674825fed098d5c787b69c5ba6a1f716dfa62ede3b8a01c076598b15ffa2e2be82fd1d8025f8ded14cd8fc8753ef76419e1dd561bc0310b2c7845e2744c9621735758645af0252315b6a05894c264c4587c8870e02e94813fc3a797d590a9645d92845b614b0d89cfffc0b80c5b48186ae350d877f0bc06e561770736342f00d56b2ae785891afe39cc0412337e4f5d29ff06d727f6fee8f0966d52ac146ba82a753751ad786c9d70ccd3005b11fc4f6b81517433a052c2351390332bf7fcb4326a19930b512631317c0354a81ec7c529ccd1bb2ef206d697999950a539808958d6c2be64220123f12e7aad168be35de70103090937f44\n\n# tcId = 5\nmsg = 4d657373616765\nresult = valid\nsig = 66381e10ca91edb043adc721883b8c005eaac4daf040379f4d69a2bd7ded69cc6e85d80a6f3ce8aad523a5d185cbb2fcebece5210feb0318065ced244ff73830cbc628d79572f7f0961c111883b9c40336d110cdd4dc4b9a04ae4a0380e8b17f0667b71b2c5bdd1c9b48c4e83694820d4cf4200051bf3101559625c0d06fd0996b759e9f4c689610e41655b262957457a4d8341c65bd89dd438025699dda37aa2d051c",
     "d3c974103aafb092e865b1397661be3eee3f95d7a75d9a2ebd74e6d2cfa54ff0d8753130eca1555eac4bea45e90a6a37d7d057ccde4c32e43c7499d5c38754ce950308fcff69d42aa4a4fa85e6d92bd20d605823e198e94af5ad65ca4c2fb919391f919aa5fe048ff51a506f63063cc5f777fa70b20cf759a0b812b2527265fc7f32a40cc275ef94ebb4a0410280ad658e67c34d581b5e7a17c5629be34ceb70ca68f40aedaa3c9b7dbcf34f30f12789909a3540512044bd812760c3f76dbc644b89760b54d9e090dd9cbab935597c55fdc6793f8ef007f732732e3d1fcc3e3ed253689aa29acfcf85847acb74a722533b0b5debfbcd0b5388f6b19e8b9ac47753f8a616ed9a7e4163ce8669437c62271bad3497edf3b655e4d1523cd8f3448c5d07c48dcfaf1e1f8310baf3d3707ea23288911fdf91d7379738ba8fee9ce525ca0b9c4c03bf1bbcd7d1369c0d2f5e0127ce2d1f95322c94d4c309f2e8\n\n# tcId = 6\nmsg = 61\nresult = valid\nsig = 134d55894c80eefab7744abbc9fc5cbc087072da8243236fda9df5ddedd81d23f0998061ceec59d1bd4fa2f404547056f9616f77843330bc65a2d2386574ec9198b2abcadee4139074c3208e2f09eec1e527e26b78b8773121f852bb8480e22b34c0e1cafe9bb224ce6243c46c03cfbd0fdaf28041dba177ced1a2ad70ca2f1e7dddd6cd137732f4a774e47eb59d8225d4c6a507f8f273b600a5b6449d63924b3a0cefe987cb5998dffef835dfe3a675442c90d02067c9b3ff0e3f1d84ce8801bf366e040710ad2c08c9f379bd07797ed954d3e15ef1350ffef88e9bce7174466358effd2494d7e174ae88b04e17c5ffa7b63bb6cf194d007b3ac22113fe3a1dc0c97d3853aa67c892d7d6bc5b0be6681e18004640416587452c856644ae6c07d135afae80fb80132c1faf56c5b224923cef5abe9969b807023fb84146a62e19bb6d8e5af0475e07f48b469ba3178c99741af6e57aefcb766ead4ea6cb3d172532704818fd82e12132b6329dbdc62e4c9da1fee2cb19e4f60ebfebc681a5b892afb812e82029123a7414f56f57e09731fe107f682f10a5c31fdec1d60118cc3646b0284e1948b2bd37c280135ab587960fd0769629860d17c4349271267a89c26c5f5debfdf40d843428af1010f87ab73648ac1c698898717889c38be7a06b7dfe9f63a9c7a19a77d61e3235ceaccad99cce004d6a870b27cd13414383ef4aff\n\n# tcId = 7\nmsg = e0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff\nresult = valid\nsig = 7a7848548b15bf23e4dc1908e5b3aa8989936c498e77d587e64ebc9b335ce6f400a3965c027c6c248afcda5c80efe8d1f1bd9e71a5c459aa428a4ae1d1cef91ae48788f361dd440fb3cf745c9935664e43b81e9f860985418b61c3afe63b85cbd07e7dd3601c8ef8b7467694e3221ba4ace737c3134a8bd7f7ecd84d1382a93e5c9a6b69c9a8f12cbd612e48e5145972a1ad4f92cb0a57f44e0fde4548d231a5ee0efa8698154c66ddfd8fdbdd41d1476bb5d8852663e4b7891755ef9fa7b5d508b190d59270d32a0a7f32b1a28570a7e52592324fc461a32bde7e2cd14b04129a400274e4183cbe44aa4bea3b4680061b119a97da65c6ed4bff5f2f59193ccdfa8d021816a2b5d32ac52414d1c51f8c198f4c03e0993f8e47c268598d665c2b624cb66ff02219a9100adb3ca9674ca1b63d77d6156307efe953a489529a1701ceac83ef1134e7cc7aaa578fa4909e9c4c0220a5c882433dd3f0af1d87bede7ad979ecc9999cccaec3c4d39265efad3c39809ad3f24fed3982dc74c57ff8cf1578d940f9c6d351aff9cdaa2481d0f355054389ab2a6edb6b5455677d828453cd6aa21000adda95644125cdc6b4a4f95cb69a1abd23b46603485e696dc419cbeba767b2fa7081e1641c4b2daa44f5fb2b9a6513dd12d6f12f0f1cf7da5a74223da8dc390468e46af16583faacb7fc0ef4c095c641af4d76be03e880d4f4e2c8a3\n\n# tcId = 8\n# first byte of m_hash modified\nmsg = 313233343030\nresult = invalid\nsig = 5629382f987048f03b158dfc15ba27891417674868a94a11b82b82fc412338086390517bc55e280e0c5b6a152c5e44eb25f9c014bf66514aea4f71f467e612b9242186276694fec3b754f30486eec2b67a81b3dd61c70e87fce5b12a75d5acb30ff35e4d94601deeabf2d5cd26d30dd9ffd4106a7247c9149fd440d2af4422b190dff1e891f842c3f5f688f10d07bc127f94c26ae506c38576a9ef93de3a9d47db28c0dc46d0e4d52093039dfbeaa7079d87623788d00c119749c9500bdfc7d980f7bb233c040990dde0800e19d428a3c239e2ebdaafd6f174212ad17a036d2ff31349e8964d5594802b924a33dab69d3d9ccb97edbbe4063bc1dfee3e9986716e2495743bbd4bcf814a45df69b18c46a40659aa6cc61522ca5e395f292e41836dbc66d15a803347b1cc098a7900ff319068acb326bd5bbdb865ca4f391c6554dc9b51ce52510531db7a70d0624869a2d2323eaa54e3b4c49becae203849108c00d6742a144b9ddd7a45132a2dc2b42ef495775c3cc9fe9312345b3f1fad6c13e0e7ba92fe8fd67924cd433739ad524561b7538863aeb16e139779036d32036487ab22e029649b89ebfb264ffde09c38a35258beb29ce46d8bd873614a1ee8e2b7d133da2a18ba14e2a72a9f83bef8332e6243f32dc25582d19fca6d88c1afa4f23837479832fc9834496bda34fefed066280e3fb73cddef8c72c5757e3417f5\n\n# tcId = 9\n# first byte of m_hash modified\nmsg = 313233343030\nresult = invalid\nsig = 93cac00d29dcd13c59c08c017fb4d1a1fdbfdc110dd2e87386ce2357cb8623fd167c679707e89185005b185dba5458363d38435c9c49c4a1482a757c67e79c88bd715b601f10b0499423c77803180521f99fe2444d977f27e86f557612e9daced3ebe6e142ecf3ad74c32c395c3fb925493b8440aa6b3183b6283c56fa1625cfffe1b96b1f1f2a906c95e02195dde9cab260db36c31b9f5ac137c575272016d6fa33be2f0434b9462801748695a9256e4069a64104684ba9e098310ba4dc3cc2441fd8f250ca080c7d91ec08eccff15bbf7b4583fbd35d8535befce82a656a6c70a0583d30423712d557f8a1e9560977858a1e4acf0c196c2d92fcd4e9d51e9b811c38477b90928e8af3bb19bf5359003f7acbc1de019ed7b38400acd10eb766cdb3118cc374de28ec2408cf43618b970657cb3307f6081461d90bf9555ffc1df6bdc26a98d54f5bc212ae51db675e2775e997bea806139a7f4d32c75eefca768cd1eb707ac75942b4bc8faaa640555abde6907d34666b4e756bb1d7755f6af157579b82801ca06f56d2153f12000dda261661a2e1b7a1704906d629e116fd3cf1a779a7900144a75b400cd56b43f9676f54b92fd472673af88d249bc34b7b696f55eb08bfc653c428738ec08631480d0caa2eefaa865f85f14f6e61ac0078473e558fd826182bd0a3ce77dd54de5a9d78e3e4d3d46c136b2664bdb2e70d3a21\n\n# tcId = 10\n# last byte of m_hash modified\nmsg = 313233343030\nresult = invalid\nsig = 1590f61a82e0a6f331352230a995032ada91580ee31af5c1683b3efff9ee2c48ad5c36a0a2c65bbf5c7d579685faace7dcbe706fe82003124b94a05a27558ea8983eab69fb226f8605450bf13dc0c8dae90f8abaabcaac27fa8ccc2e06cd37cb1543c138ab80b45d715b6c504cf1a7b82554110de9bb52c7054af4eff289d00c9d56b4a6c933bd6f3c4290ffe4255aad546e5e4e71e5d5b6d882bcac33831ea6069fc2e350fe3776952a5832116c971356af3f1618aec1c466fe50ef64ee9e936acbcbb61552be9d6e1362022186249f4e6ebd8c3169e11b599f6645b11b30150155b0bb03f3b2a4dc585f504b0fa3149210435d2fb9fdac4638661725211908ae1c0540688b71b70100fd12584b19ed054d25aaa1df407f27b9d338ee5b9fa7274a29d580d0acb81c1ea182b957c22139bda8a1c7fca529a6df2089b0c3d0f03d3d1799bc186b07aa22b7bc06f69a80e423e86a239afc819232851c1a18337882835144c8b3f01e632ebc22db346304d794ee1a76dadb5a6f5193bba3b982c5bbbb7585dd7e181633dd92fe01a0994ec08d1054eefb474f45561449be7dbdae57fb1490e533014c0438f57cdcc582034a94c07cc6490794ab2164013b5f2ad5920326e83d9b3c216d3d3d2aab60b177c65b8af1db955456c992e0009eb9270a4cefc04209ac032314142e1c55b518a7b439cfab324fc9962a2c916c14cee7dc\n\n# tcId = 11\n# last byte of m_hash modified\nmsg = 313233343030\nresult = invalid\nsig = 70c6a2593c3ce4bb4cbfbc51b41570fb966d50bb48f8e9e6cd294e99bf3f60271c71965277d8f85e280a012c5cea3f3abf9370d983728bff790d93d00813012d286fe4bd7c36274ddc47b8ad6277712f43469811b7dfd77f65839952b5edecbdaaf590be732e45253e09cd98236b16d2157ec762e7c294dccfc4db19566b1f365e91f1169329a1c04e42a3f60c0b2705fbf01dcc933e991702f3c0ff52280014f6b8aab35468619cbdb554a0c6840f4cbfee9a9381c7157efe29f9ff6c7cf32118326e6754012c1d612a8e3fc65295c48d5366a2d649eaf3544fc6b8f43f637540832c5c56e0e7a56dbcd76e32ae7efb41fdc172b01bfb389e5c5df488813a1034dc5cdab30890599cde5b0da830ec2504ebc708e1a96a8571aaec42045d701b080c193472a80886f3a68b2ab330fcac623ea99c3eefb01af168626857d6c458c0293d5d6c76e87cb7a91c3bf62901a0055634ac21688425d1601635ce0f372963e9065195e523d6657c1a10eda3a90e21817150751c7ea1682199e329e8d60b6129109378f45dca594b97d29364d1e5c9c335c7018b1eef7a65fa2741d5e6bf161376a47b0e670ac4f2edd43ad1b05e0d847c74aeda0affe496a2f554d8061242aa705c713ad2166bf81f71c03703e1d43af05455c53a5adae6714302b249b2a8fffe2f04ca1f5e39bb22afa94cf9429fe99f5359231bd93c5ed008beadcfe4\n\n# tcId = 12\n# all bits in m_hash flipped\nmsg = 313233343030\nresult = invalid\nsig = 3ed784b228ca4c6d8600fe7f18db69099881d3ac4ce0577d4e46e10adb3004f213796e9af8cd78ef116f373cd1a070569b49a4ab55f82259410269db674ea4993e7ec3ef834ce32318856142921ef33ba4bb6319ff6118dce780cac66d7a8315c12a92437f446c851c657dcc5b978d454250d3fe9513f787a9e5fe9765be6a92d2a970fab69933e56b692e2c579259105dfe3f0c54da11c21ae0f965c7f8bd15b3695171a2b838cea7085309118dba06cbf83856fcb927569760e341bc5c9dc7da5906b03f74c426b782c418f1ee50f614982f5188bf86894e30770a0b8fc7b02fca221abfbe64356e9bbcc0eb47c5700ed86474006d308ac4c1709b88774b101dfbe0d203c91edd140532878a186e6f972bd70fc7d0527b3a4337c9a715ef7f9256a1e5a06df5aa4fa6be6416143cebeb2d2bd039727325d8aab9b4fef2a31465bf8fac21d27df08db6ae22281a0615d252ce3eb8e539687ef125da304b6bbfe2518b57c95c1d81bf5574880874a49d46cd9a7fd535d9e7d04951b4c2e03ae15",
     "fc562016fd6f7b08ea5b427a78a2d8770ad98df16b94ac918edd0c4753055ba14f7d1b253bdc37f5df236d70b0e83b4bdaec9bd29c558dd708fed46daa5d4e3312c08523a0066369fefc7a2ac70ceab29a3b56928317127a558aaaded7bd6855660ea87d4defcc175255894bc9d94d5b420a24d06c4817bfc4ae92ae5ba4ce2\n\n# tcId = 13\n# s_len changed to 0\nmsg = 313233343030\nresult = invalid\nsig = 924769b488c2f25bc1d2d2ac9b2934bf4a00122bc9e635e8b2dc3f5550579fd7fd9e072bd8dfeb7e8917045c7b2537b96f8fff9961115a8f8e866b35cc1444633877208bfd1410e1ac91fe62484adf7e8c0eb5885859c0757590e34f095f388320ce455e4df56cfedc7b15fb5c9d95e696207cbddfab63a71eeb9ebd4aba5c214267a6af1524716821a5a2693702e103c3f9b487235a3fd3ed9debcfa51b5c796fe2916746146c07147370ed15424fff4b07ec133a92037783626a0a48d2a3a440a611712ecc7f28d4ab146d898382a2b25df98e27e15e168ffd725c57077e86e2e88cc015217fe2ede8978e4d85acfb66cbd2fbd36936b0292fe63650ea2280f86a9d3ca427a77f4f9db69f117a0e41ff86e98caf36072322201c928c125c2f4a19358c62ef47df4a796d67d2feb9879e3a195895042a5a8028bf9e013f8b142363a1a192a2e3bc96847a515322de750fe346ef150a14e1adc7cbb6d480bc42dd06a8495c4e6ed4ea6441ad719f2edd6696da0530f54868715bb25e17d492b174b77a992e2fd997bee727a63e8cbaec87de36bb700eb4208e174e2ed437930990fc7f5e58e59706402565e52e9f207b4546514dcfd84d74348ee93e90e9bb0f4f288fca98d526ae8876779112236a5446cbaa615d8f6e45dc5c351ff45fcaa7f9e6891f09a620b2b12489d6ee3043c86c35b0992a086a271d78a37fa5ed6322\n\n# tcId = 14\n# s_len changed to 20\nmsg = 313233343030\nresult = invalid\nsig = 1db0c28280679c7279d9f4ca1b3ad582da63a80e18ab2baaec5194aa6c2435cc5f7c3ad16e9b3e8eae8a9e33a7dceef69588aa5b0b16c184ff54b60c41c687b77d849eb36295a7aa3590e30f21f2768eeab26f13135ad5353c889540906da7021ad10751876587888c25247584dd4c7e35de68d6900676872d7aa84dca74cd41390c01eadc982359766fa6cff61bd424baa7cd46fdc40a17a97df468bc200849ed315f4f53d6f24a0af0a1b51112eeeee438f48ebab9c396f4b6a0dfe6e23beac92cda74d5a762bf7591da988341a796ad7e6cd72ffb6df68b081db763a48eacfbfca7132f27979af705089cafcb774e592f92ee06fef8c9f6635480a0f84c89c2ca4a131937a93307ea76326f2c1627989c0dd0eee1b34371d78ab794543124ccc2269f67152f409532e9c1d1231d79e5d6bcfe9a153223038a1fc2df9e5c50739edfcb6e7157e0d885105b11be6e5a55a950cf48e827961c00b556c3f52554ddc9ee9b1a0e3534b724de96b1009af28a3b2d2e4359e674b76ff7bf79d9d6e52db23471c9a3d430b05e85edb469dfe566441e5bd565621006e1d1605b8fc45b2570cb06779b28283834708485438b41b478216ecb9db8ec64158159bfdf84361bb1a2839a6733db28d46f99e2bcb704b55f25cab22c7436474c68fd259e86800ed657b4a2624a1a5de45dcac39c5c2d04f08792b9a5013bff0b6da1c1c288b5\n\n# tcId = 15\n# salt is all 0\nmsg = 313233343030\nresult = valid\nsig = 64a883f439b07c8b21b4150c73cdf50f72f6ca2ef90da34bbffe5c92d37821f7e6a7a1d36904ab5d9133cb82527a72759bfa44c8923c18551129e6a6e3851fb2d4641c62e43f7c7e4c740d414dfcabeb37d40a5ce73a77810a38bdaeb134e5049b29c1486ec401f5e01aab83568cccdf7fe4825d3f56a05875177ebbfb792e5cb2aae418fde5b1e0f63a3e83d45ccc1f8549ef6de0fdcda92de90236560a514dfc520920de4f57325750e52acbd3b0bcd02ecce288e2bcd5058d40c647d9fc9e55276948f19d7d67608e444b632ea1661df452cdf3ab9fe6270db4dea4013d38c857d26685fe31ebcc3a339aecf247bd2b1d7805ceaa22a021523da3522b58cd4f1933c117bc289f20e0aea55bf92e19e824681b2a9b93c9680da90204bb69887cdd774c213368608bbd9d3fd2f567ecad17b49f15a4d55564008f1c27d4526568e34fa231ec5c5ea0023be8730b0e6eda39b4bb96069dff483c8cf303647ff17420a3d022a304be72ec108924a4c84579b38c810988551a76043cd9aa54f763077e4d2a4473b3da44ba857786c6217fd200ad7c0bd5609ad6d6c85ef5fc04a0af27e2489f367ea7f612ab825a73a1fb7b4cd9a7d45bf4cd0a72c9bc54ac81193645b14e39cd46181a79371bfcfcb9359a6656105f79c11ea7053acd4497db651f98f593d8487a2e8f2d3419945410e580c35d40771022340c4c4d6f227f91a1\n\n# tcId = 16\n# salt is all 1\nmsg = 313233343030\nresult = valid\nsig = 8a5225fe5edbf9240c281f69cc26c89641e258b5f21f56a5f11c681c87f6f451fc07490fe6b1ed4febed4aa7c010bdc312e453a599be2b37fc2f1a079ce1868e2ee59b3e73c527819238393b8acae914ed42c9d2d7641e697ca8946d2b53879d33805fd91f56e608247f1c6744d8b8a12e02bcf7f15e2ba176995f15a6458a926b77e56c2f3557e716cb7a730812a1f6798159118d9d95b593dc45eb59ffc9cd4e636b9b8ac8d9718e0e89269291fd42cc2ba7b379cdbe8e443f283b7517ee5a915ba61cdfaecc9203450d70db365588043cf777fe92e0aaad484cac58ab1ea442a2ae62f5dafb2718112eab650d36743a9735621a18b7aa5dbd9d2d5122afdc3b8ff49d91ee79af3743a0010bb8e88b6fc766b98425e2660af1b38cef8b7ce5b9f3432a7358fbb07f20c9295a5eeed04a586bf04f5f9e8b3425a7d0307b496848da8738cbc267052d7a679c95e799205b4f7c00d9cc668c40cbd6368294402e26bbadb9690a99945d8fab81c5d178d72ce38b0b47b24043b27404690af103b7240595134faef4788a6106234f40e2cdf06089fb602198562b18ecd03ccc58d3e98173a9093eea3b315cd9349a010af282f3c485f92c0fabfb774d6127204a254809585c4890622d98659752276db7a890dd0cd4a6632004651bb194b056ca446c85cee7328e80da15c16c960f514dbe8fb9cc114330a160adee4cd449cc1524\n\n# tcId = 17\n# byte 0 in zero padding modified\nmsg = 313233343030\nresult = invalid\nsig = 2f50dbd395abc6fd0231b9bb6103018534b39c4d60d139615cf1c9271185c5d3988e99735c9fbbb649e3cfb629d73fa9e1249180606f8e8621f3f5033e5cf7f67f4abea48b53eeb5be67031cb6afce1b26538ca318650b87317f6129f9792f3cec4e98a56f2d7504999ac1fe46729fb390448e5353b999a52044d2baa92f2ff664ab5a4ed82911c5c9942a3741fced99b9437b102db72fa5d1fa87929887a2e61ab06dbb6b8a39659f41f3ae07061792ccf88802a6b17aec1da1c35bd85da150dbf11b3401109e43261a0ff2b22cce779b19b5f2925b55cf143743600ac4c7dcfae7a17970da3d52d74ebab46744e214d22da8d1aa8021c8b47d6e2c585535025c19335668e2d851d6881a594d03852b45aca4fb10f9e85f053a0ca532c40cc0537518baf7fa388c2c0743cfd6355dde1382cf2c9ce1f418be20aa0f3be147d0c9c8756e2c23797fe9f3365aef876e793f3636608b6221460cb76863590b3f5f56f6a5cc0b0ec4d56b40776d629eb32c7e1838aeff1d3c3761edeb91bf62682f7502dc685e29ff1f678e287efbfd364ff98088f42ef58ef2a50415531c1021a13c96c080f62842167239cda8209ee3641da51f3711f0b665cc88a278dbe2619200e50037577c9adf0d78be3879cc1a362f673ccc3e03bf9a39f4bdc10d7f044101a02a83ef7b63784f002565c06eecc819483433bdfeb20b5f91185be6adf22b\n\n# tcId = 18\n# byte 7 in zero padding modified\nmsg = 313233343030\nresult = invalid\nsig = 0898add7b127d3f46c4eefd56fd293c166e7b601caa0584059c62211f3c063b9a479f7f9361a1ba96a6a640f9c3c12b18820e6da9c9bd01a6062ca722d0abdd5a9031ec328ca8729e84079ea4133b4b4cea8ccca9e1f9b6a53fa8486ca20390a92dd5945790c371eca5c0958247344334891b12b53baa4b7df2e15307cc58420958a4a8cc8bfb06180174ea8228ad46f98725981a2a338d54745ece14b65f38bdc5c6bd87c3b2d81648b47a89afadaafd51bd9250debb9351f654a47708332411234df725ecdd0ba3ab778560689932559f9fe94d937fbe12126025f3d1464f7e5081c9f8b7f7a422cfc3584ca98b5f0277e97ce9229aeb208892f5c564157267fe59d5cecdde948647dfe7dae62ce6f39419dfa80d4d9336f874395a7f4f2099bf54227ed933ce9705efd1704f9a9469c781fbdfe8df12b13a15f802d309abb0c6560635a22e49856ede3c2a5271a656a76a059fead975ea077c4e632b9f13b8b3950f2b00c3834d63750098e792b824e54d53d6dc102a4c7de5b449d083436b7714f99928969c3499104efe30110366abbf71c6f8e4f069be0d246c2ef417e84fbe075d48aa65d82590c3ce862c518de635f8c6ac009288aba112de47c117fc47be80fd79f39e9831239c34cfa9bb54a07ca67ef318fe6efd6bb6f0049fe255846a474cbe28bf73099e948c91b0de01a9f60b80f21ac8f5601ec36f12e06da\n\n# tcId = 19\n# all bytes in zero padding modified\nmsg = 313233343030\nresult = invalid\nsig = 2daac886b4fdbf32ed9f9e66f1abd5af7266025d168620b051dccea674662e1a347ffc519345ec8d40d0dbb4a5d60317632b5d504a2dd56e89aad4438d2b824ead94b87bfa918ece96c3639fb1edb6139bec5c4d3366588992f26ddb39f6d504eb24b90580e475da022c125b6ca3f34251211c40c3e2ce95f9dfe051f728eab654d95a7ea5aa37c84ce0c2c3abe551e469e1ea3fb94b33b5c3cae230aca4a13d09fa6925e7603e2db91a17ea0a8ec77372c4425542bee8b8a5de029715f62a1992c78ee2b06dce17dd57796d48e3789e7f511bf85c15366d504c8266bae2357630e5c70985622dd85bdb6d04131ecb639c34295c49b47c325018247a154afd1674189ae2708ad2ba5c13135cb27d0e5694e058c9d36977fbe36f39aa8ef0f99a7b59a9af3bf3ef737c36d6e8f137faa38bddc62fdb1f1c6ca292cf606a41cb32253804f14a12e66a9851697268b8e619556cd00f6abd55b61d7b4d4a9ec8a7fc3ade79f96e47a2b376c881b96f0279d0cecb634c4031910edaebe92201d144d65f450357313fad99bf10183cca7cc6fdf52382a280d71c0b54a846ad7fcb2e62f569371ca403e60d8611a77ff4392c1da2a0792bfc835b161f407e5c279cc705483fa94db072b9023407f1bb1de67cfd57b08f6c5094eb2754ae1581a8471766c1585c1afef365e492c380b7e64722b6beab3c1e367b9d615a33fa1c13733731\n\n# tcId = 20\n# first byte of hash h modified\nmsg = 313233343030\nresult = invalid\nsig = 707ba25d4bd3b92daeb91154e68d056f31857c57610f808429bc5f0c0e4b52e079ce2628f78c9b0ed061764cfb9c937164b70ab7274093598",
@@ -3312,9 +3283,9 @@
     "7cd7d28429bc48c73b47539630b59bf\n\n# tcId = 35\n# leading bits of masked_bd not cleared\nmsg = 313233343030\nresult = invalid\nsig = 2f04e32e17a9a6991733913475f54cb18abe5cd6f7856a8cf12525f7a83127c20255149565983719e58b10c23fa70a27b40d723370bfdd14bad670b5a22b3446ed1473e8f012e5bfe70a1fdc1a7d826430e301405db72c815763e4c5486938de8f78b556648108eaeefb6d5a4520da365cf64ac69d2f0d2842b5650da2d06639032c4f90907a3164f67e0abc68a4bb86778d6f0c6f8c1585b76a73573deccb7010d21e959fc9189aee02458b8e353f12a3d98ccb6bac5e3a57ffe5b60af37b043fb58cc478ca9e249e94a30bfee4c509e150a3e28e56dc4222f9968ca8c62ccf57326a473b30055655654d3e700ea04756bc3f687707e0dafb9531706d06c30aa171e33550b66055adee33910aef573af9dd06b2611425d9d4820807c12f7b29a7fcd98c3948d5352e3fa8083205e13f075eed4e6442c0e3dcf68c765ed93748cfe33d758fee0e47a1977d0b79a755e731be22bb0c55cad80d54939b7a8dbd4c9c20b7369f907bbc2a540fae0189ab09fe62bb8defb479a913f3ebd167abbeb35104b2e3a75504b5eb58a1e34c991254e7b9115dc6fc0946e4d38e2c475199ba283be6b222cdd0a90ef0cf9ec98a3cf815e4d9ee23e3708b6ddaaadd146a802a53b57beee909528452d70170b8aaf40ca92fd5c3f5a7e87e93f30ee89881c7368c0cad47732e9b58f13e2d4873b596005e6344c6f030c9ed75bd65f273baa67d\n\n# tcId = 36\n# first byte of masked_db changed to 0\nmsg = 313233343030\nresult = invalid\nsig = 856a35de0779d33d013b7f7bf55de6612b8cb179058d490a4eed4acd8c213902d25b4eb5026c85b60e77773d3ae3570d037a087987267eb9432aa434ddf8b96379753d5d77b842b468af926b87a37b93ba313a6b0b0a5fc0028d68e569fb70c7bc5d29d4353c661fb1cb5e60340998d69ae7ff80ef5bc617207eb5648080265610b56d7b1037ae271e6e76f36b2ddf6d7ba35cb6430b21740ca0efd45d232600842acb225179af8765cddc356308ef617e130edee940e07c964517972ca94458e38f04375de2ca2c1de672f7885244ac95f883fa297d7e31f20b890a7d91758f57e9430c29a021ff5d94281ba0e7932ddcf031f0825881d3607cd3acc5ed14e517b61d2014c9d2ca6cb51e7da4ebe14341eea4c84d9b0b3fa11f9c9f6423bd414c8710cc82ec788f09c40634c3551ca6751af5e9fc966c687e170c5bd4358a4a34a8eac48f7357b2061d0610830bb7c8fdb59e5b9b55005a0cac3ecd3d6992971e64017a0d436406019d1d5fc3726c9c4cc811ed19d10114f61dceea8196b5b3c4015de1d761f4500b5182338a7ec0ba9369b44173ed699fd2ccdbd69f60b80b4c4e730f9793a2cb2c2b2d95a5156940162aff6fd8fe6dc0eeff643cec3fc5f75a9f516b0c422ec3938f4caf76fa09ec797b6088920e910d3d5d8df0abbc6bf78fff486c266540d74f9f55ba6aed8d21b71af65618fa15b94051b096b33a8066\n\n# tcId = 37\n# last byte in em modified\nmsg = 313233343030\nresult = invalid\nsig = 6df0234e29b09c68529dc6e379485376e89da42727fc88a547560ede5c518af124882f393e10fea33f680e1e5aabc51158c9b026a454c152fe4af301f40033693006ec509892850bb0b569b2907f7afa8864a9895752c47838615cf0f15e0b139bf83127bbce69f6abd6356b7bc52b30e9a58422ab4ad68fc2c812b6554f64e5c158027fecbaed30f48e90bf005cc6f0953ea845922d847f30dcae5a9b1e00f3ecdb139a0f38baa31a9404e816a9fb8f13686adbebfee71985ab41de8e0bc714bea3270205bcf16d5b7e8b42cd6332ebce2aa3d9501d30af6dc66c5ad19ed759567d16f0a391839e721e7d04c5c7d23df660fb18cd1e8982b2ed6860bb1700c3abdcfa8853ae187cf32695db4252f22503ea039996ed3877b93bbf413e27990deeefea7253a0ac23da6408923617f1263bce559ba3efa1bce8164ddd282ec5c115ccfef85493abb23c1490f134a63eb683ab16fb952854b40bce433d97d98f0348aa658ae3bdec9f0dfdcd25cecf11a1796726069132726e25b9a9c6278bc010f673b49cf89689cd2de943b94125e5a7b463bdcfb4b4ed7b52ae32f71cb0ae2f0ddcfa6637871fc64d254f1ab763b76cd7f93017759c9c73656a908cf0c687eaf6eedb0e510f3592be48a814ed7a9b387da754b8161f1cfcc2bd9f7bed8391484c98d542f5bab86af285a646965aaef05387153b51c7a915fd1213a6eb789859\n\n# tcId = 38\n# last byte in em modified\nmsg = 313233343030\nresult = invalid\nsig = 31e7df11d14b2fa289e45ca2cb36d568aa4470b5c6aa0d4bc0c10a1876146b876ff953e582b224adad6358998efc738631e44a34e2c1718f9d28f695d0e1b1f8318d2301bb3913dfd318707964e5a7e111e5a8765dbecdd90bf4e265a367216c6126869515c65d8788c9fd4842a6318d1323e50233cb92de965fc23f61cd8c91baee4013a1a928428ca6ed4db99eb2290c0d0683d7cc928d0cf252b389b64e67995249627cdd90cb4e5fefc8da61eb3e8104c6138e52f6710c136f7061e961c485eaaa586eed740eaa2c0ef879d2af5eca41a5aa1a2476e909c8325952a9d8ddb3b9f6bfa6495c4e2571e4c0ce727fe087ce484a038ecc27c7f0743fd93dbe0bc0386e4d025092d21f9c7d569ca0201d3347e71932e6efe64fa847655e4f1b01af20e0137160b5bc03a9450457162db68997a2df476175ffa040cb4818aa6be70cdee08e05724c8ce0174c6b25629c33e9aff85fdd6c438aeab60c3e939bd6deae3be1fc8beaef81b9334a1c4d59117863d7e73249f12a6a295bac6879a66a0935497040357bdb9ce0f2ebd7de693baabbf70ef76406bfe0e8a8a1edc183185a92b97547d50b10f24ed71a8a3d558ddc20f2b40801db842cc9a38021944d8b97e06e520f0ec22189ac11503a2d84b8291957299b8f1f45feb408e6c828ab97cce7c644b9fb84b8b5c3daafaa90e1c177799c1dd06fc6e48fd309d40b2888f4d3\n\n# tcId = 39\n# last byte in em modified\nmsg = 313233343030\nresult = invalid\nsig = 1088ad6c2cb501f99bf0c545d84b526de3665f419af5e941d5940196470da54dd01f58f48ec6cc56e16b1e21573700e57341188921fbd96362ba5e377e051a1cb2025c0da7842409e8ffc5728b2df3fac115d79a11d7a13ff1906cb8734373e62af62dacd1e7412a89327759542577d720581d4b8a928ab01e023ee7caf33b9037fd96fc17ac43ed9d604b096c8b0a11854bacdc88a58ad8dc3105c748813b4d4109fec80a4385f74b8b102f02d59b36e6cf4a347d87daaaff974e0a1f09255fd49e584b3c88d4704258fa8c402ca67ef95d1f2757312a63f307302a31b021fe1bd2be6feb6c1d7895642e5556bbc96026a591431adbb2953efaf4b54f33c8c8b9cd06e23ca369e5bd81ddac3167a9eb280f060afad68295effd5687e131967437d4f9f97d7b46afe1271a4193407a1251c1075705d4c4cab5e523eb66b2e1f57789001075b500a3841b7ea7c130f37761c27097c9ff533832d201ccc243691f19ad4a822b7ab203cc477398bd32506b4952adbaca1bc5eeba7c565843e17e18257a7cfac8746218a2118b9813c655f6ff55577fe17ff6fbd6443ff307f20dbd36bec5835c6a41bfdc7b0afa12dee58b119ebfa8a3ba8d3e77e3841a4812bdbe163aaf5bfa05a305c158115227f569fa92850205abbd275f1f24f0dc5b14cdd405d27fad86f812d51254f1667724fbab80e6fc30a5f1ab60afd412fef8ac19c5\n\n# tcId = 40\n# signature is 0\nmsg = 313233343030\nresult = invalid\nsig = 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\n\n# tcId = 41\n# signature is 1\nmsg = 313233343030\nresult = invalid\nsig = 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001\n\n# tcId = 42\n# signature is n-1\nmsg = 313233343030\nresult = invalid\nsig = 956353ecb7561945dc5544e4602466078c93f28507701ffd39e2a9813c8ac8740e6ad61c955d484e513b3dcea527e001a018ee2c207c1806a96763280236cd3c820dff79837c9b709cb4b522d3ddbc9192242259c43be75ea244d37ccfa8a4c75024a2cf7cc76e842ea69cc7ca1227405b070047387a5068e4976e4b8ed5f9aadd7b4db024fbb8d7bd8a040d8f6610c1c6eb1d4b606dfd182235d0360880304d5a750603af0c",
     "424b8c8e6dbc12c3697d2d609c97547e774e2e362ea96d1690dc9432112c535258b3db2c4c32ad510d6c07ad0788357883869efb8b629298724847925cf42b34386be700f02903db5852276bee2370941f397bdc3905e30964a0b5e73602703340960c3ed6078263b611f197955fecce4b9a32e43cd1d2e5e87c4ceb65edc8853a7ee31d28e16e5adffb8ac7b760fbfc63d5f174f4d0936461dbb12c964a6b6d6cee752e5fca1ab4a9fd238dd3e8860a1d763d2019f9e7b99ed7666d4e038710f90e0093bc566987d6c0092f571376e705b342d066c54e6e2578927b92c1f0928de44e9a6e1f49b907c6aa4f605ec9c398d55df81c67373b03cc8110162fb417f96fd321048647dfcbb392455115cd912ea83351853e6a185284648842adcbd25e67174a3b93b8a64ce2ce9de0e8577b8b662ce32e2565782665dd38e5bb5fcc4fe12e4320dab7773b545a09c6d39d9dbad459f21f3e624ee6ec\n\n# tcId = 43\n# signature is n\nmsg = 313233343030\nresult = invalid\nsig = 956353ecb7561945dc5544e4602466078c93f28507701ffd39e2a9813c8ac8740e6ad61c955d484e513b3dcea527e001a018ee2c207c1806a96763280236cd3c820dff79837c9b709cb4b522d3ddbc9192242259c43be75ea244d37ccfa8a4c75024a2cf7cc76e842ea69cc7ca1227405b070047387a5068e4976e4b8ed5f9aadd7b4db024fbb8d7bd8a040d8f6610c1c6eb1d4b606dfd182235d0360880304d5a750603af0c424b8c8e6dbc12c3697d2d609c97547e774e2e362ea96d1690dc9432112c535258b3db2c4c32ad510d6c07ad0788357883869efb8b629298724847925cf42b34386be700f02903db5852276bee2370941f397bdc3905e30964a0b5e73602703340960c3ed6078263b611f197955fecce4b9a32e43cd1d2e5e87c4ceb65edc8853a7ee31d28e16e5adffb8ac7b760fbfc63d5f174f4d0936461dbb12c964a6b6d6cee752e5fca1ab4a9fd238dd3e8860a1d763d2019f9e7b99ed7666d4e038710f90e0093bc566987d6c0092f571376e705b342d066c54e6e2578927b92c1f0928de44e9a6e1f49b907c6aa4f605ec9c398d55df81c67373b03cc8110162fb417f96fd321048647dfcbb392455115cd912ea83351853e6a185284648842adcbd25e67174a3b93b8a64ce2ce9de0e8577b8b662ce32e2565782665dd38e5bb5fcc4fe12e4320dab7773b545a09c6d39d9dbad459f21f3e624ee6ed\n\n# tcId = 44\n# prepending 0's to signature\nmsg = 313233343030\nresult = invalid\nsig = 000075fbc044fe19c72f459b5a1fc4793f7893ffcc95bab8609900b3c3d3be6643a42987c167e7feb63ec2a57f961c1b9c35b11b34044e065d7d3df0b49496dd80f7cd1eb2e8c0d0b726f37e701ba62a3003a17657af55adcb0b6e86f95198ed435207663d616d516bf7222db241094849fb232bf6fbeeed7b5879a6b6c8aebc57646117220bf55403d0ff078e219ff119bd2e52e767b708b91afe30e9be348766e7537e1128087b4c9aca0281415e550965a395ab20d423330939b4e37551a7735c6df2b0395dd032266ec7dd4afaa3c477c64e3f95ee4945960b7a0c43b7a9622448eba4149e30ccaa0c234be7b06f4ebe8ef43063c62282e0643c6e483feb1942e3310bad0c05bb2f87674825fed098d5c787b69c5ba6a1f716dfa62ede3b8a01c076598b15ffa2e2be82fd1d8025f8ded14cd8fc8753ef76419e1dd561bc0310b2c7845e2744c9621735758645af0252315b6a05894c264c4587c8870e02e94813fc3a797d590a9645d92845b614b0d89cfffc0b80c5b48186ae350d877f0bc06e561770736342f00d56b2ae785891afe39cc0412337e4f5d29ff06d727f6fee8f0966d52ac146ba82a753751ad786c9d70ccd3005b11fc4f6b81517433a052c2351390332bf7fcb4326a19930b512631317c0354a81ec7c529ccd1bb2ef206d697999950a539808958d6c2be64220123f12e7aad168be35de70103090937f44\n\n# tcId = 45\n# appending 0's to signature\nmsg = 313233343030\nresult = invalid\nsig = 75fbc044fe19c72f459b5a1fc4793f7893ffcc95bab8609900b3c3d3be6643a42987c167e7feb63ec2a57f961c1b9c35b11b34044e065d7d3df0b49496dd80f7cd1eb2e8c0d0b726f37e701ba62a3003a17657af55adcb0b6e86f95198ed435207663d616d516bf7222db241094849fb232bf6fbeeed7b5879a6b6c8aebc57646117220bf55403d0ff078e219ff119bd2e52e767b708b91afe30e9be348766e7537e1128087b4c9aca0281415e550965a395ab20d423330939b4e37551a7735c6df2b0395dd032266ec7dd4afaa3c477c64e3f95ee4945960b7a0c43b7a9622448eba4149e30ccaa0c234be7b06f4ebe8ef43063c62282e0643c6e483feb1942e3310bad0c05bb2f87674825fed098d5c787b69c5ba6a1f716dfa62ede3b8a01c076598b15ffa2e2be82fd1d8025f8ded14cd8fc8753ef76419e1dd561bc0310b2c7845e2744c9621735758645af0252315b6a05894c264c4587c8870e02e94813fc3a797d590a9645d92845b614b0d89cfffc0b80c5b48186ae350d877f0bc06e561770736342f00d56b2ae785891afe39cc0412337e4f5d29ff06d727f6fee8f0966d52ac146ba82a753751ad786c9d70ccd3005b11fc4f6b81517433a052c2351390332bf7fcb4326a19930b512631317c0354a81ec7c529ccd1bb2ef206d697999950a539808958d6c2be64220123f12e7aad168be35de70103090937f440000\n\n# tcId = 46\n# truncated signature\nmsg = 313233343030\nresult = invalid\nsig = 75fbc044fe19c72f459b5a1fc4793f7893ffcc95bab8609900b3c3d3be6643a42987c167e7feb63ec2a57f961c1b9c35b11b34044e065d7d3df0b49496dd80f7cd1eb2e8c0d0b726f37e701ba62a3003a17657af55adcb0b6e86f95198ed435207663d616d516bf7222db241094849fb232bf6fbeeed7b5879a6b6c8aebc57646117220bf55403d0ff078e219ff119bd2e52e767b708b91afe30e9be348766e7537e1128087b4c9aca0281415e550965a395ab20d423330939b4e37551a7735c6df2b0395dd032266ec7dd4afaa3c477c64e3f95ee4945960b7a0c43b7a9622448eba4149e30ccaa0c234be7b06f4ebe8ef43063c62282e0643c6e483feb1942e3310bad0c05bb2f87674825fed098d5c787b69c5ba6a1f716dfa62ede3b8a01c076598b15ffa2e2be82fd1d8025f8ded14cd8fc8753ef76419e1dd561bc0310b2c7845e2744c9621735758645af0252315b6a05894c264c4587c8870e02e94813fc3a797d590a9645d92845b614b0d89cfffc0b80c5b48186ae350d877f0bc06e561770736342f00d56b2ae785891afe39cc0412337e4f5d29ff06d727f6fee8f0966d52ac146ba82a753751ad786c9d70ccd3005b11fc4f6b81517433a052c2351390332bf7fcb4326a19930b512631317c0354a81ec7c529ccd1bb2ef206d697999950a539808958d6c2be64220123f12e7aad168be35de7010309093\n\n# tcId = 47\n# empty signature\nmsg = 313233343030\nresult = invalid\nsig = \n\n",
 };
-static const size_t kLen82 = 53222;
+static const size_t kLen80 = 53222;
 
-static const char *kData82[] = {
+static const char *kData80[] = {
     "# Imported from Wycheproof's rsa_pss_4096_sha512_mgf1_32_test.json.\n# This file is generated by convert_wycheproof.go. Do not edit by hand.\n#\n# Algorithm: RSASSA-PSS\n# Generator version: 0.4.12\n\n[e = 10001]\n[keyAsn = 3082020a0282020100c9a765c2661b4674cff3480e9a5e462ad0ad2fc9bc6fbef62847b3113d20991f653967971c28252753f5fbacce012c2a8ab592914d269efafa724fa4b920e340930c106f7b36f79cebf0e62e88e0e476888e9f0e22186acdb6c4523a232b65b4ff2cc22dc44f8a559527d79d7cd7dcf3773212f7bb9aa133c31165cc663690bf123d73923c838929ccafee59d6c7095b8d4a74baf2d192c9a4e87c4e12bc58013078b28a7789e82e9f31de1f4d6a2aa6e80632be8e4bdf263e8d49b09416fb19c488c07ad8af722ab79182b23028a71e065d02412a9eebc46d7d8f4e03d79238d8c0cb4a97a9a1200ebb6ec64042ebeccad9567526eeef12c17d94c1049c889970b96e94cc353172a268a49c5e8bee13c15b39dec44f2c7a1aa37a7a0b6f72290acada32b1d8af1fc3dc8a89487ba81347cbeb1350925d30f923958106b49959c871e7c1dba55da0772e362cf8621d78610868b894e16e5dfec96874a93a4cf379b47e7e318ce315066d70ee3938140a60148f205085cef8a7700ca3c53d52a5756a63b3b16f153062b61262a68496210c8be4ef3f9029ca0ea0e3b3a0d5d6d226edbbf44daf8f045dc286ded3c4ec4db6b45347079f33eaf98e3c95b4b60e79ef4a3093feec543703422ba74a118511c2193b54fe8b633866ed2c705ccbc6e7d9d3656809ec3d3356e7400a9648ec37505041e3e31af1c02eefe924a67047d30203010001]\n[keyDer = 30820222300d06092a864886f70d01010105000382020f003082020a0282020100c9a765c2661b4674cff3480e9a5e462ad0ad2fc9bc6fbef62847b3113d20991f653967971c28252753f5fbacce012c2a8ab592914d269efafa724fa4b920e340930c106f7b36f79cebf0e62e88e0e476888e9f0e22186acdb6c4523a232b65b4ff2cc22dc44f8a559527d79d7cd7dcf3773212f7bb9aa133c31165cc663690bf123d73923c838929ccafee59d6c7095b8d4a74baf2d192c9a4e87c4e12bc58013078b28a7789e82e9f31de1f4d6a2aa6e80632be8e4bdf263e8d49b09416fb19c488c07ad8af722ab79182b23028a71e065d02412a9eebc46d7d8f4e03d79238d8c0cb4a97a9a1200ebb6ec64042ebeccad9567526eeef12c17d94c1049c889970b96e94cc353172a268a49c5e8bee13c15b39dec44f2c7a1aa37a7a0b6f72290acada32b1d8af1fc3dc8a89487ba81347cbeb1350925d30f923958106b49959c871e7c1dba55da0772e362cf8621d78610868b894e16e5dfec96874a93a4cf379b47e7e318ce315066d70ee3938140a60148f205085cef8a7700ca3c53d52a5756a63b3b16f153062b61262a68496210c8be4ef3f9029ca0ea0e3b3a0d5d6d226edbbf44daf8f045dc286ded3c4ec4db6b45347079f33eaf98e3c95b4b60e79ef4a3093feec543703422ba74a118511c2193b54fe8b633866ed2c705ccbc6e7d9d3656809ec3d3356e7400a9648ec37505041e3e31af1c02eefe924a67047d30203010001]\n[keysize = 4096]\n[mgf = MGF1]\n[mgfSha = SHA-512]\n[n = 0c9a765c2661b4674cff3480e9a5e462ad0ad2fc9bc6fbef62847b3113d20991f653967971c28252753f5fbacce012c2a8ab592914d269efafa724fa4b920e340930c106f7b36f79cebf0e62e88e0e476888e9f0e22186acdb6c4523a232b65b4ff2cc22dc44f8a559527d79d7cd7dcf3773212f7bb9aa133c31165cc663690bf123d73923c838929ccafee59d6c7095b8d4a74baf2d192c9a4e87c4e12bc58013078b28a7789e82e9f31de1f4d6a2aa6e80632be8e4bdf263e8d49b09416fb19c488c07ad8af722ab79182b23028a71e065d02412a9eebc46d7d8f4e03d79238d8c0cb4a97a9a1200ebb6ec64042ebeccad9567526eeef12c17d94c1049c889970b96e94cc353172a268a49c5e8bee13c15b39dec44f2c7a1aa37a7a0b6f72290acada32b1d8af1fc3dc8a89487ba81347cbeb1350925d30f923958106b49959c871e7c1dba55da0772e362cf8621d78610868b894e16e5dfec96874a93a4cf379b47e7e318ce315066d70ee3938140a60148f205085cef8a7700ca3c53d52a5756a63b3b16f153062b61262a68496210c8be4ef3f9029ca0ea0e3b3a0d5d6d226edbbf44daf8f045dc286ded3c4ec4db6b45347079f33eaf98e3c95b4b60e79ef4a3093feec543703422ba74a118511c2193b54fe8b633866ed2c705ccbc6e7d9d3656809ec3d3356e7400a9648ec37505041e3e31af1c02eefe924a67047d3]\n[sLen = 32]\n[sha = SHA-512]\n\n# tcId = 1\nmsg = \nresult = valid\nsig = 8d4444ab233739c9d1441e99cb4f71581ed78fb996ba1257fffcd9e3c74ff60d6be352f002f959ff66bc6ed0c987a070097e5d57d8bd89b4452a9d2ca121eb6a283e8d0ef6f5f67875b6cbb8f04e6d242900d73d5bd7b59de4b9466ccbe53874ed422610e411fe3e026f47e47b8686b9c891c7226b4ca560a840e1734eb4f6fe877e559c9a9299dbbcaeebaf7eecfce6fe43ffbc483514fa3aabd6959e5aaa3977e23a9f97edf406d396e96c3c830164b10abc680bbaa6d99d19765d7c7e77946ef6ae240b5fef0249e7062792b15c8f9157da95971afb315c9c015c74a2e79ea2d0cc46992704872c340781f052b4b2cb5ded8f5cadd9b5e3edce128ef2354bd0411074d6515251f5231453bd530222f730ec736a86f721744267ba52652289ff6a207a5a7c45c20ec451948d6bd7b10f1af7282afed9f5df43e4a0d0f2e8fc6d3dd3130d4ff6fbc11f0ea460089856df29d1b7b111095754a7de9bc03029c6c397b6994674775fd29cd22ffb03dcd90c51096b18a6c174f2b48d50e94856f5a22adae64915d69c5528dac0345017c24e8aba401c6e9a0a268057a0fea237dbf0c88906796eea0d1bc3c2347cfcd812217e26015825e9f0fac404c22c26272443ccaf30b294c7c467497ee561a2a5f6d219973cffde9aed8e4486faa3de3d17405445e2f78a768dcac1efd01596486c2495f5bb1f830a4984041e03a7bcd77a\n\n# tcId = 2\nmsg = 0000000000000000000000000000000000000000\nresult = valid\nsig = 3a58fc64a234dbd7be958d7c34abcba7d780ca636c4f2b2bb7fd3d4e4faaea0e17226c85debf8dc9b1a79e152a3bd83b13f43b1e92be81b37e908d04b717251e32a2d49e2cb5f2e7dc18e74cf9fcf0c0e246d473f76c79c3d50e878a2f89bc4eb6ecdda96c166d6a825a1df569d11384a78d7052782ace5878c41361f148c54528288088716f935d3e5b5d556a0fc9b62c0de31d9ddf4893f82365111043ad7fca010d1fe9187bde48f78cf465657e184857451d64564a16a166743870033e64125ca3f20ba80c065b259666871fcfcf71e711aa34cb70ad9a2ac6051fc02c96149d4e3c1741c4d44663ee0b49e1ba60a80b4c2d389ce3ba953d68bec835432bfe170429951f82ff51f408aff052c934d51526117b3d57ed1f2a912b37cacdb5a980d30d223d79faee7948c5f4986c1df5ed42923a3f4342da02a41872db49aa09d2d48c3b3e1cca7114a9a34e76b747ae6c99141c9f856e41d98456b3fde7d26bf842d6a421b3d4cceda4da1aa4d1298b624159a1c83b6fe5cb89982eba5e7d6005489d39233f156817c00c04511b98463696f8b6b3962ca3f4ef76b37300dda1d368c237250baa057e38658882f482d024c26163dc1fdac29904bc6424130837b8928f764bc939f006913ab1e968c85016dd812dba264520e6380872587265d827557eeac6498db8137dd2ae029fd83250ab7dcd764d018ca05ac9db8f95e2\n\n# tcId = 3\nmsg = 54657374\nresult = valid\nsig = 7c838ba65f923660aa4ac47465eb1df4df51d6fa2be26389757de8c6dfc7746aa5164d909b69b7c04758d256e13e3520e77e75b4094d8b0d60da0030b9c991969f6e892ff03ffba9b9f95ca991a279e7cded611a2879e6e6602f411a122c8d11cd333de5d2f7f367e38ee0491380e8796e113487ec7bc05ec1b1261aff871ef82cdd12f4e3d8f239cd49b2f53d57255dfe6ef29038831cdebe9cb1a76dc9ed79578e129b063724ccb3c7b3269f5dd3d9669a405582255cb56b1efe6d61a376df3a141014c3d660b66f9d1b266b5fd3c5472534df778e6e022a8f5a6cab501dde611e07c0c8eb5718962692e8e3773bfd25f1d3b63a20a251ef0c296f01f4a17814e18dfc029f2ed0ce073e83777cff44471f9348434fcc12b0420bf2de1c9018f0282ee21f09302b178f8c772c8f8962f6a29291c63532e1ae9301e7ac55781876965f425619a92559f33737d5e11b282f9434e27d9b27eb2fb0fce4e3e90ca9eaafef170644b00e512537bd779fd2207ee73020aaec07e6cd44103a14940c9499b013c42440d2f27a3def34f3509cd8631db1cc8633ac15180272c824369e1d3c8a6cdca511748361cb60e022173f95ad06e7c79d59e03934854a9f9827f3593d87c34d3fc44beec58e107d454ce04b55c96effce612aef0e5d55c31e367c9fc0166f2c9d450e86d79323d4da8fb409f97adc7af2ec6772ab290f622fe1fa61\n\n# tcId = 4\nmsg = 313233343030\nresult = valid\nsig = 4a80cafbe2a6095f8e8663f6289878514d7ee7daba0c1b0a077cefb333cacdf7c116ab89b0a01cab3161c68cac92a08aae7d117c9a3416d67365621da3380a85ff34a7a3b512846048acd1ec5957af942721c241a180a5dc5d8f6f6fe54d4d9fcb3709cde37081e2233b4fffa201d2029241932da170a5bad0d927a803a7f6289fc9f7b1d41cc1a6c94cbf588d5492b363920d0c98404f5da9eb9457648e2a4e9a034b2e2328c7f8c0e794771641a981df765887b5ba19b769156b375535911e1a2da68bb6a37eaa0ef8dded4ce3eac5caff4e8dc357703f0409d00baeedf3fbcbd6895dd3938e1f03dd9f131f9c979e22e4fcbea0c58721bc72d1f4976e93fc1a7649a23745c0310181031ac34b2200dfb4e8fe9bd4cdb52a23c31416745521aa4861eaea7dec4ea2c18ae9f75fa9d36c9b61bdc4185e434f8cb091cd731607b749a3990585cbbea2b1c0e0fff4f589a547d320bc7923b8a6b594c5866095df9c914cca80cd6c0e9aa3d691e2607f9de64322031ccfed04d9c805226cb476d3246d6caa1b04c63372a77668d5edf06365827b80391a6abd66010e8e1b873bd83db4dcc99444e109efa2414c6e5319f30a718eb43a1256b2142afa2382316e37aebde32da5bfec93e89d2adc39f62aca25a2289933a7cd8234d72a9b3c6a001d27560f8c8a2d9a233bac0b519b34f4f79288ea2cb08a87242953ac24ea144143\n\n# tcId = 5\nmsg = 4d657373616765\nresult = valid\nsig = 3d90ff4e36188b451116227e189a71734571b72cc6fe53dec4eec59e67e98111e96fcd906509fade9922f2de6a13a4faa23c7efaadde6dfd0acf150541eca973c7e38a49c597d741e99ef7575b6e2c8de0974bc868a5567f0890052c4df54d12198ea09a12bdb2b6ffc14a1d874e165ed12caab58b28aee171fa7f1839e36e23ecdee2633616791179084eaf98cc23d2f6ff479df0ba46ed933beedf07cc0cad4dea0f",
     "0b48f4a063488ac67519e1fb83c7b7e86e3644b0846383ecbb1b1189743036b271fbf121e2199601a3ffa8e8cab00a6b9b5527d62dc2a398e4a42c1e5a62f8aae35b629755119c54cba5e860b421845f9b4422f20d896abfa962ece5d116f7d4170db8dd0784b7625ab2a384c7d424c69901f59d03b144241f8f6556da8e3bfe07c17eae91c50ef2c53e71072c3ff16e642cf126feab904e09a2febebd282a2540389bb60b145cb332658d6a69e03a0a8419eec0f204d6e592e04df01b92f58236989b6b92eb0344255914c25dcd0a611c9fb77e435e2ef9bbe3c74efe144171ca95d1bb7de814f76be54cdd8c11db8af8d20af4451a4dd3b62387bac37cb79755afe91d0d9a2163d299ff61ee4fc4d5267eb8c5252371b0a83dea738f6383e085e992b3567ae170780f3b83e15d895ad4ea668a6304f10f0914ca3b2900fab1364c8b352dfa8d5a3993d5628f4d2264c412210798c18aa2ed6aee516c\n\n# tcId = 6\nmsg = 61\nresult = valid\nsig = 07440a61252a8906a9264ff58cebad6217ad710833105369b7a858216f1d5a5f5dedbe3eb8128b34dc0f0243faacb64034d21b656a278abb26ced174f76a22637b755b768564db6ed4e4fba0d5784a22be30d088fa965307430982f84476907d55435ca3d4abdbf689e76f2d4b78d99bcc742e0b757b897c4fdb13d15c5057e6816e32c3e294a947374c998550173cc657ce33f9fcc18b2d14e1b448acaaef683ff84b086f545a05414589b1c23210290ed5ebbc25af614129212d3853ff728ec01128d37c4268975ef870a1e4fa00c3c98b39c3110c2c11af10333e25db027448fa8f219a7dca7c8bfb490912bd5040f1f348b2fb437a8a9f407ab7e8af1c6e29594f557f2e03fe74e4fbfd2f935e68ed824a510fc39bb4be0a2e091feb265fd2d7a33d2f238e70b153700f5bd5046aad7a6fc02a5e23dc36f67278fdb904d05f2efd0cabe9e4baf4e16af0f7ba9edad706d67c67221ca0630238d6f688174d66c1b152f8f921e2c6c08a19e870eab76a77371b42458dff1c36b0ae97b811e900f6c09e792c89644448f1d0b97b53b9818d1d8f3d7a37bcb1bd3e3a5bc022039f00a0ef7de19657c4c9e06daa2ecec2de30db3b7b84107bb74e164956eb26edc9bcc57e5e1c4ed875b02f0545383602faf9525f094c72f682995d4e2d71d03e11134495f637a3b1b022153689751b63521b1a16b3c3e269a2499a4be1aff9b8\n\n# tcId = 7\nmsg = e0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff\nresult = valid\nsig = 2686029fb11cd033724e57dc1835da4f9321eef330747c3500a4893586429ebf02cb4424ee5a0b91a70eb35cb05ef60cf6b3635d4f2ef5eb647f398fd44f67fcd2969b629a7c54f1094f9827f9f27457509730f50c9ecd2dc83bd13f1268d93f0f61c29c5c27eb821c68edcdf1b01f79d1f261dd7f2f283db197ab56cae0ea3b3c1cfaf3fbd4c1ed1f6d313f0b919e5fddcb97b23f0bf64e36bdb6f7cce8ad9cf362953e66c644f8b8b64bddff1e850298f5531f121e6821a393f9658237280c2a53c7c658319bc7d38f93f2d7723ef6728008843f89f61f7ecf5949a2cce6a9fd9dbbc501ef25a53ca02486b61a5de0130149d9d246925f26e1a9a74287439592a4554a872ceca53e54d1c1f4c4e18a4977939a6c37eeaab5c8d0cb5686b44d84c86d736ee8e0d97421f4c8935e926419dd68fd4e5fe9999eef75d0d0f9494cbb0297fa066b3aaca55cc229a36659be310c1e328d0b52f7747c62b1102a2d0a4acbadf0acf621a45e5695ce1393b3eb05a69ca5318e6f6b7ae5c4ed3f6072f8ae99db9af66da6a98d675a35acfe0a7612e9d5f29690870d81114279010bf7bb3d458f630f10f81a785f671e6735d7bdddf4da375d2e6d48ceecaee741a33ec1e8f9e0ce0755bec28315c6f9df363c800ee147bd412c5ea7aeb89e7a354fcd3a2c8474aed04f9a2a5fd2983380f3c00a4558c46ca472a4c15887c07d4bc8a698\n\n# tcId = 8\n# first byte of m_hash modified\nmsg = 313233343030\nresult = invalid\nsig = 9d1925a05f0e28592ed69d6951ff5417b240bc327ded41b460de2fc3a0101bb89d6badc5bd50e2d1432a57b7bd620646e923405253e93c7f2550c0740ab9657752863739fcf89d492ab1cd8ab2088f4ccd8848c4eaf95cd5e7240872472f35cb702341c6965c0fb7b113bc45d991cf9616b7e200f2cfe79201babba3455a60cd628678725c49958282a2c751e0861f20d49a4294d59c3cd33c6ab0b6d02121f6f2c9322b6f9505694de40f9a98f628edddf18b9dcad1cf586ef22e7000cf09582f80f0c377955e110c93dbf9d7938c59a0b7fa283c2f3b186c21e070da5bb800ec622036906306229f8f965133df82521f454d900a01bbee1aefce262b1d8d9219ca809c699e523c5c7204ce45c91fab1cbfcbc1930c661b8a3da04e29d63794a65b1a656a7870c7974bb785fe49dde68118feff1dc6374032e9225325c3e3d312850d0ebba0a5aecea061b5d61c8f13f9f82e6cecf6667278da4ac38ec4424bcc0fa6181ba1d63966e473157c76c7d007f2a0f01eb4efb54cfbcdd1254a871775339354695618d791ffa8d57fedffbbe568a5b848b7fe037f8002d96c478a21313ccf42e5819478aed99f6ba834520ac2460a5aed186a96dd9c90754f9d21bdfcd2635bbd11e956341d0284b51e352c79a7adf1748f2deb2921dfe6ce8d36aafa35cdcfe5917113d0c29cf29478f9000a0c78396cd891dea0056042711c0e54\n\n# tcId = 9\n# first byte of m_hash modified\nmsg = 313233343030\nresult = invalid\nsig = 2f19362834eb20e169132d1ba73bfe32b50faaf9c413d0b2ad578e263cad266a3144835b129648471fbbbd4bedd9668d6e96d4c0d0b95504a8beefcda6b9bae162c2c1bf53ba91d9e1771f46e60c0c1d356fa166a331d51ea85bf270e7cec459908f1fc29bb6b5f216eb9f5f453d29fbd486a03355cdfffd6d131f4a027c9b179ef91257272d5a383898b864732edcde78e5cdf2a9ec9640e9500ac7bb06a7b1f1e947ebd468815a56a86a6f747e806cdbfb81d3fec3ff66af0fe5a472f559ac05b2613ada9e40587d75d98c1368776c696ded9c0b34100eaaa80f2016a2797ff0c0090e4e3b042943436336c8fe72fb5ba9c4b5264d97421582e0e859b8a46a083aa75d7b8f1137fc7d1703812f681f615804385d8f533f0f4f8c21ef3921f42be0f2ee863480d72dd8a4d78256cd4f44ffd62526abd67d2b4393328d41e45f569235f091bed9e2c72b559dff4af790401c18b4af71613ab53f1d362f3ff2e6b0d4c181ca051f88087ecfcecfe8a4844f7f99f624aa43a070bf023d28eac88368e7e8f7c2357ce63728820422a48ec0970566ac96ea714422d5f67a28f5b67ea9008dc95bef728c51c8b5d83d59f92c4169dfaf232b4926c9b59c5385fab598bc6df7ef58b88a60462f2692a8abb9f8699169094b1971c9dd6e90517582721f6e49f5af1e94d9bb0efd5a0313968322d86a2e2aa2e91ddc9d4fde0a6b612740\n\n# tcId = 10\n# last byte of m_hash modified\nmsg = 313233343030\nresult = invalid\nsig = 88a4b39c219e6d7a7155a5e38eb2bf76715c540c817f5f7c3ac827fa34ac202c7d904aef8d59bf449154fdec535b45e1d0a5e9d31d4ea75ce4e6a07e2b7b5ad61181a2172f220e4a0679857eb2152a3e2aee3c5c0fbe8e518f6ae410cab5ce861c66ccc7f72494b9b0f0a06cb8122f16776ba7098139884006a08a6f752948b677f1bec1e867afab783f03507c5a4a528ba2a2e0a118630bd93ebaaa96ce378bac92a9f02eaf0838636685cdb7be2da6bc6438cc84b907b4c927eb1df22a3242e4886bd74ef7133e37708d3d2528ebe39e9c051a217c6c7deb2e6a87b905abf4ad4326d6a830ccbf2c3044befbb9100a364ab897a684b472104a1f1484e39c2f9ff3f5b8ead0fb813e3d54673713f1909af085359c881bdc7b82ca9f2f3c1ddf3b17f796496d29b62e1bdc7eeff0c65b78b4ae81fe7b397d02fd0e74463b3cb68064aac87dd0aeb36248c50974b066b7864924f36084e7bcf462f08fdfb387c803afffeebc9f0c317c9882713a50800e1250776720d1dba53e5c1dd3e8b176c6abd051bcdc9851e7107417f06c5cd9e8853f75718dc6386a7f4747ffaa87994462fbd9ceac6b5da79f9dc5c5363116a308b4c20e673acc5a4aad3fe7f427ee1c08ade6eeb048cbaa0120eaa3a74ee39e5f9e39dac10d5019f1d115dfbe051090037503a63229c216a6cd4b6b4723340debcd812c13edd4e77e66380bac99dfb0\n\n# tcId = 11\n# last byte of m_hash modified\nmsg = 313233343030\nresult = invalid\nsig = 39a5d241a8c6648f4f3ffc5224dc31585e22a58d343cf227b405466ff8f8d5bf553affe12198e6f8515b05d4f6bda0fd645874676d7bff6dd67345f4a1aeb21adb43abab63c3cd53f186b62a1d44d2cd9425cdf163bd2f90cd190329718c18e7faccd7c0f5f8547d74bb9df9890cc8c5a84c6f8fde84f4c8e3409703196a7d7466afa6c0edc728f1e513fabb7df97172545ae8c865ce95dfa81ff35870e71b1067762836a8dcaf186c9fc7e0a633f98f7d32ae10b2a6d962f720d6784e64c04e08f8dfd688746daa69bc70f652d1d6f806b0df297f655162809fbed4cf0e07d5ceb66fc5b2fb89abc4c2abafe325eb4617a2d244783f70002056961b26f0c2dc5a7df3e883bfe36310ac3ec92b71687d6b6bb3d11378f0ff85d98c6584bf2d2c317bf287e95537d0314519bc6b01798c26b3d942d08194dc34a884d62160919db67df95fb9bd4d917d4cee73f88914572db84ddb3804984c2da20eaac9bed684a0bbc224dd623e527255fd27ebcf6435292997fec51b55b73dd83decd002c348b2025776f2031672a15fc62ff857938e0cfe4da61f5f9e0442d4452a1f7c2687c632bfcb143a544120017e26854ff6a3e8d597ba4fca595984fe1d38a9199327d12fcdd38663dcc7d1fc7ac6d7845022de5336f9e570a6700f0c5eba0ee68c4e75295f69b76de1455406cc6b285ef5b86729230ef8781fbe63e0bd9c82a1064d\n\n# tcId = 12\n# all bits in m_hash flipped\nmsg = 313233343030\nresult = invalid\nsig = 3ba629ef8d7cb5798b51fef0959cc00b4ed788f6f37b70cfb16d68b864ed1a33ebccf4890c78970695825e78b3f219811e928d27af0d389e4b75624a06c7cf2174e2a9de6e87394f617b8fa0361a490dd45b9cfaff13b8b807e5ecb0c1b6464228f1fd968b9af8f7a63fad9a7fa53bcbc633331d33b4d7c2bac330354324365c0616bbf22bb9de6a5df5570150186f517ed1b75433ac186ce41ea4f330ccb6fdac5f8db5f63e37fd3340631f7e4c0365b75a0b2a9d790bdc6a0ebf828c84a426fa9a7154cfea1bb9450a8261e0cdfacafc10ce08b64f941c3bc23732a4c3c43c6126736d84033365bb57b3587ed98c031a85325a15ec6642a99cdb186156993ccae8e36640419c15287e7b7c0518376589b93106c434d67b5a5c1fd34fbc569a4e4edfe06b621fe3bb86efb0fb15475db5477f6f9a85d385dd49f0cf3c5d4f853d0574991d1a508d5767df9219f8f15e4760f049c84938d4dca1445df3d15f9f42191e34bdeb15742050812b30a509d4a2444dce219f05d0faf11342bae72dc3f",
     "5ab1fd2f25b507d7d7e30a9d4c619ff587ea03d471c8d0306ce89ff3a8c1b2d650eee83308a9236dec87e0af54c74f402f9cb84379aa6c9586db66aefc94fbde391330fc108569a0b9d0b63c974f333c34e881494e02047b19102772a61f89f19622e0b8d92dba4acb19d395d6170dd5d22220b5e678d2c9c9cc7c843a195be\n\n# tcId = 13\n# s_len changed to 0\nmsg = 313233343030\nresult = invalid\nsig = 9e591980e9ec3d62e2edc3163ac8206fc09fe026a2f7e622dc5a6d02976d30ecf141295335008d91a223ee98a143541494ccf7cb06a1aa61de524fb5bb4b379a67ed2ced447c7b395c57a625f835dec6844c3b67a85aaae10e273d3902f5f30539711f98d73f86beccd798b98541a84a03ccb3379e8eff88c19c88aac7b7ea99758194ffa6660153d4f22c1252dd1b7b574e19b3492f28cc097d3ee3f30f6b88576bc6299512f9f8749e0b297295bc275ca59f8056decfca9f3980e6f8d6e07b73e1a8ae8b3847556cd67ab77b96618979ed37744be2d6bc9f2b671615f1d4c4c1b419f05036148182ad4c6375f9e3c7cb37bb75d16c4486e97c0ac5685995cd8e5d76452934b26105be9074b2f8daeb1add13c9b127dca2858e5c80e686791a6f98cd98e540bdf27d21b2dc9fc84e09561df968d73c190b3081293d666be7d991761f4722450ac249a6eb4bcdf190c214630c85243a6c5970184e257c00c5a2a18bcd20195fd041887f001e06d4a6049e210cce62356f99853f3da2522d3d63739fbb2ff315e68ab4a05ba1e29e5b93808df51aeaced52539d7b956db2f229999ac09a6d4c2ef8714ef9d4783f538559f29af9d850bf71b001f231270874fb8dc60f1d1554f60fa69cd657112530e22563fcde26c3c86137e476a2fc1d8ba4a15dda42d4d8a20fbbad7586f472b716d6ea2ee30f1c111bdbb3db8e5e2d933a8\n\n# tcId = 14\n# s_len changed to 20\nmsg = 313233343030\nresult = invalid\nsig = 23e198d582d048874ce4e6e69f5a81234ca08be1fc9cf0f7be05454997fad87da8f05c2faf7285a7a9ca7aa50f772b8175479b7bec85919162b8a7eb7cd4c1b8f0aaa64a8f371e23ec2c3428d7d83411f24bbd4b80762a75fa0e5de468a71dbe9bac382b4072241e3c7085ed2b9e72ec3779c1f70bbd0f246834f3e81ebffee13312d133e1ddaeb58b84d1ac1b441f311ee1e2c9693e300862cdf5b4a5d820dfde870da22746be0b12dfb943780c0ba928c657c54bea0d84db37fe50f0965ceab905f2ec3ff177421b11c30e846ad93212485e7f6e52d7d51af1c96f31fef174ab38cfb1b1fb5961cfadac518a6a4991ff2d561a7d8dadc5ad430c94b40c04a297012f81e6e84ca02879fd82b73744c4372ec02f141ae6c4ce75595559f3f4cc9e4b7a7a6d93636487e34938082b3fd5f09366a062484d1820586a720a9618ec18d980c969a28d74c81fe4fe7bb61986769a89716c965a7f056aff60e9175527778210eae23e53e244b973b2452f40ab375222621a89e1f5f2abfe5039708f2a659553582f760f0d264f854840d069e8c4db0246738af1697b05980c1f53a1ba4eef8e08583781c13a93d03eb19db75e71bdd0602b91908a885b41f0b8d9588d6e05796c8a6f8d220922ef9bcdb026af9bb328ac7d96d4078205ba1abf00eea45b9c260e3b55da036864bf5bc0cc2d3944fdbcc7e64539a45238bb2061210514\n\n# tcId = 15\n# salt is all 0\nmsg = 313233343030\nresult = valid\nsig = 0147dc7e2712616f76c84caaa47f17f267954a0924bcd846fb3389202c059062f30b786dafab71fd7464caaec5a968f75b20fda1a4c074c89b2732baee615c6e88d1e2e2fad16bda01db395df1103e0d1796da2fdf9d9c8c1c776578e8acde7d97808deb83d0c4e5115de538b3f5a48ead7ac6b5076b12baf7db4aa68a091174020e5e4adf275702020e6eeb9d8c4500170dc5e2171ac370763f7b1000f805d924bbd80cec120446e9be5669181a8e4eb033ceac5278e7b80ddf97d1a58737f072957a221fc27cdd18aa0514b0811e967d5f0eca4f2553dea4760299c4db6347c9070759809247c48d035cfa06caeba20db6122cc70f81647e93f5fe63c4861f637c3623354f9c2f8bd2f9906b0860d0c81c05a0033d966323c8319c5633f537b9180166a2f15502b5e06dee09616f2589606e7229a0e6fc770261abd737c02cfeb833379d0d5b850a39d4587566dab90ca7a8331654532b589ab7aa20376f355aecc03c2b06149f2f9b4290d0ed304eea6947d235341455ccc04e91e3c56db5d1b74928c3451b5a9d3ab246ffaf7773b0d86f35400ad2ae02ec761ae675ba70d1a8dfceef2a8a70caa3e4aee8c98578bb8ef5a8e2570646d1e62ec2fcbef115ceed2c16cf944b4f175ab0899dca124683f3bf00dd0dee74c25dc4cc82e80d10e9a941845d9e174dbc9844941738eb22076a9f6253cf604d62346c14663bdbaf\n\n# tcId = 16\n# salt is all 1\nmsg = 313233343030\nresult = valid\nsig = 315a9a4ed7b0ea4db96b233c62a0e7bdd725da924ba2ab8e2f20ccadb2b5256bca0308cddcf739d1e6b33a859f03c550d65c78958f0eeabff625bce6c8ffe38b60afff13cf33866c35ebbfa85b70a3c592f74e47fd97b07f3a7c4f14e26e7be666ff64cfbd873cc06dff82da222dc135ff47f875ccd695ca8c64572a97b76ee7c772d9d07e4476fd4e945ab0146ace3f0c2fb98c34a066f053d93480d1c7725f858e459b0cba699093e8c315bbd6d1347b608b51906d44d49f106ed866e230785afb2a2002b82305bcdb9927ca266ae641a570d0b58f344b5e077501d6ec2fd69b3ebc80d7dce55590f4504fa809178d92b45aa69ec1b28fb69197991ef33dc9f4cd661fd6ae74eb99dfdd1ef122f12d04f7c7e624659fbcb2b987fd5fd25a104d735acf50f3ad070333e9cd4e659aaeb5dd28c86ef0680d0a6b526523e3e5a04cde0fa997c2a4a4744cd87170971ae3d903e0c085b6e62f8b715df76c7779a729c5d92382419804eb32b23fe4fcbaafc58ffe9475710e789a09cd9c3b8737032222d92d0a4cdbe53902d167d49f41e60c94ba8ba119499a5bcdd3eab544cc6226389c732d782c69c97b56c4b701a6bc032079150ae1af8a7ce5e0ac540781e84723e076911f4cc238e95689ac12d05676cc6da9219c491e2efa2af317407b5846fa852261181ccad659911c19931fae0f7e70e44d2b056a2f63d2f6983c9502\n\n# tcId = 17\n# byte 0 in zero padding modified\nmsg = 313233343030\nresult = invalid\nsig = 07c9a0c4ec1ec530aff99c7add866e0d065ad0d4b8c04b1937fbd821a204d11f47f61d934105028abd2f4630c5460d68ce33a02a95866f6b58bf6b3cd06a82e543620cef0e4261083c672f2289f3779bd085368d75a0ca002427b0997e1b13f0ae4e2a32d475c0ab3c7088219708c1b774577db73ddae7dd22d32741cc3815029596c0f654c45d6795d47b4c1007d25e026536124c121b5c1ad7ba59b8cc5ac7c288ebee89df9a7385676f4c928da96b2216505c164f527b0c85e4465809a2bb834d47e1f8221d62f4bcf86e92fe10b11dec6b0d8aa34cbe1a8fc43619f99971c85dc3eb4aa091a76055c41151964b5d65f593efa0dd6a82f076b60a71e11d88b40c5c5643e9fde6c05341d2e32bddba6050af72e8583f8ccc2605e7596f7206ef7b9b59829d911a9b5199d4438f642d2367d28b5d4be12cfc5280402d86712b6eed2ce2ebf37f62bcdeebf989256a1e19dde38f32e3980b8fac73ad9153ccc0f140c96413bf7899d8fda510d8315e7139e8f749f8ecea99afb63af081534cc9847d81e520b926b8f0bf1de4976c5f6de8b7cbbde644158bbd3807bb9fce36339a06d930c137230f52fbe546066bf6064ecdc76568d36ae706252dd4a9bddd3b2567ccdeb3bab11bbab3560507b5557a9c66aabf9e2cf3e42e3691ef77a3b29889a1b7e7287b908f1c281cbe2212a3d980bc3d312819fab824504167ac01c418\n\n# tcId = 18\n# byte 7 in zero padding modified\nmsg = 313233343030\nresult = invalid\nsig = 22e1bb23c2bef81ad373284aebaa714bd1a9aef8bc6730b66e73ff0f6649a17b2a57b3b14ee4dd0362f659b69c1528907ca7ac8a9e5017152073b06491b255a7d5b8f6909c18583d8d118ee32d3c31d7845c30c419b518575b47b6c632f2102c4fbc73c2ae5920d97587ddcb63eb922cdb68c00ad477e028049cac752e4101c364e11c61926bbbe731a7a09cd30c376ced8084bd1e9e7532793300f5d063faacd167f014e66f424a50e2329091a63861539327b664b019124fc3f3131c567426036b55ccd7a5e37c3cea52ed02ab9dfef0d4c08735d04aa32f11938c18c7ec8c126e90793f6f5462366c869c7178701e3ac87e68d7b8aab57e5750b798c89bd528edc2474627aa5f087682b9b652bd6d61455a2b7181e0c2eff78b89fbac1a63691a3c94c873d8ff6969c754d62e1d135e1a69276f978169ffb5495c6c26f77c9a9e9229d436abeb0f635ceb786e5ac52cb5b57bf6f0778b62021c5ebe358099a995197712ce187cfcf60da15c04382d2828b6422e1959445be219e9aad957e050bc5214e8b18e916eb5d1d6f7a7bcf64291f51922c5c41d053d50ae98ff3c3942fbd55168bb2c439835f79d1fcacb3b8f1e40bcb2d3eb1db774b07822a4e6ffd021a49fd9eeed2060a79c3674c7ba5f7ef6c909325bf53739da9b58c775edd9ef54d625f00b99bcbc5b2ff2934769a497597862c818428eada5058e5e988f41\n\n# tcId = 19\n# all bytes in zero padding modified\nmsg = 313233343030\nresult = invalid\nsig = 960e2cc16879708c9ae7329f118b3d9c8c7512f54411c7912c18e1b52fc9b644e72ab9f467c78069e2fd0156241b82b6677e34b782b7fb0094c67adb4827e050b0b3fcd1a050a6fc4e7045b3766dbc9a3f59116226ce2a2e4135e21697bf4560a32b385eb438e78b9adea06a5bd2fe268a1cfe763be160d0c5628fa009c870deb70787d514a78da0b505897afbf0905c3d9c2d849f8bdedbac1ad26f6fc34f74fada027f49972b33d03e9d82b04834a6500599d12d524473b4e8a8d1bc8e4402cc1e5224f62911cb0cc922513aeedae57de13c037b527e36771d555c27ad4c92359dad0f4617b22fe672f01f8967ee1d602f22fd40b6328ecd7698fa1bd8fd5358b5f430ff37904d607ddb45ceec4e66f8a4a12fe24221db24624457589b81159869c26088d426fad0a853cdbac650f4d1fafa913f98069a669e2f0c79ec84ee727dcbcaf233c7908955b98d6b5aeefbe8158b8e8e9ba60afdec7556f4278a78a84c6af3ff4c4bdc7ee06bea762db57e996e81d05ae3ec62e8d99a419c1ede6934ad1b6829d580643e16392d53d268ebb1f225c8011fabd908ce7e0c7b865f1e75290935b27a236a51f32ab43c827e249321cab4b202e02c09a747fd06468dd97906dababc0ce4e05863110945233e2138f5f8a3e4b994ac57424d9a3c1c7075836103ede5b63e2645be30c640c66cfc4ed4b26e76efd8e02f4de24699161c01\n\n# tcId = 20\n# first byte of hash h modified\nmsg = 313233343030\nresult = invalid\nsig = 492af926baf970e1cafe0062596f226f8b8c38bc1903a3754f83745cb321b86671411b9a96ff88ef68119ca39c8fe4599b703f6776151ef78",
@@ -3323,9 +3294,9 @@
     "e10812a6bb735bfb1f2ac3d74ea5da9\n\n# tcId = 35\n# first byte of masked_db changed to 0\nmsg = 313233343030\nresult = invalid\nsig = 290567b67c0a8c1c756f6f0c4b5157e1ab1c921af2d02d0ced12472404694c6a56549bb0cd3227c7f04e769c75b46569640f2504e2892ea270ad8bb102a001f7af1d1011d92e01c9bcbf284236151fda13a6072bf4da11f9263773967fdf3122a401e11511a04b633251516e8aed8de669a20223e0dd39a6b841bff40ba6af6934e9c9ca3fa2a3d277801e3483879640e16fbc5b8a5240e54d50b07c081f84d63b9ff9b24d703327a997f1a74098ae3e5a5a0c380d68b4a3437c7d5f33da1187e7b6ed5d9eadd1e1c2d60d6df0a0910e9f93e17f01bb2e643f451f36178a13193d057c0c8648a55002df72d1166771e1d9ae36dda2c6058bd9d2ab0a350be60b15a021a016f06dd6e6b9fc8834db10190b89bb880aa38e5dfb03bd122ea9b68ac13057c9f1aec75e90cef05602dbf4bc70d94ce7231265b3e846a2e2d00b53e8d6c04470125d07e782cf559c41d82f1e10113131d48f4ae091204ee81388af98722b17114a396764ea8a3852c1ad727de9742220cb3d111e0fe4de9a27c636e57f8343fc287d74cfa9e811762b4f9ff3715aea0a258baf4cedb89a22e1593eac18f34e83f9a34ed139158b6ad8d4b292a7e4d933b58bd6cd9277d93f67bda8f67be72fe32d1805fb33ac89ae2aa2864aa402ecbca8430bcd6d42b17fda76d13ee659a23a629bf4d0e49d5ff5e327ffd55584b254c90140269b226fe561516fbe\n\n# tcId = 36\n# last byte in em modified\nmsg = 313233343030\nresult = invalid\nsig = c7a3f33ebacd1b82e186709375be80d2eb75086bebffab34dce599b3e97f59903f04443b1062a6884a4360d92dd8646e1455e95b33dad16854f744c4acf3e9e36f85f830d3a8b75e583a828e253c2d62df5c5ad4374110d6dd85426d86894f35833f37a7433f234ef966f830249dbdbabde11602976c1afeb321dbc46e6c481290108e97cc7cec2f9d62a9a1d0f00a26afbc74d45f6f137880909fb5167da8b842894dd4c933eb1f7db3402179bf130595679e260f38c4a33e0b3e9f73191756f4463b6cd159ccb0b41c75f9f405244de0aa6592563b6f0d3e519582acb1edcca9cf89b91589911e9be178cc29d429721ae373a49addc23d72057c6709eb0eee81a60de406444ce5f00783884caaceb1e07a91de1fc6e2b88a0c9e28d6eeb6c965d4e7964b24b09130b1a2536e117ba1ad3e4eab1bfb84918382739d3a0ad75f271ac343b37224c8b1b86ad1a62250072f68212e0bf1c9a3715e1449d44ae471db4696310d9fc7a4148bdbc29d264ce4c4696f758d4df5543f71ca182b0f4ca36ce1c2df8b574ae3a08e59d0c014fdb44c24d7bbd9d59b39ea7fc269c2d2b2163188d6339209726471fe297548b27cd3b6e3c58ac7bdbe3a792d858268275c12029c28148c2e0563c52061ae83749819e61dddebbe5dbf07e9e2e07503799cbac3c879d8508cefc172bb997d1a3b109d737fbc1c52975704b6f1edb2ba044fab\n\n# tcId = 37\n# last byte in em modified\nmsg = 313233343030\nresult = invalid\nsig = 29d54fda4344d689e54fd3a4625660b994352159a0c045d2b7345e0a6fe4bac788d54d0cd63a13f2374b6f064ccbb379fcbc771126a6d6cf51ad1aa80584046f6b33e9f0eba434d08531f091e314fe8e4075f184b156a267abc3909ba90d5c3e96ea7b3f191e38c631251176334319479a275439a633b61d7197aa45f07837fde18f5e2c639863c1a7689e6f56fa0131ab50c8021ef24ae6d936fb3da4b7c4993de4de3d0da0da8a19f1787f3c2ffecb11e505a60e2716090f2081831ac778a11a4b26db77f7659ed66f00f0c57e478dfe34663496eec5434d8872d16a65f5efe12107ce39225773488dbb8847bfc144672615f8ba18daaf9b4ff0bb36d731e1306e1bc7644ed3aa5820642f7a15fc253ec9fad79ce7d811fbb1959cbe124ebcfbb9d30127f0761585a49c772e9181d47ef4488e6288d17d49e759d39adff61debaaac8bf8e1c5149e9160a40078eb8f8ce47bcc0aa5517db7bcdfa4e8e2fc9825e18824839a2c30fd1cdcef0779b0f7a5da9af8cd315deaa40187a5c4b5a6fa009e1d9e288552be9f6cce448fcca2f011557ea101d41267c5df8331f585315cf6e83f3081ce149ea4813dfd11b217f3924324f34975b275bad2c8b8cfc670e2a8345e28fe3c1f955d88f83422ffe6ce28d5273adc1b30f26b7c558ae7688cba8ab24971baa979de2480f31812b990e14d8859bcce323437c8290bb9b89aeb8c\n\n# tcId = 38\n# last byte in em modified\nmsg = 313233343030\nresult = invalid\nsig = 5905112430194b195a3698730332de7ee44cad62157ffb95f99aaa4ca39d972712ff27302a960d5dd5fcbfc3eb48d196697fd57aa83123d62030d27dcb7f481914aa20dcee0bde8dd070e4b5939c359f3b01e40a42b6c4c4f02ad64fb15da070e68f63cda98db297cd535b2ebd0404d02df3036ddc8add1f545a6b09c1dc1d9519854f258a478ae034d3416997ce939bc72206fdcf5d18bb46be8a3dd5f55dad95e1067dedfd7ebb4c05fd57bce7148bf374cad3af3af327878d27782659695459987838dfafc00d898743bba43db494894246366fae5d377c2e5d150c2cb061678147f3d2bd24641cb078f074f503f2bee7231283709dee766609b76fabc0d3d14c5db3543c12cc481972d9d01950c60d4de5f7c01e7b4b81763467f1b6a1bed4f06311defc24453053ade5a50c3dea0117456eb6adef4bbe8afd49d2c1f5152f80f7f76e72b2e2269d3080c1545cd8c7afb7981b60d63ad0c6b1f4deb6cfaa4e0db62684470ed4013581e497c3441c4e9b481d148c89b1872b7d8631b37520bdd900ffc13348c647a71cf52933e46184c5278e6752d9c2e97aadf29d57820eb99de2b050698932b5dfd50a581b3f80a2d39df9290cad87baab094e17c9ec340255ab855b15ce69aeda9080195be03d00a827b6f5f863c16558a407a49862c535bd24a911c4dbbaf2996b680b42ee562dd2f519123fefccbac1d2a343f254e8\n\n# tcId = 39\n# signature is 0\nmsg = 313233343030\nresult = invalid\nsig = 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\n\n# tcId = 40\n# signature is 1\nmsg = 313233343030\nresult = invalid\nsig = 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001\n\n# tcId = 41\n# signature is n-1\nmsg = 313233343030\nresult = invalid\nsig = c9a765c2661b4674cff3480e9a5e462ad0ad2fc9bc6fbef62847b3113d20991f653967971c28252753f5fbacce012c2a8ab592914d269efafa724fa4b920e340930c106f7b36f79cebf0e62e88e0e476888e9f0e22186acdb6c4523a232b65b4ff2cc22dc44f8a559527d79d7cd7dcf3773212f7bb9aa133c31165cc663690bf123d73923c838929ccafee59d6c7095b8d4a74baf2d192c9a4e87c4e12bc58013078b28a7789e82e9f31de1f4d6a2aa6e80632be8e4bdf263e8d49b09416fb19c488c07ad8af722ab79182b23028a71e065d02412a9eebc46d7d8f4e03d79238d8c0cb4a97a9a1200ebb6ec64042ebeccad9567526eeef12c17d94c1049c889970b96e94cc353172a268a49c5e8bee13c15b39dec44f2c7a1aa37a7a0b6f72290acada32b1d8af1fc3dc8a89487ba81347cbeb1350925d30f923958106b49959c871e7c1dba55da0772e362cf8621d78610868b894e16e5dfec96874a93a4cf379b47e7e318ce315066d70ee3938140a60148f205085cef8a7700ca3c53d52a5756a63b3b16f153062b61262a68496210c8be4ef3f9029ca0ea0e3b3a0d5d6d226edbbf44daf8f045dc286ded3c4ec4db6b45347079f33eaf98e3c95b4b60e79ef4a3093feec543703422ba74a118511c2193b54fe8b633866ed2c705ccbc6e7d9d3656809ec3d3356e7400a9648ec37505041e3e31af1c02eefe924a67047d2\n\n# tcId = 42\n# signature is n\nmsg = 313233343030\nresult = invalid\nsig = c9a765c2661b4674cff3480e9a5e462ad0ad2fc9bc6fbef62847b3113d20991f653967971c28252753f5fbacce012c2a8ab592914d269efafa724fa4b920e340930c106f7b36f79cebf0e62e88e0e476888e9f0e22186acdb6c4523a232b65b4ff2cc22dc44f8a559527d79d7cd7dcf3773212f7bb9aa133c31165cc663690bf123d73923c838929ccafee59d6c7095b8d4a74baf2d192c9a4e87c4e12bc58013078b28a7789e82e9f31de1f4d6a2aa6e80",
     "632be8e4bdf263e8d49b09416fb19c488c07ad8af722ab79182b23028a71e065d02412a9eebc46d7d8f4e03d79238d8c0cb4a97a9a1200ebb6ec64042ebeccad9567526eeef12c17d94c1049c889970b96e94cc353172a268a49c5e8bee13c15b39dec44f2c7a1aa37a7a0b6f72290acada32b1d8af1fc3dc8a89487ba81347cbeb1350925d30f923958106b49959c871e7c1dba55da0772e362cf8621d78610868b894e16e5dfec96874a93a4cf379b47e7e318ce315066d70ee3938140a60148f205085cef8a7700ca3c53d52a5756a63b3b16f153062b61262a68496210c8be4ef3f9029ca0ea0e3b3a0d5d6d226edbbf44daf8f045dc286ded3c4ec4db6b45347079f33eaf98e3c95b4b60e79ef4a3093feec543703422ba74a118511c2193b54fe8b633866ed2c705ccbc6e7d9d3656809ec3d3356e7400a9648ec37505041e3e31af1c02eefe924a67047d3\n\n# tcId = 43\n# prepending 0's to signature\nmsg = 313233343030\nresult = invalid\nsig = 00004a80cafbe2a6095f8e8663f6289878514d7ee7daba0c1b0a077cefb333cacdf7c116ab89b0a01cab3161c68cac92a08aae7d117c9a3416d67365621da3380a85ff34a7a3b512846048acd1ec5957af942721c241a180a5dc5d8f6f6fe54d4d9fcb3709cde37081e2233b4fffa201d2029241932da170a5bad0d927a803a7f6289fc9f7b1d41cc1a6c94cbf588d5492b363920d0c98404f5da9eb9457648e2a4e9a034b2e2328c7f8c0e794771641a981df765887b5ba19b769156b375535911e1a2da68bb6a37eaa0ef8dded4ce3eac5caff4e8dc357703f0409d00baeedf3fbcbd6895dd3938e1f03dd9f131f9c979e22e4fcbea0c58721bc72d1f4976e93fc1a7649a23745c0310181031ac34b2200dfb4e8fe9bd4cdb52a23c31416745521aa4861eaea7dec4ea2c18ae9f75fa9d36c9b61bdc4185e434f8cb091cd731607b749a3990585cbbea2b1c0e0fff4f589a547d320bc7923b8a6b594c5866095df9c914cca80cd6c0e9aa3d691e2607f9de64322031ccfed04d9c805226cb476d3246d6caa1b04c63372a77668d5edf06365827b80391a6abd66010e8e1b873bd83db4dcc99444e109efa2414c6e5319f30a718eb43a1256b2142afa2382316e37aebde32da5bfec93e89d2adc39f62aca25a2289933a7cd8234d72a9b3c6a001d27560f8c8a2d9a233bac0b519b34f4f79288ea2cb08a87242953ac24ea144143\n\n# tcId = 44\n# appending 0's to signature\nmsg = 313233343030\nresult = invalid\nsig = 4a80cafbe2a6095f8e8663f6289878514d7ee7daba0c1b0a077cefb333cacdf7c116ab89b0a01cab3161c68cac92a08aae7d117c9a3416d67365621da3380a85ff34a7a3b512846048acd1ec5957af942721c241a180a5dc5d8f6f6fe54d4d9fcb3709cde37081e2233b4fffa201d2029241932da170a5bad0d927a803a7f6289fc9f7b1d41cc1a6c94cbf588d5492b363920d0c98404f5da9eb9457648e2a4e9a034b2e2328c7f8c0e794771641a981df765887b5ba19b769156b375535911e1a2da68bb6a37eaa0ef8dded4ce3eac5caff4e8dc357703f0409d00baeedf3fbcbd6895dd3938e1f03dd9f131f9c979e22e4fcbea0c58721bc72d1f4976e93fc1a7649a23745c0310181031ac34b2200dfb4e8fe9bd4cdb52a23c31416745521aa4861eaea7dec4ea2c18ae9f75fa9d36c9b61bdc4185e434f8cb091cd731607b749a3990585cbbea2b1c0e0fff4f589a547d320bc7923b8a6b594c5866095df9c914cca80cd6c0e9aa3d691e2607f9de64322031ccfed04d9c805226cb476d3246d6caa1b04c63372a77668d5edf06365827b80391a6abd66010e8e1b873bd83db4dcc99444e109efa2414c6e5319f30a718eb43a1256b2142afa2382316e37aebde32da5bfec93e89d2adc39f62aca25a2289933a7cd8234d72a9b3c6a001d27560f8c8a2d9a233bac0b519b34f4f79288ea2cb08a87242953ac24ea1441430000\n\n# tcId = 45\n# truncated signature\nmsg = 313233343030\nresult = invalid\nsig = 4a80cafbe2a6095f8e8663f6289878514d7ee7daba0c1b0a077cefb333cacdf7c116ab89b0a01cab3161c68cac92a08aae7d117c9a3416d67365621da3380a85ff34a7a3b512846048acd1ec5957af942721c241a180a5dc5d8f6f6fe54d4d9fcb3709cde37081e2233b4fffa201d2029241932da170a5bad0d927a803a7f6289fc9f7b1d41cc1a6c94cbf588d5492b363920d0c98404f5da9eb9457648e2a4e9a034b2e2328c7f8c0e794771641a981df765887b5ba19b769156b375535911e1a2da68bb6a37eaa0ef8dded4ce3eac5caff4e8dc357703f0409d00baeedf3fbcbd6895dd3938e1f03dd9f131f9c979e22e4fcbea0c58721bc72d1f4976e93fc1a7649a23745c0310181031ac34b2200dfb4e8fe9bd4cdb52a23c31416745521aa4861eaea7dec4ea2c18ae9f75fa9d36c9b61bdc4185e434f8cb091cd731607b749a3990585cbbea2b1c0e0fff4f589a547d320bc7923b8a6b594c5866095df9c914cca80cd6c0e9aa3d691e2607f9de64322031ccfed04d9c805226cb476d3246d6caa1b04c63372a77668d5edf06365827b80391a6abd66010e8e1b873bd83db4dcc99444e109efa2414c6e5319f30a718eb43a1256b2142afa2382316e37aebde32da5bfec93e89d2adc39f62aca25a2289933a7cd8234d72a9b3c6a001d27560f8c8a2d9a233bac0b519b34f4f79288ea2cb08a87242953ac24ea14\n\n# tcId = 46\n# empty signature\nmsg = 313233343030\nresult = invalid\nsig = \n\n",
 };
-static const size_t kLen83 = 351167;
+static const size_t kLen81 = 351167;
 
-static const char *kData83[] = {
+static const char *kData81[] = {
     "# Imported from Wycheproof's rsa_pss_misc_test.json.\n# This file is generated by convert_wycheproof.go. Do not edit by hand.\n#\n# Algorithm: RSASSA-PSS\n# Generator version: 0.4.14\n\n[e = 10001]\n[keyAsn = 3082010a0282010100bb0d4124c20130688b8419fabecc427d946c5096dcf69ecb0eb69fcf5aed15d7e1e5fe4e34fbe26f8b244aa3f088d546a00a531464ba4b8980bcc4d5e54bcc20e1a51afa9044f7fdecbc6edb751b5a5fa7ab403a04e5f77ba7865dd6d211da0afa71262a77a63d9c06e8b00b616ca15f11ea5b4948973864183f570347570553e3878376ca4f7536ad5afac10c0a7b34a5c11f8cf16115fbaeb4b323b1ad6f75c7ec3b954891cab2611cf1768cec983c1717c57f67676d721a955bdbbc216a3345bb31d7d63e06bdac96a6b991ba1e0113d01e48c77ab327d36b426c2f8fe4825a37877425885c927e92423b6977fc304122a2c397cb74845fe9961dba22c1a70203010001]\n[keyDer = 30820122300d06092a864886f70d01010105000382010f003082010a0282010100bb0d4124c20130688b8419fabecc427d946c5096dcf69ecb0eb69fcf5aed15d7e1e5fe4e34fbe26f8b244aa3f088d546a00a531464ba4b8980bcc4d5e54bcc20e1a51afa9044f7fdecbc6edb751b5a5fa7ab403a04e5f77ba7865dd6d211da0afa71262a77a63d9c06e8b00b616ca15f11ea5b4948973864183f570347570553e3878376ca4f7536ad5afac10c0a7b34a5c11f8cf16115fbaeb4b323b1ad6f75c7ec3b954891cab2611cf1768cec983c1717c57f67676d721a955bdbbc216a3345bb31d7d63e06bdac96a6b991ba1e0113d01e48c77ab327d36b426c2f8fe4825a37877425885c927e92423b6977fc304122a2c397cb74845fe9961dba22c1a70203010001]\n[keysize = 2048]\n[mgf = MGF1]\n[mgfSha = SHA-1]\n[n = 0bb0d4124c20130688b8419fabecc427d946c5096dcf69ecb0eb69fcf5aed15d7e1e5fe4e34fbe26f8b244aa3f088d546a00a531464ba4b8980bcc4d5e54bcc20e1a51afa9044f7fdecbc6edb751b5a5fa7ab403a04e5f77ba7865dd6d211da0afa71262a77a63d9c06e8b00b616ca15f11ea5b4948973864183f570347570553e3878376ca4f7536ad5afac10c0a7b34a5c11f8cf16115fbaeb4b323b1ad6f75c7ec3b954891cab2611cf1768cec983c1717c57f67676d721a955bdbbc216a3345bb31d7d63e06bdac96a6b991ba1e0113d01e48c77ab327d36b426c2f8fe4825a37877425885c927e92423b6977fc304122a2c397cb74845fe9961dba22c1a7]\n[sLen = 0]\n[sha = SHA-1]\n\n# tcId = 1\nmsg = 313233343030\nresult = acceptable\nsig = 88f4676b502e365dfd82805ac1db27d1107d1516431ab4f71107b62625b6275af4a5dbfd8314fae255820c0cb577ee2457f510851d2678e4ed3e6839848aca8b67c9ce52c5bf57a01b6683828d03470034b136e6ab1914adbb1d918fdc31f7cef6f44b0b0ba0dbd6c1d3c8d7699ce374dc86c28beb3bee8f81f41162344e688af0d91297da0dd5e8104a5440add89bdc6c05d20a164c0f079b78654f038d443743f94bc45762501034a32b5d05bb86e75dd9a171c81dbe43edf50b2e1fc24297375331d78a8f0399d4aebbeeed911f6d964049e67d89eec0e95443af2ceb37125ea8431cbad2d8416fc15fb9cbed9142fb8cb06dc7ceafac056cc1f6696e3d93\n# The key for this test vector uses a weak hash function.\n\n[e = 10001]\n[keyAsn = 3082010a0282010100bb0d4124c20130688b8419fabecc427d946c5096dcf69ecb0eb69fcf5aed15d7e1e5fe4e34fbe26f8b244aa3f088d546a00a531464ba4b8980bcc4d5e54bcc20e1a51afa9044f7fdecbc6edb751b5a5fa7ab403a04e5f77ba7865dd6d211da0afa71262a77a63d9c06e8b00b616ca15f11ea5b4948973864183f570347570553e3878376ca4f7536ad5afac10c0a7b34a5c11f8cf16115fbaeb4b323b1ad6f75c7ec3b954891cab2611cf1768cec983c1717c57f67676d721a955bdbbc216a3345bb31d7d63e06bdac96a6b991ba1e0113d01e48c77ab327d36b426c2f8fe4825a37877425885c927e92423b6977fc304122a2c397cb74845fe9961dba22c1a70203010001]\n[keyDer = 30820122300d06092a864886f70d01010105000382010f003082010a0282010100bb0d4124c20130688b8419fabecc427d946c5096dcf69ecb0eb69fcf5aed15d7e1e5fe4e34fbe26f8b244aa3f088d546a00a531464ba4b8980bcc4d5e54bcc20e1a51afa9044f7fdecbc6edb751b5a5fa7ab403a04e5f77ba7865dd6d211da0afa71262a77a63d9c06e8b00b616ca15f11ea5b4948973864183f570347570553e3878376ca4f7536ad5afac10c0a7b34a5c11f8cf16115fbaeb4b323b1ad6f75c7ec3b954891cab2611cf1768cec983c1717c57f67676d721a955bdbbc216a3345bb31d7d63e06bdac96a6b991ba1e0113d01e48c77ab327d36b426c2f8fe4825a37877425885c927e92423b6977fc304122a2c397cb74845fe9961dba22c1a70203010001]\n[keysize = 2048]\n[mgf = MGF1]\n[mgfSha = SHA-1]\n[n = 0bb0d4124c20130688b8419fabecc427d946c5096dcf69ecb0eb69fcf5aed15d7e1e5fe4e34fbe26f8b244aa3f088d546a00a531464ba4b8980bcc4d5e54bcc20e1a51afa9044f7fdecbc6edb751b5a5fa7ab403a04e5f77ba7865dd6d211da0afa71262a77a63d9c06e8b00b616ca15f11ea5b4948973864183f570347570553e3878376ca4f7536ad5afac10c0a7b34a5c11f8cf16115fbaeb4b323b1ad6f75c7ec3b954891cab2611cf1768cec983c1717c57f67676d721a955bdbbc216a3345bb31d7d63e06bdac96a6b991ba1e0113d01e48c77ab327d36b426c2f8fe4825a37877425885c927e92423b6977fc304122a2c397cb74845fe9961dba22c1a7]\n[sLen = 20]\n[sha = SHA-1]\n\n# tcId = 2\nmsg = 313233343030\nresult = acceptable\nsig = a85f06875b529ca61b60df404652e79a499f81a0591bafa3377b80d8e300cbae679a941832eb5569fb88c9f8629e3c2ebf5f32ffe43767d1eaf59016f5904de3f7d39cb470dfc5fb5678fcd7b55d1a30f716b7f04c2568f3c1a2bc780e974a363adc622e679902e966af183d874b35396423d1a263bb1c6e7330179671644c6953cd795a19e2fe4208e7da5244e4760dde142313a781a55b0baf866dc158812a723d74911c8717a512d722669193f8883b1cffac98de8473b7a77198e20560c0c21207e00fc7dd14385fabdd530d568d143ddbee8d1b502f7b194b9827eee9472f2be8b2a541124405582bff393412f6aba9c42e5824d7c24bdd4d82d925d066\n# The key for this test vector uses a weak hash function.\n\n[e = 10001]\n[keyAsn = 3082010a0282010100bb0d4124c20130688b8419fabecc427d946c5096dcf69ecb0eb69fcf5aed15d7e1e5fe4e34fbe26f8b244aa3f088d546a00a531464ba4b8980bcc4d5e54bcc20e1a51afa9044f7fdecbc6edb751b5a5fa7ab403a04e5f77ba7865dd6d211da0afa71262a77a63d9c06e8b00b616ca15f11ea5b4948973864183f570347570553e3878376ca4f7536ad5afac10c0a7b34a5c11f8cf16115fbaeb4b323b1ad6f75c7ec3b954891cab2611cf1768cec983c1717c57f67676d721a955bdbbc216a3345bb31d7d63e06bdac96a6b991ba1e0113d01e48c77ab327d36b426c2f8fe4825a37877425885c927e92423b6977fc304122a2c397cb74845fe9961dba22c1a70203010001]\n[keyDer = 30820122300d06092a864886f70d01010105000382010f003082010a0282010100bb0d4124c20130688b8419fabecc427d946c5096dcf69ecb0eb69fcf5aed15d7e1e5fe4e34fbe26f8b244aa3f088d546a00a531464ba4b8980bcc4d5e54bcc20e1a51afa9044f7fdecbc6edb751b5a5fa7ab403a04e5f77ba7865dd6d211da0afa71262a77a63d9c06e8b00b616ca15f11ea5b4948973864183f570347570553e3878376ca4f7536ad5afac10c0a7b34a5c11f8cf16115fbaeb4b323b1ad6f75c7ec3b954891cab2611cf1768cec983c1717c57f67676d721a955bdbbc216a3345bb31d7d63e06bdac96a6b991ba1e0113d01e48c77ab327d36b426c2f8fe4825a37877425885c927e92423b6977fc304122a2c397cb74845fe9961dba22c1a70203010001]\n[keysize = 2048]\n[mgf = MGF1]\n[mgfSha = SHA-1]\n[n = 0bb0d4124c20130688b8419fabecc427d946c5096dcf69ecb0eb69fcf5aed15d7e1e5fe4e34fbe26f8b244aa3f088d546a00a531464ba4b8980bcc4d5e54bcc20e1a51afa9044f7fdecbc6edb751b5a5fa7ab403a04e5f77ba7865dd6d211da0afa71262a77a63d9c06e8b00b616ca15f11ea5b4948973864183f570347570553e3878376ca4f7536ad5afac10c0a7b34a5c11f8cf16115fbaeb4b323b1ad6f75c7ec3b954891cab2611cf1768cec983c1717c57f67676d721a955bdbbc216a3345bb31d7d63e06bdac96a6b991ba1e0113d01e48c77ab327d36b426c2f8fe4825a37877425885c927e92423b6977fc304122a2c397cb74845fe9961dba22c1a7]\n[sLen = 28]\n[sha = SHA-1]\n\n# tcId = 3\nmsg = 313233343030\nresult = acceptable\nsig = 8189776015db3a51805f6bf71aa1214ee07f7e385510ea95a0d4c3d53bc0d59f07ca39af40fe8c3138cf6f4ba0f72a3397df6ffda9cf49e467a34d92ec772f6b6d51d52cef86d16f74bea798a85aac873cd4d5d3a0fbbb618998f4b2b691bc14fe1f235601c51a76c4eacd1a33975d9c3cdf1daf579fb943556f0febd948d1b1e15cc85edf486b00499fa9032b6b801b5ae4454c94d7f89dc1fa6dd6a927969b14a4bdf51caf7cc8a87ae05d41e1933849acc5fcb0f478f1e23a0f476372837ade82f8ed1809e2245062009b8e683f563029ddb9892a398dbc2df594c12fb4a0f0c551abdf2fee4cb325fe9800ea741f7b2f2b4db370939bc7e3ea95ab539b10\n# The key for this test vector uses a weak hash function.\n\n[e = 10001]\n[keyAsn = 3082010a0282010100bb0d4124c20130688b8419fabecc427d946c5096dcf69ecb0eb69fcf5aed15d7e1e5fe4e34fbe26f8b244aa3f088d546a00a531464ba4b8980bcc4d5e54bcc20e1a51afa9044f7fdecbc6edb751b5a5fa7ab403a04e5f77ba7865dd6d211da0afa71262a77a63d9c06e8b00b616ca15f11ea5b4948973864183f570347570553e3878376ca4f7536ad5afac10c0a7b34a5c11f8cf16115fbaeb4b323b1ad6f75c7ec3b954891cab2611cf1768cec983c1717c57f67676d721a955bdbbc216a3345bb31d7d63e06bdac96a6b991ba1e0113d01e48c77ab327d36b426c2f8fe4825a37877425885c927e92423b6977fc304122a2c397cb74845fe9961dba22c1a70203010001]\n[keyDer = 30820122300d06092a864886f70d01010105000382010f003082010a0282010100bb0d4124c20130688b8419fabecc427d946c5096dcf69ecb0eb69fcf5aed15d7e1e5fe4e34fbe26f8b244aa3f088d546a00a531464ba4b8980bcc4d5e54bcc20e1a51afa9044f7fdecbc6edb751b5a5fa7ab403a04e5f77ba7865dd6d211da0afa71262a77a63d9c06e8b00",
     "b616ca15f11ea5b4948973864183f570347570553e3878376ca4f7536ad5afac10c0a7b34a5c11f8cf16115fbaeb4b323b1ad6f75c7ec3b954891cab2611cf1768cec983c1717c57f67676d721a955bdbbc216a3345bb31d7d63e06bdac96a6b991ba1e0113d01e48c77ab327d36b426c2f8fe4825a37877425885c927e92423b6977fc304122a2c397cb74845fe9961dba22c1a70203010001]\n[keysize = 2048]\n[mgf = MGF1]\n[mgfSha = SHA-1]\n[n = 0bb0d4124c20130688b8419fabecc427d946c5096dcf69ecb0eb69fcf5aed15d7e1e5fe4e34fbe26f8b244aa3f088d546a00a531464ba4b8980bcc4d5e54bcc20e1a51afa9044f7fdecbc6edb751b5a5fa7ab403a04e5f77ba7865dd6d211da0afa71262a77a63d9c06e8b00b616ca15f11ea5b4948973864183f570347570553e3878376ca4f7536ad5afac10c0a7b34a5c11f8cf16115fbaeb4b323b1ad6f75c7ec3b954891cab2611cf1768cec983c1717c57f67676d721a955bdbbc216a3345bb31d7d63e06bdac96a6b991ba1e0113d01e48c77ab327d36b426c2f8fe4825a37877425885c927e92423b6977fc304122a2c397cb74845fe9961dba22c1a7]\n[sLen = 32]\n[sha = SHA-1]\n\n# tcId = 4\nmsg = 313233343030\nresult = acceptable\nsig = 49e060ccb577eb614274db1ad34249490d1cab2b8d3ae2b708b93c8a8ead302e6efb8d26644d5caa5f62b89f3949942d07470c37d8878eb5cc9c154701feea36ac66d0a9723fb316f7ad6226f634346c17ef47b3e19c7b9979d60118959a5b35cc188200c8f9b2723046f480d95a9a0af07e648225dc35114d8199a431ccf4f44fe8e8c9c0130aa819aeecb09f95eea8f6d89981c05cc82716fe7ea499c55460c95e99871aba1ad3ac3bdbc96850863b23e3e6659ca346ee0e186ad717a8ec9c7a548d8fed0e7b79f896722659ec7e1335de12f361d5e6c65c791441c3c0020de48e60f200c3ab79fe0179513b2c1592e2f0064ba4799f6a0eea199da77d174a\n# The key for this test vector uses a weak hash function.\n\n[e = 10001]\n[keyAsn = 3082010a0282010100bb0d4124c20130688b8419fabecc427d946c5096dcf69ecb0eb69fcf5aed15d7e1e5fe4e34fbe26f8b244aa3f088d546a00a531464ba4b8980bcc4d5e54bcc20e1a51afa9044f7fdecbc6edb751b5a5fa7ab403a04e5f77ba7865dd6d211da0afa71262a77a63d9c06e8b00b616ca15f11ea5b4948973864183f570347570553e3878376ca4f7536ad5afac10c0a7b34a5c11f8cf16115fbaeb4b323b1ad6f75c7ec3b954891cab2611cf1768cec983c1717c57f67676d721a955bdbbc216a3345bb31d7d63e06bdac96a6b991ba1e0113d01e48c77ab327d36b426c2f8fe4825a37877425885c927e92423b6977fc304122a2c397cb74845fe9961dba22c1a70203010001]\n[keyDer = 30820122300d06092a864886f70d01010105000382010f003082010a0282010100bb0d4124c20130688b8419fabecc427d946c5096dcf69ecb0eb69fcf5aed15d7e1e5fe4e34fbe26f8b244aa3f088d546a00a531464ba4b8980bcc4d5e54bcc20e1a51afa9044f7fdecbc6edb751b5a5fa7ab403a04e5f77ba7865dd6d211da0afa71262a77a63d9c06e8b00b616ca15f11ea5b4948973864183f570347570553e3878376ca4f7536ad5afac10c0a7b34a5c11f8cf16115fbaeb4b323b1ad6f75c7ec3b954891cab2611cf1768cec983c1717c57f67676d721a955bdbbc216a3345bb31d7d63e06bdac96a6b991ba1e0113d01e48c77ab327d36b426c2f8fe4825a37877425885c927e92423b6977fc304122a2c397cb74845fe9961dba22c1a70203010001]\n[keysize = 2048]\n[mgf = MGF1]\n[mgfSha = SHA-1]\n[n = 0bb0d4124c20130688b8419fabecc427d946c5096dcf69ecb0eb69fcf5aed15d7e1e5fe4e34fbe26f8b244aa3f088d546a00a531464ba4b8980bcc4d5e54bcc20e1a51afa9044f7fdecbc6edb751b5a5fa7ab403a04e5f77ba7865dd6d211da0afa71262a77a63d9c06e8b00b616ca15f11ea5b4948973864183f570347570553e3878376ca4f7536ad5afac10c0a7b34a5c11f8cf16115fbaeb4b323b1ad6f75c7ec3b954891cab2611cf1768cec983c1717c57f67676d721a955bdbbc216a3345bb31d7d63e06bdac96a6b991ba1e0113d01e48c77ab327d36b426c2f8fe4825a37877425885c927e92423b6977fc304122a2c397cb74845fe9961dba22c1a7]\n[sLen = 48]\n[sha = SHA-1]\n\n# tcId = 5\nmsg = 313233343030\nresult = acceptable\nsig = 2d4216f277e50736d41cda2191faa97fa99d9e325b34926a363f8dd73c901153f087ac206cf3cb25001dffbb6200b7b35565b466f46f23aafb872e5c39d26156d36d1bab19382e5f15873022e64b58c129d38eee8126130f6210fa5ffb697bb3dcddbd99a9b60b53b25d094f9ec9b7a1cdcd0cc74a3ac478c7a34cc22c7e30e952bfac85638678b8aa2341fb1f108114d43dc849d91a3b174b0dd62f6dfb96459d4c76ab5fb6479d68d690d4a5c120c42a4bf82a8a7e9e7aba127fd5fda3f4c6ffbf2e4eeb72ee695cfeb286ec99e7cee8cf300e4e149cf17e70cf9f2bdb6421087916e945bca42a70a88b1a87e7ca3ac0a1bf2ab1a65ebab7726994a6c9597e\n# The key for this test vector uses a weak hash function.\n\n[e = 10001]\n[keyAsn = 3082010a0282010100bb0d4124c20130688b8419fabecc427d946c5096dcf69ecb0eb69fcf5aed15d7e1e5fe4e34fbe26f8b244aa3f088d546a00a531464ba4b8980bcc4d5e54bcc20e1a51afa9044f7fdecbc6edb751b5a5fa7ab403a04e5f77ba7865dd6d211da0afa71262a77a63d9c06e8b00b616ca15f11ea5b4948973864183f570347570553e3878376ca4f7536ad5afac10c0a7b34a5c11f8cf16115fbaeb4b323b1ad6f75c7ec3b954891cab2611cf1768cec983c1717c57f67676d721a955bdbbc216a3345bb31d7d63e06bdac96a6b991ba1e0113d01e48c77ab327d36b426c2f8fe4825a37877425885c927e92423b6977fc304122a2c397cb74845fe9961dba22c1a70203010001]\n[keyDer = 30820122300d06092a864886f70d01010105000382010f003082010a0282010100bb0d4124c20130688b8419fabecc427d946c5096dcf69ecb0eb69fcf5aed15d7e1e5fe4e34fbe26f8b244aa3f088d546a00a531464ba4b8980bcc4d5e54bcc20e1a51afa9044f7fdecbc6edb751b5a5fa7ab403a04e5f77ba7865dd6d211da0afa71262a77a63d9c06e8b00b616ca15f11ea5b4948973864183f570347570553e3878376ca4f7536ad5afac10c0a7b34a5c11f8cf16115fbaeb4b323b1ad6f75c7ec3b954891cab2611cf1768cec983c1717c57f67676d721a955bdbbc216a3345bb31d7d63e06bdac96a6b991ba1e0113d01e48c77ab327d36b426c2f8fe4825a37877425885c927e92423b6977fc304122a2c397cb74845fe9961dba22c1a70203010001]\n[keysize = 2048]\n[mgf = MGF1]\n[mgfSha = SHA-1]\n[n = 0bb0d4124c20130688b8419fabecc427d946c5096dcf69ecb0eb69fcf5aed15d7e1e5fe4e34fbe26f8b244aa3f088d546a00a531464ba4b8980bcc4d5e54bcc20e1a51afa9044f7fdecbc6edb751b5a5fa7ab403a04e5f77ba7865dd6d211da0afa71262a77a63d9c06e8b00b616ca15f11ea5b4948973864183f570347570553e3878376ca4f7536ad5afac10c0a7b34a5c11f8cf16115fbaeb4b323b1ad6f75c7ec3b954891cab2611cf1768cec983c1717c57f67676d721a955bdbbc216a3345bb31d7d63e06bdac96a6b991ba1e0113d01e48c77ab327d36b426c2f8fe4825a37877425885c927e92423b6977fc304122a2c397cb74845fe9961dba22c1a7]\n[sLen = 64]\n[sha = SHA-1]\n\n# tcId = 6\nmsg = 313233343030\nresult = acceptable\nsig = b66294f7b1e1a673e566c59f9abf264860200763860cbd666e476dbbd61fc39136353ab74299cbfb64bff88ed51cf9a20694e832fd97235d31ec6aef386ad44487d3753cc1224dbd59a34babc3eb8b538c10705775a27fa88ae35c0f618e0b3c6b91d999fdec5b86f15d1e462feea3af6fa12a5234d526e82039e1df013ef1cc6056221b81d755a13b70c618cefc6dedcc3361b5a910fcd4a812ae48382fddd75d5b51ca3d243dac021aeeaf6e2bd4aed75d7ff6d81c9aaee2356e3d12192b5e75d006b124275b0daec06b5af29b0d3e85f057db59db4b887fdd2bd0a33865eb87e8f3e37b4d8621e2e41c760a973f1ba03722d42bf5b921380b71fea949cf0b\n# The key for this test vector uses a weak hash function.\n\n[e = 10001]\n[keyAsn = 3082010a0282010100bb0d4124c20130688b8419fabecc427d946c5096dcf69ecb0eb69fcf5aed15d7e1e5fe4e34fbe26f8b244aa3f088d546a00a531464ba4b8980bcc4d5e54bcc20e1a51afa9044f7fdecbc6edb751b5a5fa7ab403a04e5f77ba7865dd6d211da0afa71262a77a63d9c06e8b00b616ca15f11ea5b4948973864183f570347570553e3878376ca4f7536ad5afac10c0a7b34a5c11f8cf16115fbaeb4b323b1ad6f75c7ec3b954891cab2611cf1768cec983c1717c57f67676d721a955bdbbc216a3345bb31d7d63e06bdac96a6b991ba1e0113d01e48c77ab327d36b426c2f8fe4825a37877425885c927e92423b6977fc304122a2c397cb74845fe9961dba22c1a70203010001]\n[keyDer = 30820122300d06092a864886f70d01010105000382010f003082010a0282010100bb0d4124c20130688b8419fabecc427d946c5096dcf69ecb0eb69fcf5aed15d7e1e5fe4e34fbe26f8b244aa3f088d546a00a531464ba4b8980bcc4d5e54bcc20e1a51afa9044f7fdecbc6edb751b5a5fa7ab403a04e5f77ba7865dd6d211da0afa71262a77a63d9c06e8b00b616ca15f11ea5b4948973864183f570347570553e3878376ca4f7536ad5afac10c0a7b34a5c11f8cf16115fbaeb4b323b1ad6f75c7ec3b954891cab2611cf1768cec983c1717c57f67676d721a955bdbbc216a3345bb31d7d63e06bdac96a6b991ba1e0113d01e48c77ab327d36b426c2f8fe4825a37877425885c927e92423b6977fc304122a2c397cb74845fe9961dba22c1a70203010001]\n[keysize = 2048]\n[mgf = MGF1]\n[mgfSha = SHA-224]\n[n = 0bb0d4124c20130688b8419fabecc427d946c5096dcf69ecb0eb69fcf5aed15d7e1e5fe4e34fbe26f8b244aa3f088d546a00a531464ba4b8980bcc4d5e54bcc20e1a51afa9044f7fdecbc6edb751b5a5fa7ab403a04e5f77ba7865dd6d211da0afa71262a77a63d9c06e8b00b616ca15f11ea5b4948973864183f570347570553e3878376ca4f7536ad5afac10c0a7b34a5c11f8cf16115fbaeb4b323b1ad6f75c7ec3b954891cab2611cf1768cec983c1717c57f67676d721a955bdbbc216a3345bb31d7d63e06bdac96a6b991ba1e0113d01e48c77ab327d36b426c2f8fe4825a37877425885c927e92423b6977fc304122a2c397cb74845fe9961dba22c1a7]\n[sLen = 0]\n[sha = SHA-1]\n\n# tcId = 7\nmsg = 313233343030\nresult = acceptable\nsig = 513db066bc72893653d1f7fa3f19546281b6239bc8390c4984999121a1dd75aa94004c3874",
     "beb6327205f2ecf8f6eb93eab018de3a6c71ea8b2d3a628188d4aa2b1cd6bab169f3e78229e4383ab68aea4635935e0eabbe9dc1d671416945f1867782900da53451369ccbd548c8f756e7221ee7e1ff28dba099b8f28d1f3aad2ef8bd816a53dfa9bc88e4e3983b0de955e647caf71a607ffea20a9677e687cdda29219c7daa839276de3fe436b96b2c68db64c170ab9e300ced00e72a9c0fdc321a517aa113cdec8e2713f8b54ee2d78820f6f86b2f6e6222493d15cbe8ee9815ef2e7ca9a6ceb55955049db35b1af188b99f2c4bce38f130a75780f41b852917\n# The key for this test vector uses a weak hash function.\n\n[e = 10001]\n[keyAsn = 3082010a0282010100bb0d4124c20130688b8419fabecc427d946c5096dcf69ecb0eb69fcf5aed15d7e1e5fe4e34fbe26f8b244aa3f088d546a00a531464ba4b8980bcc4d5e54bcc20e1a51afa9044f7fdecbc6edb751b5a5fa7ab403a04e5f77ba7865dd6d211da0afa71262a77a63d9c06e8b00b616ca15f11ea5b4948973864183f570347570553e3878376ca4f7536ad5afac10c0a7b34a5c11f8cf16115fbaeb4b323b1ad6f75c7ec3b954891cab2611cf1768cec983c1717c57f67676d721a955bdbbc216a3345bb31d7d63e06bdac96a6b991ba1e0113d01e48c77ab327d36b426c2f8fe4825a37877425885c927e92423b6977fc304122a2c397cb74845fe9961dba22c1a70203010001]\n[keyDer = 30820122300d06092a864886f70d01010105000382010f003082010a0282010100bb0d4124c20130688b8419fabecc427d946c5096dcf69ecb0eb69fcf5aed15d7e1e5fe4e34fbe26f8b244aa3f088d546a00a531464ba4b8980bcc4d5e54bcc20e1a51afa9044f7fdecbc6edb751b5a5fa7ab403a04e5f77ba7865dd6d211da0afa71262a77a63d9c06e8b00b616ca15f11ea5b4948973864183f570347570553e3878376ca4f7536ad5afac10c0a7b34a5c11f8cf16115fbaeb4b323b1ad6f75c7ec3b954891cab2611cf1768cec983c1717c57f67676d721a955bdbbc216a3345bb31d7d63e06bdac96a6b991ba1e0113d01e48c77ab327d36b426c2f8fe4825a37877425885c927e92423b6977fc304122a2c397cb74845fe9961dba22c1a70203010001]\n[keysize = 2048]\n[mgf = MGF1]\n[mgfSha = SHA-224]\n[n = 0bb0d4124c20130688b8419fabecc427d946c5096dcf69ecb0eb69fcf5aed15d7e1e5fe4e34fbe26f8b244aa3f088d546a00a531464ba4b8980bcc4d5e54bcc20e1a51afa9044f7fdecbc6edb751b5a5fa7ab403a04e5f77ba7865dd6d211da0afa71262a77a63d9c06e8b00b616ca15f11ea5b4948973864183f570347570553e3878376ca4f7536ad5afac10c0a7b34a5c11f8cf16115fbaeb4b323b1ad6f75c7ec3b954891cab2611cf1768cec983c1717c57f67676d721a955bdbbc216a3345bb31d7d63e06bdac96a6b991ba1e0113d01e48c77ab327d36b426c2f8fe4825a37877425885c927e92423b6977fc304122a2c397cb74845fe9961dba22c1a7]\n[sLen = 20]\n[sha = SHA-1]\n\n# tcId = 8\nmsg = 313233343030\nresult = acceptable\nsig = b3e943f3982a29d0c1e241890ebdd9e734baf85bd32de80c6240e34dd1f7f0ca4f37fff2c373f9718e7e900df224d155c4463c66badc8fc3563f36309568436bcbef1d83c63e393d9e1432d50541d45e54b7af1b18cc819d9eaaa65a4b1e4f37ae16ec75e9f44a07262cf3e2dab85a066d92b750ba1cd2a1d42493868123f18017bd9faf1de1a4f87a3f9cf744da1eafc761b7e24c9929d3dfd15d1b08db1e3fc64932816095cea495e0dbb82842b5f3ca90dc7b78895c1f12ba991f3bef6f16451a84880fa31cdfda6b9624a77a3a0489fcfdf6e07b89c0689b5b7b7052372a2b1e06a3457b027285c3b160c0de1dba4910c0162ae8e737a3d7dd1e05c77ace\n# The key for this test vector uses a weak hash function.\n\n[e = 10001]\n[keyAsn = 3082010a0282010100bb0d4124c20130688b8419fabecc427d946c5096dcf69ecb0eb69fcf5aed15d7e1e5fe4e34fbe26f8b244aa3f088d546a00a531464ba4b8980bcc4d5e54bcc20e1a51afa9044f7fdecbc6edb751b5a5fa7ab403a04e5f77ba7865dd6d211da0afa71262a77a63d9c06e8b00b616ca15f11ea5b4948973864183f570347570553e3878376ca4f7536ad5afac10c0a7b34a5c11f8cf16115fbaeb4b323b1ad6f75c7ec3b954891cab2611cf1768cec983c1717c57f67676d721a955bdbbc216a3345bb31d7d63e06bdac96a6b991ba1e0113d01e48c77ab327d36b426c2f8fe4825a37877425885c927e92423b6977fc304122a2c397cb74845fe9961dba22c1a70203010001]\n[keyDer = 30820122300d06092a864886f70d01010105000382010f003082010a0282010100bb0d4124c20130688b8419fabecc427d946c5096dcf69ecb0eb69fcf5aed15d7e1e5fe4e34fbe26f8b244aa3f088d546a00a531464ba4b8980bcc4d5e54bcc20e1a51afa9044f7fdecbc6edb751b5a5fa7ab403a04e5f77ba7865dd6d211da0afa71262a77a63d9c06e8b00b616ca15f11ea5b4948973864183f570347570553e3878376ca4f7536ad5afac10c0a7b34a5c11f8cf16115fbaeb4b323b1ad6f75c7ec3b954891cab2611cf1768cec983c1717c57f67676d721a955bdbbc216a3345bb31d7d63e06bdac96a6b991ba1e0113d01e48c77ab327d36b426c2f8fe4825a37877425885c927e92423b6977fc304122a2c397cb74845fe9961dba22c1a70203010001]\n[keysize = 2048]\n[mgf = MGF1]\n[mgfSha = SHA-224]\n[n = 0bb0d4124c20130688b8419fabecc427d946c5096dcf69ecb0eb69fcf5aed15d7e1e5fe4e34fbe26f8b244aa3f088d546a00a531464ba4b8980bcc4d5e54bcc20e1a51afa9044f7fdecbc6edb751b5a5fa7ab403a04e5f77ba7865dd6d211da0afa71262a77a63d9c06e8b00b616ca15f11ea5b4948973864183f570347570553e3878376ca4f7536ad5afac10c0a7b34a5c11f8cf16115fbaeb4b323b1ad6f75c7ec3b954891cab2611cf1768cec983c1717c57f67676d721a955bdbbc216a3345bb31d7d63e06bdac96a6b991ba1e0113d01e48c77ab327d36b426c2f8fe4825a37877425885c927e92423b6977fc304122a2c397cb74845fe9961dba22c1a7]\n[sLen = 28]\n[sha = SHA-1]\n\n# tcId = 9\nmsg = 313233343030\nresult = acceptable\nsig = a9b9eef8197c973d6a73bdc165f40f0f53b05848c93957aec2785fa92a9cc6397418a71870f1bbc21a39b244526b4a39a538d149cde62bf8f21f3eabca932751da83120136c48073792c55e2eff4e29e6973cd3f1090c5bf3ced02a1ba4c145addc674d33b0a285d73d14bcd6f374f60c95c4184e2d57388e9c73f697ac0af5116ddbf5081a8f99ace11027835cb3df8ae785491f42850de04b3e01b9317bd04ed488ad72e787c728b4516c7d839d388a2fd7b21994ff3f5b7f264413bedd3d8a5258d2b39e60411de1ee69fe05f4e76b23a9f50b49f7043f9812aeb81cd54cc1dd9ffdc6e73580e2cae821579ba3642ff7793a3995b136e057d2d2ca7aefae4\n# The key for this test vector uses a weak hash function.\n\n[e = 10001]\n[keyAsn = 3082010a0282010100bb0d4124c20130688b8419fabecc427d946c5096dcf69ecb0eb69fcf5aed15d7e1e5fe4e34fbe26f8b244aa3f088d546a00a531464ba4b8980bcc4d5e54bcc20e1a51afa9044f7fdecbc6edb751b5a5fa7ab403a04e5f77ba7865dd6d211da0afa71262a77a63d9c06e8b00b616ca15f11ea5b4948973864183f570347570553e3878376ca4f7536ad5afac10c0a7b34a5c11f8cf16115fbaeb4b323b1ad6f75c7ec3b954891cab2611cf1768cec983c1717c57f67676d721a955bdbbc216a3345bb31d7d63e06bdac96a6b991ba1e0113d01e48c77ab327d36b426c2f8fe4825a37877425885c927e92423b6977fc304122a2c397cb74845fe9961dba22c1a70203010001]\n[keyDer = 30820122300d06092a864886f70d01010105000382010f003082010a0282010100bb0d4124c20130688b8419fabecc427d946c5096dcf69ecb0eb69fcf5aed15d7e1e5fe4e34fbe26f8b244aa3f088d546a00a531464ba4b8980bcc4d5e54bcc20e1a51afa9044f7fdecbc6edb751b5a5fa7ab403a04e5f77ba7865dd6d211da0afa71262a77a63d9c06e8b00b616ca15f11ea5b4948973864183f570347570553e3878376ca4f7536ad5afac10c0a7b34a5c11f8cf16115fbaeb4b323b1ad6f75c7ec3b954891cab2611cf1768cec983c1717c57f67676d721a955bdbbc216a3345bb31d7d63e06bdac96a6b991ba1e0113d01e48c77ab327d36b426c2f8fe4825a37877425885c927e92423b6977fc304122a2c397cb74845fe9961dba22c1a70203010001]\n[keysize = 2048]\n[mgf = MGF1]\n[mgfSha = SHA-224]\n[n = 0bb0d4124c20130688b8419fabecc427d946c5096dcf69ecb0eb69fcf5aed15d7e1e5fe4e34fbe26f8b244aa3f088d546a00a531464ba4b8980bcc4d5e54bcc20e1a51afa9044f7fdecbc6edb751b5a5fa7ab403a04e5f77ba7865dd6d211da0afa71262a77a63d9c06e8b00b616ca15f11ea5b4948973864183f570347570553e3878376ca4f7536ad5afac10c0a7b34a5c11f8cf16115fbaeb4b323b1ad6f75c7ec3b954891cab2611cf1768cec983c1717c57f67676d721a955bdbbc216a3345bb31d7d63e06bdac96a6b991ba1e0113d01e48c77ab327d36b426c2f8fe4825a37877425885c927e92423b6977fc304122a2c397cb74845fe9961dba22c1a7]\n[sLen = 32]\n[sha = SHA-1]\n\n# tcId = 10\nmsg = 313233343030\nresult = acceptable\nsig = 899a49ab1511bef8727d1ed7093bf7e6a77fa8750d047b203740324d18fc45b587d3392bb7abbe7e6bed7bf2be2fa5e355f8ac5452e675027dbec1835555d059a4ec44120f499e4951cc3fab33d3e8154a4340d29c69fb50728c60eaa58d61b75cfe7efadbff55fc0edffb4af9719cd1a3b2a240936eb6c2ad70b10b72aab7e64d9fb17ba8fadb6f4f0036bc22d5779705b02d261b8c9be700b65c066c27be02db353f4ebcab1ccb41c4bbcfef39abfa8999196951209558463aab1c6d4917ae97006199daaf963666d85c133817035f36ea321714a6b20dadb355a226257fc0abff10c9afac551bb7c3ba9e44737f45ad4f9b7f2db002afb7ad61cda0d96538\n# The key for this test vector uses a weak hash function.\n\n[e = 10001]\n[keyAsn = 3082010a0282010100bb0d4124c20130688b8419fabecc427d946c5096dcf69ecb0eb69fcf5aed15d7e1e5fe4e34fbe26f8b244aa3f088d546a00a531464ba4b8980bcc4d5e54bcc20e1a51afa9044f7fdecbc6edb751b5a5fa7ab403a04e5f77ba7865dd6d211da0afa71262a77a63d9c06e8b00b616ca15f11ea5b4948973864183f570347570553e3878376ca4f7536ad5afac10c0a7b34a5c11f8cf16115fbaeb4b323b1ad6f75c7ec3b954891cab2611cf1768cec983c1717c57f67676d721a955bdbbc216a3345bb31d7d63e06bdac96a6b991ba1e0113d01e48c77ab327d36b426c2f8fe4825a37877425885c927e92423b6977fc304122a2c39",
@@ -3370,9 +3341,9 @@
     "21a955bdbbc216a3345bb31d7d63e06bdac96a6b991ba1e0113d01e48c77ab327d36b426c2f8fe4825a37877425885c927e92423b6977fc304122a2c397cb74845fe9961dba22c1a70203010001]\n[keysize = 2048]\n[mgf = MGF1]\n[mgfSha = SHA-384]\n[n = 0bb0d4124c20130688b8419fabecc427d946c5096dcf69ecb0eb69fcf5aed15d7e1e5fe4e34fbe26f8b244aa3f088d546a00a531464ba4b8980bcc4d5e54bcc20e1a51afa9044f7fdecbc6edb751b5a5fa7ab403a04e5f77ba7865dd6d211da0afa71262a77a63d9c06e8b00b616ca15f11ea5b4948973864183f570347570553e3878376ca4f7536ad5afac10c0a7b34a5c11f8cf16115fbaeb4b323b1ad6f75c7ec3b954891cab2611cf1768cec983c1717c57f67676d721a955bdbbc216a3345bb31d7d63e06bdac96a6b991ba1e0113d01e48c77ab327d36b426c2f8fe4825a37877425885c927e92423b6977fc304122a2c397cb74845fe9961dba22c1a7]\n[sLen = 64]\n[sha = SHA-512]\n\n# tcId = 144\nmsg = 313233343030\nresult = valid\nsig = 7dc5457f6f8aa74bc2314156e2efca717c2360d57a8c5ee396dddd6151c0cc89f356e3f14bea1478c7bb4a54620a73d558be246fa884c41314472bb9c9866fbddb5727b0976593ab6c6635d8258a7dae326dbe65d203951209f8ece46a4132efcb640bcbd7990a6f0c138b456688d268150396eed52b5553f091f4888642b18580977d80680bb9c1194968bed4b0198cf72d1ed4631a6c16f6ea562c6cf344b3f8d1c2fddbcede647c91d01312b3609345d3e32df899fb981f070ed1c0740d79eb19f6d54725c006c0cfd961a2943391baa2a32e4da6dff7ed0a2a61fded39a85ee642c1e219d9ccf93faf80e2c2135b0de494f8cbcec5bb77f75148e83ba408\n\n[e = 10001]\n[keyAsn = 3082010a0282010100bb0d4124c20130688b8419fabecc427d946c5096dcf69ecb0eb69fcf5aed15d7e1e5fe4e34fbe26f8b244aa3f088d546a00a531464ba4b8980bcc4d5e54bcc20e1a51afa9044f7fdecbc6edb751b5a5fa7ab403a04e5f77ba7865dd6d211da0afa71262a77a63d9c06e8b00b616ca15f11ea5b4948973864183f570347570553e3878376ca4f7536ad5afac10c0a7b34a5c11f8cf16115fbaeb4b323b1ad6f75c7ec3b954891cab2611cf1768cec983c1717c57f67676d721a955bdbbc216a3345bb31d7d63e06bdac96a6b991ba1e0113d01e48c77ab327d36b426c2f8fe4825a37877425885c927e92423b6977fc304122a2c397cb74845fe9961dba22c1a70203010001]\n[keyDer = 30820122300d06092a864886f70d01010105000382010f003082010a0282010100bb0d4124c20130688b8419fabecc427d946c5096dcf69ecb0eb69fcf5aed15d7e1e5fe4e34fbe26f8b244aa3f088d546a00a531464ba4b8980bcc4d5e54bcc20e1a51afa9044f7fdecbc6edb751b5a5fa7ab403a04e5f77ba7865dd6d211da0afa71262a77a63d9c06e8b00b616ca15f11ea5b4948973864183f570347570553e3878376ca4f7536ad5afac10c0a7b34a5c11f8cf16115fbaeb4b323b1ad6f75c7ec3b954891cab2611cf1768cec983c1717c57f67676d721a955bdbbc216a3345bb31d7d63e06bdac96a6b991ba1e0113d01e48c77ab327d36b426c2f8fe4825a37877425885c927e92423b6977fc304122a2c397cb74845fe9961dba22c1a70203010001]\n[keysize = 2048]\n[mgf = MGF1]\n[mgfSha = SHA-512]\n[n = 0bb0d4124c20130688b8419fabecc427d946c5096dcf69ecb0eb69fcf5aed15d7e1e5fe4e34fbe26f8b244aa3f088d546a00a531464ba4b8980bcc4d5e54bcc20e1a51afa9044f7fdecbc6edb751b5a5fa7ab403a04e5f77ba7865dd6d211da0afa71262a77a63d9c06e8b00b616ca15f11ea5b4948973864183f570347570553e3878376ca4f7536ad5afac10c0a7b34a5c11f8cf16115fbaeb4b323b1ad6f75c7ec3b954891cab2611cf1768cec983c1717c57f67676d721a955bdbbc216a3345bb31d7d63e06bdac96a6b991ba1e0113d01e48c77ab327d36b426c2f8fe4825a37877425885c927e92423b6977fc304122a2c397cb74845fe9961dba22c1a7]\n[sLen = 0]\n[sha = SHA-512]\n\n# tcId = 145\nmsg = 313233343030\nresult = valid\nsig = a289625f9fe684d186604fa08140f7d522dbec8ae6266ce83fba2b6bc6305e2e27bbfb346165b4e110e1b3e9445ffa8933e5417dbd87e3084835b8677ae439609616f7b755bbbad33ed0257a170a3964b85b3cdfbce43ea3c550354a92ec8e75642b039e2b4d9bc77b84c6bc7f2f2a43a0a403a1992e008786b5e9e43fbe71bee787ecd99501f1204921f61ec0ca83f1a8fb7862efe69b104d822ff5170802d510fd55cba7dcc2b695db905bce4c07a702cdecf24381f49a9b95d4805f1eb51704ea198653f43c3f124a4347ea1becd138cc3fd43e813ed823c373a35eb9060bcbb8fefb1c453c72f1f6198747577aef14ad3fe144b7d8de1bd6a123bd9f3f96\n\n[e = 10001]\n[keyAsn = 3082010a0282010100bb0d4124c20130688b8419fabecc427d946c5096dcf69ecb0eb69fcf5aed15d7e1e5fe4e34fbe26f8b244aa3f088d546a00a531464ba4b8980bcc4d5e54bcc20e1a51afa9044f7fdecbc6edb751b5a5fa7ab403a04e5f77ba7865dd6d211da0afa71262a77a63d9c06e8b00b616ca15f11ea5b4948973864183f570347570553e3878376ca4f7536ad5afac10c0a7b34a5c11f8cf16115fbaeb4b323b1ad6f75c7ec3b954891cab2611cf1768cec983c1717c57f67676d721a955bdbbc216a3345bb31d7d63e06bdac96a6b991ba1e0113d01e48c77ab327d36b426c2f8fe4825a37877425885c927e92423b6977fc304122a2c397cb74845fe9961dba22c1a70203010001]\n[keyDer = 30820122300d06092a864886f70d01010105000382010f003082010a0282010100bb0d4124c20130688b8419fabecc427d946c5096dcf69ecb0eb69fcf5aed15d7e1e5fe4e34fbe26f8b244aa3f088d546a00a531464ba4b8980bcc4d5e54bcc20e1a51afa9044f7fdecbc6edb751b5a5fa7ab403a04e5f77ba7865dd6d211da0afa71262a77a63d9c06e8b00b616ca15f11ea5b4948973864183f570347570553e3878376ca4f7536ad5afac10c0a7b34a5c11f8cf16115fbaeb4b323b1ad6f75c7ec3b954891cab2611cf1768cec983c1717c57f67676d721a955bdbbc216a3345bb31d7d63e06bdac96a6b991ba1e0113d01e48c77ab327d36b426c2f8fe4825a37877425885c927e92423b6977fc304122a2c397cb74845fe9961dba22c1a70203010001]\n[keysize = 2048]\n[mgf = MGF1]\n[mgfSha = SHA-512]\n[n = 0bb0d4124c20130688b8419fabecc427d946c5096dcf69ecb0eb69fcf5aed15d7e1e5fe4e34fbe26f8b244aa3f088d546a00a531464ba4b8980bcc4d5e54bcc20e1a51afa9044f7fdecbc6edb751b5a5fa7ab403a04e5f77ba7865dd6d211da0afa71262a77a63d9c06e8b00b616ca15f11ea5b4948973864183f570347570553e3878376ca4f7536ad5afac10c0a7b34a5c11f8cf16115fbaeb4b323b1ad6f75c7ec3b954891cab2611cf1768cec983c1717c57f67676d721a955bdbbc216a3345bb31d7d63e06bdac96a6b991ba1e0113d01e48c77ab327d36b426c2f8fe4825a37877425885c927e92423b6977fc304122a2c397cb74845fe9961dba22c1a7]\n[sLen = 20]\n[sha = SHA-512]\n\n# tcId = 146\nmsg = 313233343030\nresult = valid\nsig = 740cc94a43653655eabe5a2c9f883a3784cbc5b13161e05ac0849cee39b2e8a42a0f53d14b47ff61d143584797ad0889b26de17b0c27c79a69a356e2e3eaee2b8675b0aaf68dfe682df23463b9b780f5b4d6681c00b27277e4e7839a333b022a16e7b75418fae9d5f5b3b996427d518eb1a696ac83ce6c5107efae577859b814100f19c52708481ed03d038a4cf6039f91bf72f4788dba51179e3c95c750a9432af1044f7cc758572ff11c537add14a6618d0fc1064f762485a0ffebfb0cfaceff4602367a231cee6ea2c8407bcc88267f42189c02e3438e62e3825d8667d1ae221494d4e29626caea3a7f5d2284f18862512cdd4cd9cfe1d8d57cedc9960299\n\n[e = 10001]\n[keyAsn = 3082010a0282010100bb0d4124c20130688b8419fabecc427d946c5096dcf69ecb0eb69fcf5aed15d7e1e5fe4e34fbe26f8b244aa3f088d546a00a531464ba4b8980bcc4d5e54bcc20e1a51afa9044f7fdecbc6edb751b5a5fa7ab403a04e5f77ba7865dd6d211da0afa71262a77a63d9c06e8b00b616ca15f11ea5b4948973864183f570347570553e3878376ca4f7536ad5afac10c0a7b34a5c11f8cf16115fbaeb4b323b1ad6f75c7ec3b954891cab2611cf1768cec983c1717c57f67676d721a955bdbbc216a3345bb31d7d63e06bdac96a6b991ba1e0113d01e48c77ab327d36b426c2f8fe4825a37877425885c927e92423b6977fc304122a2c397cb74845fe9961dba22c1a70203010001]\n[keyDer = 30820122300d06092a864886f70d01010105000382010f003082010a0282010100bb0d4124c20130688b8419fabecc427d946c5096dcf69ecb0eb69fcf5aed15d7e1e5fe4e34fbe26f8b244aa3f088d546a00a531464ba4b8980bcc4d5e54bcc20e1a51afa9044f7fdecbc6edb751b5a5fa7ab403a04e5f77ba7865dd6d211da0afa71262a77a63d9c06e8b00b616ca15f11ea5b4948973864183f570347570553e3878376ca4f7536ad5afac10c0a7b34a5c11f8cf16115fbaeb4b323b1ad6f75c7ec3b954891cab2611cf1768cec983c1717c57f67676d721a955bdbbc216a3345bb31d7d63e06bdac96a6b991ba1e0113d01e48c77ab327d36b426c2f8fe4825a37877425885c927e92423b6977fc304122a2c397cb74845fe9961dba22c1a70203010001]\n[keysize = 2048]\n[mgf = MGF1]\n[mgfSha = SHA-512]\n[n = 0bb0d4124c20130688b8419fabecc427d946c5096dcf69ecb0eb69fcf5aed15d7e1e5fe4e34fbe26f8b244aa3f088d546a00a531464ba4b8980bcc4d5e54bcc20e1a51afa9044f7fdecbc6edb751b5a5fa7ab403a04e5f77ba7865dd6d211da0afa71262a77a63d9c06e8b00b616ca15f11ea5b4948973864183f570347570553e3878376ca4f7536ad5afac10c0a7b34a5c11f8cf16115fbaeb4b323b1ad6f75c7ec3b954891cab2611cf1768cec983c1717c57f67676d721a955bdbbc216a3345bb31d7d63e06bdac96a6b991ba1e0113d01e48c77ab327d36b426c2f8fe4825a37877425885c927e92423b6977fc304122a2c397cb74845fe9961dba22c1a7]\n[sLen = 28]\n[sha = SHA-512]\n\n# tcId = 147\nmsg = 313233343030\nresult = valid\nsig = 9a8092d3e759eac9374356b3bda80d87c6cd1f1188dc894f48bfcc2d15e99c65ffb6353510998a360f28bd636c61edda93ebb903029feae9b2c3935b2870f9a3f29e044f3ccba9a08357226d48f760158cbe5bfc0d7c0a2eaca0b1b167745bf26ea1e008e7377a085f4bd685fd5ada6602758e27541e6f270adf6d5b1a2b6c65a3757c5b3c4c29284e7cadbd39f4cfcb4253e959945651c60eab57ac0170da7ccb0c8d72e760e603c755a1b1e1356e968989cec1b9e1273ec2c572ed7dd0d0d29c0ad1e77692b0",
     "d79ec60657fc21b746168dcdf0d05a3ef1f37a4ebfb199cc167d94cc2c9b75dddf113048326797a6cfd6c9a764a6c71131e5f5654a93fc83a7\n\n[e = 10001]\n[keyAsn = 3082010a0282010100bb0d4124c20130688b8419fabecc427d946c5096dcf69ecb0eb69fcf5aed15d7e1e5fe4e34fbe26f8b244aa3f088d546a00a531464ba4b8980bcc4d5e54bcc20e1a51afa9044f7fdecbc6edb751b5a5fa7ab403a04e5f77ba7865dd6d211da0afa71262a77a63d9c06e8b00b616ca15f11ea5b4948973864183f570347570553e3878376ca4f7536ad5afac10c0a7b34a5c11f8cf16115fbaeb4b323b1ad6f75c7ec3b954891cab2611cf1768cec983c1717c57f67676d721a955bdbbc216a3345bb31d7d63e06bdac96a6b991ba1e0113d01e48c77ab327d36b426c2f8fe4825a37877425885c927e92423b6977fc304122a2c397cb74845fe9961dba22c1a70203010001]\n[keyDer = 30820122300d06092a864886f70d01010105000382010f003082010a0282010100bb0d4124c20130688b8419fabecc427d946c5096dcf69ecb0eb69fcf5aed15d7e1e5fe4e34fbe26f8b244aa3f088d546a00a531464ba4b8980bcc4d5e54bcc20e1a51afa9044f7fdecbc6edb751b5a5fa7ab403a04e5f77ba7865dd6d211da0afa71262a77a63d9c06e8b00b616ca15f11ea5b4948973864183f570347570553e3878376ca4f7536ad5afac10c0a7b34a5c11f8cf16115fbaeb4b323b1ad6f75c7ec3b954891cab2611cf1768cec983c1717c57f67676d721a955bdbbc216a3345bb31d7d63e06bdac96a6b991ba1e0113d01e48c77ab327d36b426c2f8fe4825a37877425885c927e92423b6977fc304122a2c397cb74845fe9961dba22c1a70203010001]\n[keysize = 2048]\n[mgf = MGF1]\n[mgfSha = SHA-512]\n[n = 0bb0d4124c20130688b8419fabecc427d946c5096dcf69ecb0eb69fcf5aed15d7e1e5fe4e34fbe26f8b244aa3f088d546a00a531464ba4b8980bcc4d5e54bcc20e1a51afa9044f7fdecbc6edb751b5a5fa7ab403a04e5f77ba7865dd6d211da0afa71262a77a63d9c06e8b00b616ca15f11ea5b4948973864183f570347570553e3878376ca4f7536ad5afac10c0a7b34a5c11f8cf16115fbaeb4b323b1ad6f75c7ec3b954891cab2611cf1768cec983c1717c57f67676d721a955bdbbc216a3345bb31d7d63e06bdac96a6b991ba1e0113d01e48c77ab327d36b426c2f8fe4825a37877425885c927e92423b6977fc304122a2c397cb74845fe9961dba22c1a7]\n[sLen = 32]\n[sha = SHA-512]\n\n# tcId = 148\nmsg = 313233343030\nresult = valid\nsig = 3522943f158039aa68354e3c51eb6d9a496f5c7e7c33bfe9a20cf98caa710b88b18ecb6d73177787479d5064ce3deddc13f98998a7207118de77029e8fd5f012a9e056b972a974cb5b087b6564821af89ce3b64348095accdea8ad7d05cf3d21d6208365a1d2fcce7cd964295c963e5fd495448c0926de0950d12c42e056595295c4376484fd7d0dc6feef3dcb41ec5a0dd21eef375e65523bcf5af70a92331beb0c6b5ac445d6a06cbebeed0083b746b3d667aa366c647313389a2d9b61d41eaed8cf2db8b4938115700967432dcc4f383278b4a397afac04bdb7c2f5f6051854174d85fb96525c2ab7bb58c0ffb481efc29d08e4ad1a86ccfcbdcd98974862\n\n[e = 10001]\n[keyAsn = 3082010a0282010100bb0d4124c20130688b8419fabecc427d946c5096dcf69ecb0eb69fcf5aed15d7e1e5fe4e34fbe26f8b244aa3f088d546a00a531464ba4b8980bcc4d5e54bcc20e1a51afa9044f7fdecbc6edb751b5a5fa7ab403a04e5f77ba7865dd6d211da0afa71262a77a63d9c06e8b00b616ca15f11ea5b4948973864183f570347570553e3878376ca4f7536ad5afac10c0a7b34a5c11f8cf16115fbaeb4b323b1ad6f75c7ec3b954891cab2611cf1768cec983c1717c57f67676d721a955bdbbc216a3345bb31d7d63e06bdac96a6b991ba1e0113d01e48c77ab327d36b426c2f8fe4825a37877425885c927e92423b6977fc304122a2c397cb74845fe9961dba22c1a70203010001]\n[keyDer = 30820122300d06092a864886f70d01010105000382010f003082010a0282010100bb0d4124c20130688b8419fabecc427d946c5096dcf69ecb0eb69fcf5aed15d7e1e5fe4e34fbe26f8b244aa3f088d546a00a531464ba4b8980bcc4d5e54bcc20e1a51afa9044f7fdecbc6edb751b5a5fa7ab403a04e5f77ba7865dd6d211da0afa71262a77a63d9c06e8b00b616ca15f11ea5b4948973864183f570347570553e3878376ca4f7536ad5afac10c0a7b34a5c11f8cf16115fbaeb4b323b1ad6f75c7ec3b954891cab2611cf1768cec983c1717c57f67676d721a955bdbbc216a3345bb31d7d63e06bdac96a6b991ba1e0113d01e48c77ab327d36b426c2f8fe4825a37877425885c927e92423b6977fc304122a2c397cb74845fe9961dba22c1a70203010001]\n[keysize = 2048]\n[mgf = MGF1]\n[mgfSha = SHA-512]\n[n = 0bb0d4124c20130688b8419fabecc427d946c5096dcf69ecb0eb69fcf5aed15d7e1e5fe4e34fbe26f8b244aa3f088d546a00a531464ba4b8980bcc4d5e54bcc20e1a51afa9044f7fdecbc6edb751b5a5fa7ab403a04e5f77ba7865dd6d211da0afa71262a77a63d9c06e8b00b616ca15f11ea5b4948973864183f570347570553e3878376ca4f7536ad5afac10c0a7b34a5c11f8cf16115fbaeb4b323b1ad6f75c7ec3b954891cab2611cf1768cec983c1717c57f67676d721a955bdbbc216a3345bb31d7d63e06bdac96a6b991ba1e0113d01e48c77ab327d36b426c2f8fe4825a37877425885c927e92423b6977fc304122a2c397cb74845fe9961dba22c1a7]\n[sLen = 48]\n[sha = SHA-512]\n\n# tcId = 149\nmsg = 313233343030\nresult = valid\nsig = 45d8ed4982ba484e0bcfca14537d607fb6c3f8f444425bca05cf29bd5f92945f0ac211ccbc78d934f6fd24131ae88483547aef01b4e70acd6f84eef74d4a2de40b4d15d38a0807087a54ece36f268a60b70c500b72fe0ff49920c63c0cbde6e0d9100f4e50ea3b5e11a595f3755878bb1e03c295d3e73f1ec32d24d629f2fb469cea48346c057abd64f6bae4cbd0fb89076a1e42bd5260cc5691fee46762136f936aed35cdb6e1579d586fc4e166fe252778a379c134562175e17eecf758c11eca66ad259aa9e51e504d0d317b1715bd224706d65418a4601612e482bf95c1e9e9278e5401bdf1ed24118b908a8e42c562a76896563fe4c04d62b8abdb61e4cb\n\n[e = 10001]\n[keyAsn = 3082010a0282010100bb0d4124c20130688b8419fabecc427d946c5096dcf69ecb0eb69fcf5aed15d7e1e5fe4e34fbe26f8b244aa3f088d546a00a531464ba4b8980bcc4d5e54bcc20e1a51afa9044f7fdecbc6edb751b5a5fa7ab403a04e5f77ba7865dd6d211da0afa71262a77a63d9c06e8b00b616ca15f11ea5b4948973864183f570347570553e3878376ca4f7536ad5afac10c0a7b34a5c11f8cf16115fbaeb4b323b1ad6f75c7ec3b954891cab2611cf1768cec983c1717c57f67676d721a955bdbbc216a3345bb31d7d63e06bdac96a6b991ba1e0113d01e48c77ab327d36b426c2f8fe4825a37877425885c927e92423b6977fc304122a2c397cb74845fe9961dba22c1a70203010001]\n[keyDer = 30820122300d06092a864886f70d01010105000382010f003082010a0282010100bb0d4124c20130688b8419fabecc427d946c5096dcf69ecb0eb69fcf5aed15d7e1e5fe4e34fbe26f8b244aa3f088d546a00a531464ba4b8980bcc4d5e54bcc20e1a51afa9044f7fdecbc6edb751b5a5fa7ab403a04e5f77ba7865dd6d211da0afa71262a77a63d9c06e8b00b616ca15f11ea5b4948973864183f570347570553e3878376ca4f7536ad5afac10c0a7b34a5c11f8cf16115fbaeb4b323b1ad6f75c7ec3b954891cab2611cf1768cec983c1717c57f67676d721a955bdbbc216a3345bb31d7d63e06bdac96a6b991ba1e0113d01e48c77ab327d36b426c2f8fe4825a37877425885c927e92423b6977fc304122a2c397cb74845fe9961dba22c1a70203010001]\n[keysize = 2048]\n[mgf = MGF1]\n[mgfSha = SHA-512]\n[n = 0bb0d4124c20130688b8419fabecc427d946c5096dcf69ecb0eb69fcf5aed15d7e1e5fe4e34fbe26f8b244aa3f088d546a00a531464ba4b8980bcc4d5e54bcc20e1a51afa9044f7fdecbc6edb751b5a5fa7ab403a04e5f77ba7865dd6d211da0afa71262a77a63d9c06e8b00b616ca15f11ea5b4948973864183f570347570553e3878376ca4f7536ad5afac10c0a7b34a5c11f8cf16115fbaeb4b323b1ad6f75c7ec3b954891cab2611cf1768cec983c1717c57f67676d721a955bdbbc216a3345bb31d7d63e06bdac96a6b991ba1e0113d01e48c77ab327d36b426c2f8fe4825a37877425885c927e92423b6977fc304122a2c397cb74845fe9961dba22c1a7]\n[sLen = 64]\n[sha = SHA-512]\n\n# tcId = 150\nmsg = 313233343030\nresult = valid\nsig = 63942e89a56b634787dbf074e75b0525e8bd3b7b8172f2c27499272b939a812ce2f501eb95a64603f9bc7c2120ef2f7133c3b2a4bf6445e2257b59e57022c879f8d60667ab8e28dc972846670858fc0d5bdbfa71dff870aac96492214533383d8740d84ddf61d46f852c6bf0bfb2d10c2e4d41ce7eeaee028333dfe77650b53e66cd2c2991b80c32faa33aae27b1c30c0ae2abd759c59eb22e0d0597b6dd63491e0c95048c074b1d64d8f356e637669d90974f4eb29ca184468bc1e2d24cfcd36e395c41cf3703cdb1a5c206fbdd4763154e5569d04d75998e6f425bd42f80e0dcd8deeebc3322aa6f50aa873345d7c9a0522154b6de2387664ae33764ffb2a9\n\n",
 };
-static const size_t kLen84 = 310039;
+static const size_t kLen82 = 310039;
 
-static const char *kData84[] = {
+static const char *kData82[] = {
     "# Imported from Wycheproof's rsa_signature_test.json.\n# This file is generated by convert_wycheproof.go. Do not edit by hand.\n#\n# Algorithm: RSASig\n# Generator version: 0.4.12\n\n[e = 10001]\n[keyAsn = 3082010a0282010100bb0d4124c20130688b8419fabecc427d946c5096dcf69ecb0eb69fcf5aed15d7e1e5fe4e34fbe26f8b244aa3f088d546a00a531464ba4b8980bcc4d5e54bcc20e1a51afa9044f7fdecbc6edb751b5a5fa7ab403a04e5f77ba7865dd6d211da0afa71262a77a63d9c06e8b00b616ca15f11ea5b4948973864183f570347570553e3878376ca4f7536ad5afac10c0a7b34a5c11f8cf16115fbaeb4b323b1ad6f75c7ec3b954891cab2611cf1768cec983c1717c57f67676d721a955bdbbc216a3345bb31d7d63e06bdac96a6b991ba1e0113d01e48c77ab327d36b426c2f8fe4825a37877425885c927e92423b6977fc304122a2c397cb74845fe9961dba22c1a70203010001]\n[keyDer = 30820122300d06092a864886f70d01010105000382010f003082010a0282010100bb0d4124c20130688b8419fabecc427d946c5096dcf69ecb0eb69fcf5aed15d7e1e5fe4e34fbe26f8b244aa3f088d546a00a531464ba4b8980bcc4d5e54bcc20e1a51afa9044f7fdecbc6edb751b5a5fa7ab403a04e5f77ba7865dd6d211da0afa71262a77a63d9c06e8b00b616ca15f11ea5b4948973864183f570347570553e3878376ca4f7536ad5afac10c0a7b34a5c11f8cf16115fbaeb4b323b1ad6f75c7ec3b954891cab2611cf1768cec983c1717c57f67676d721a955bdbbc216a3345bb31d7d63e06bdac96a6b991ba1e0113d01e48c77ab327d36b426c2f8fe4825a37877425885c927e92423b6977fc304122a2c397cb74845fe9961dba22c1a70203010001]\n[keysize = 2048]\n[n = 0bb0d4124c20130688b8419fabecc427d946c5096dcf69ecb0eb69fcf5aed15d7e1e5fe4e34fbe26f8b244aa3f088d546a00a531464ba4b8980bcc4d5e54bcc20e1a51afa9044f7fdecbc6edb751b5a5fa7ab403a04e5f77ba7865dd6d211da0afa71262a77a63d9c06e8b00b616ca15f11ea5b4948973864183f570347570553e3878376ca4f7536ad5afac10c0a7b34a5c11f8cf16115fbaeb4b323b1ad6f75c7ec3b954891cab2611cf1768cec983c1717c57f67676d721a955bdbbc216a3345bb31d7d63e06bdac96a6b991ba1e0113d01e48c77ab327d36b426c2f8fe4825a37877425885c927e92423b6977fc304122a2c397cb74845fe9961dba22c1a7]\n[sha = SHA-256]\n\n# tcId = 1\nmsg = \npadding = 3031300d060960864801650304020105000420e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\nresult = valid\nsig = 9f420516e9d063e5e2961accd80e3eb0198b10f4d64e749b5bd39a80f7356d2ca0fdbbfe5f5b2bba92da7616a83912b449e69f8ce6e35a27e9e553279d6a9317a1d07d897dddd9a8291321359c6a8a31a4ad7dbb54432bebaffbe8940e40cc875d941ecaa10196e1aa68b83e0db67e34f3937dc1dd11cc0e5b40cdb0b90ecdcad793d7279dc5b5f6cb356b805e6357baa1b3659dbbdfc9a0f042131760fe1b78202f289699e04b5c55f3ec26fa25460ce3de5aeff0b1f5c435e022e1168f9fb86147e7a8b0f11cd988d59c81c3fe74116b350e0396b1cdb2b4e0326b5c90dc384529c7f794c4c2f40958f97ea203d76a75076d5360228e7ddf166842b9165e8e\n\n# tcId = 2\nmsg = 0000000000000000000000000000000000000000\npadding = 3031300d060960864801650304020105000420de47c9b27eb8d300dbb5f2c353e632c393262cf06340c4fa7f1b40c4cbd36f90\nresult = valid\nsig = b4e0a273bbf6e942cb22ae5ccbfd9d843400ba451c5e086fce9b3b1f90bd892fadc54ac45b61f3b3b37aca67d835fda1b37d5bec427382be2348062716d4592c7eb5c9107cf391e1cec01c74d64dfa5cb7052f2f8e442a09d21c22ef5484cb045c25a05b3057b266335f619ea8dc43b72e9abf38c19b5d71c21b9bf2eb8b63f2fe0fa868f7dbc9deae9745adb1fc26027bf5e2770b2d250c7507faf2fa63fabc67eeada9f2ed8f724dbd99d43294e5ec11d1575101d32af1a308abb56f7f15f544204b533fbd96fd3fe9174db3bc2af67c35401cc4003bbce360a7898dc831011ff0582c0658663a8c2e7c0e7a0df7f3c8ef95175bc136c3b49eb7a65023b08f\n\n# tcId = 3\nmsg = 54657374\npadding = 3031300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = valid\nsig = 9f74957ef2ec67062c5064143d096610d04af16f23189bf010f560d49bd793d619f70125dbef4edb4d4c923f8447e48a744428d8b463745d84a718d3c5592cdf6f611a735c7e04fe3f89920cc61e0113df20b93c719df7cf62013a2db3b497c033704352519dd51975eb156ee733d7bb342093bf494e6d7c8e92537adaf8b9170c0a2f0d76af847f716ecc87e8cd3545151387cafe062d5a2db83c5463b84d13b1ede8656efb3ae9509b449f4676084042b7c9091fb75476c8a866bbdbe57e125d7c64f2f7f1d4f732666bc7ac09c8e767d145f22243dd1f10943aa61b75e85256c52c522426c1dafde98af977c8538f7441ccdbb4eabff1990304c087070b12\n\n# tcId = 4\nmsg = 313233343030\npadding = 3031300d060960864801650304020105000420bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023\nresult = valid\nsig = 257d5214d02f48bf63a6a1f2604824bef64108af97a6032d9eab48b7964642e104f13c462289fa889109274360dfedaec2ace0f5f190d2e9ba0d2d522dc763dd60fcee52d513bf9ca7c0b29de279ca8b401bc2016c10d837cca56498dd644e4d350315819767e2908c1c33b71acecd0143e2913f9eec1978a900a3326bd8bb7574521c39efa2e987327c9343b9da06b304d1e4688ef80e6c285a6dfb64b57ffbfc786f69a2a1c0948ee6781dae288089a5dcb7fcb1e53a74b828b34867b8d7fb5a0151e43076772bd53a537937f8ad6e44adcf96a18181b460b63e530edc56a773fa3adb252cfc8bb664ca560a054f374c2a03d7532ac8986377b76ad0a4f1d6\n\n# tcId = 5\nmsg = 4d657373616765\npadding = 3031300d0609608648016503040201050004202f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f91\nresult = valid\nsig = 339b527aeec23ed9319d5c5ee671e8e92fde09932648734b1ded4eeae420e113a7ff1119686aef90c0bea5248ee1d50f5081515fba7a68a7ac8e2ba9828ebd58237d211c8212267f2a82363ffe790e3ad5282bef3842ead902cd98194d440cd1a53cc34121862034670dffd82aff9bda7f867a3893c2ba2d60cd3d5a3ae1c446c718e99bda195e8b19af734786c62908e1e18b155dbf791283c1bf3e02ce009e08415444d56f5defe78200557d513c8d93414228c4b746a10262cc4dc573da6801f624c5d99c200bd5731142e49d69f9cc9d6d914be18d09bcff4411f62bf028223ea559a41c71a970f5e0010ae487db94461a662d56e124d7b275e8266e55f0\n\n# tcId = 6\nmsg = 61\npadding = 3031300d060960864801650304020105000420ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb\nresult = valid\nsig = 6ea7297a28c575e4348878b928d6e938a2e3d77dc46a785611a64817fa0e9c8ec71728bc7e8f9eb3268aae0f3bfa23dcb73d503e0147432b4003400167ddf2f9fc8d09464e0b91a44de12c1efc8c38732e1ed87f91cebae036610c43a3b8bcd5bb4beac4f9fb5e39f193cfd4bc00d4c7a3a98d00c4efcd1bd64f260a2a957fc730df6dba68d622441901c51f5788d6c3636299ed3eaf0bc23000650ca97ed62d367a844f23649bdc23efd0349dc8d58cdbcf655aad1f9d3a21afa02930d68a2c2db68e364b0966b005c460b682717035fd43f0cb0e7008a3d841a90c0449de8d154082703313cd9abdcc836e6c1ae5b1887f75d2e4b6387e7971128790a62c00\n\n# tcId = 7\nmsg = e0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff\npadding = 3031300d0609608648016503040201050004209432c1a7d343fcfacb164bdc44ff71c1281c004886b1c428419088d06cd3561a\nresult = valid\nsig = 5a7186589cda0f9fb081dad864032ffd26a775fb33c7dae0ac080aebdd4ab53bc3ed37cc09f0a1b1edee78f0790ce0d1b656e4a788172db08900bb1474159937ad29a7899d6bbc87c743945c798307e61141ac21542af06bc2f435a47b505b2aad2619800a97396392f141772cfa97d762c42ee8afdef27617dc8056fe75b23ede6c8f4e9abe31c8344edd2c73e5304621283021ae7003cd760c3e34caec5b4b5cc6d291cff1ea80e5b9b68c5b7b045c04714d3dc73e150eb770d3d3ed788a4ed039117881ed5cd03eb3db6e4084679e09078110630aa6895029e7a6dd19d5b77952bbb06de26c2179fb06c64d184caee0079287c7b18f5ae7843e3cd01eae28\n\n# tcId = 8\n# Legacy:missing NULL\nmsg = 54657374\npadding = 302f300b06096086480165030402010420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = acceptable\nsig = 38e80b028443d96685ed76d4574b36c43cf9722e5fbcf08bc974385454316dee326a308c935a6e612ed26ef4e470e5f3f19a223e2866a2f1c805f74c804e2184f5620c1e84f894b890be7d46420178a2a5ad97b4bd3d31db24828281587207041a96792d8ee57889c666719c769f759c2175361434b18f188de387c8c13f6fb3a7e96f1abbb6124e94fbb4c6bc1d88caf54136b8f01c9eedfd614bc35375f33277d2e71a4dc5f65254179bbe75634e9dfe05aff9e1f1d792f4e6caf88e4299ed90d212d3d7ac9bfc71a8ac85ffbf2f49f77b41d36a64bccd3fe8948054cbad480451b0ca5f7fe35b0f6c772d64b70346f469808dc0057ba1c25c6ae7ac8450e9\n# Some legacy implementation of RSA PKCS#1 signatures did omit the parameter\n# field instead of using an ASN NULL. Some libraries still accept these legacy\n# signatures. This test vector contains such a legacy signature\n\n# tcId = 9\n# long form encoding of length\nmsg = 54657374\npadding = 308131300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 33a82ebc17f79f56f79073afbe0ff3f984f868684c529ecfffb3bfffaf52a99bfc057b196c3faeae3cf722c386c224ac235f781d9025ff8c9dcf10c4cc7f93c1f1aa5e1db9b166a71ac7350134ae1a1e5537a67f846f8c6970c269c4b91bc59ec783b7710afbd763ae42b1125eb9d0fc28b4045071c72320448a474006eefb256bb403b30a67c253028a2a0af7e4e36e85aa70ea73541ee2694d2bbe1415b37d2210def5ec77ba23c6f5cbe31ee21e072b49313e6e18bc6d6f2ffbd6b28267a",
     "5cdda24a62edd2151bff87ea6858db5b863c13a8e2a6445d8d31fd6b3ce8fa5a31060f97545f1e04df6819648a1933b1bcfa2470bb14844963f53175f1b26b612\n\n# tcId = 10\n# long form encoding of length\nmsg = 54657374\npadding = 303230810d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 37c62aaa10e8cb4bcce5fe466ac8688431e8ad2105dc12c6b7a0dfe8657ef3dbd027d04847c7d708c2099d7d38ca2b21aa5146ec0ffc7fd1a44c91c24689fa37475013e5b30c92c3565e3d53afa73fcf269dcf3b2bfc48a2ff026130bc008a724cd29ffc546d1aea5aeefc8cd13779b3b821d78bc7b7664fc7a89ce0273a8eed1e4a683c739005640c2edb756ea95f48d9c91d1ae9f57f24f6ce3193cedbcc52d05eb0dc8a9634a0ca8e12a446e9ac3378cfabc37b498aa4a1a9d1d3a6fb308411566f9c68063c0bc8e78621fed3a22073260aa87c76c5768c3db7f674f84d8826381fc3491f46d417a73ab88587d905d1c090e37913c99cfe29dae491841d31\n\n# tcId = 11\n# long form encoding of length\nmsg = 54657374\npadding = 3032300e06810960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 875b9204a6603968f50d6e4dc13d3192077a286c3475165b0bd160ff3df39fec5859a512886fc1e06916c2025e01ae2f7ab3b341b6372f819a625a42c22cdafce031d9635f95dd962a8f202b52f9925f07bc0c94434a2091d861729551e37d7c6019e16a47ce87f3f4051b8e9adf62444b522f522918c391d82940418cb3976f0c30634bc5dff2c4c3f36a4489d00c5ae65021b3bcf5abbef9257e3c976e5fd305fb30ccfe13c43fed64c371f8532dddc70a1f411cae257f37b6743da2d9567f9dc3513b267ee26e2da1a6ef005526fd90b6ecdfaed9a8d9e2bbdfae25b0adb81004501ff32fe1e7b7acfa18de5a1ab876705784181b1336288aefdc91186c3e\n\n# tcId = 12\n# long form encoding of length\nmsg = 54657374\npadding = 3032300e06096086480165030402010581000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 3cba108ad11cc9c6cfb4b849b1533c37557dd1ef2e201a78da42e164458ac54a29f0b11b1931e72f57266264584c13e910267e52bbcf15883e109a45ce14a86ac8e700cb04ea0ccccb55b01ce699275190b98c77981d2734d35d8ad41f94edc6481cc831a44d38a617a32855df03fcc44914e55b88271015c971bbf051d878b3ae7a8f53582ac8e2ab5d10e5023e67599725e9122b8ec42a96b40410edac51b26bec597b727404a6b1b24807e3df2fca8847de8b7517061edb009a40c8b3aa82cb22de080d3f7921c504965d5a23887ddb54100bc81894991c1ace0ee2afd1c38c554fd00ade0240c2067f01977326916d1708af027453f734b0a22331bc9453\n\n# tcId = 13\n# long form encoding of length\nmsg = 54657374\npadding = 3032300d06096086480165030402010500048120532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 50c6c70b2cf065c62b8b69884ae779e08b376574fe9307e2dc4ad58a50c5b2a8b74c1e8929b190045dec835e5f26c73824ddcf1a4b63f54b9f90c5f80c36f6a0cb616fb8b63926cca91c90761f960b83381cbbed3f8ee83eee92324fd9697b7f2cc0e784c956354b58e9243495800235156ca1698c407dd9b6332281bb5de1ff180dae7bb3393016e6396cbc7a02ca159b5eccee507a36ccb9338623e050d217be8d9826d0683d59c0acbaa190ba91da6b8579b6086d86d32edfa0f6f17ea5a58d3b8bb9e06ac1517eb66a8fb38094ee19e22b3d6d3cf8c1d001635e3c7e18823b69b9026d81975cb209024b8ebbdd88accbd9c5279c7a2fcd824697907223ef\n\n# tcId = 14\n# length contains leading 0\nmsg = 54657374\npadding = 30820031300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = ac3c440334308e0eef1b3c3afb42dd050c77f1bfe9f3c3c83d466a46bf708502f1866f423d52866147554a5c9f86f10c079d2bd47192dce0968e8aefd5f43a2892ad21b0bdb92be45bc380c11565ac7c01be00cb1e294048a1efb4cbb19be44fa4b542e0bbf9a47549d09e456f58ff377adafbd68ef8d86dc2d7d56c5d3be08ec6cf12c0d04bb7c64c13f08f75377ba896bece7f409d50809521b7f6496c992c90ce15a70a8f8096f8f2cbd3e575acb618c87f56324885cea1a6ded33d2f09d684f8d5a98c78f94853d74b9e6ab503918fea323e5534d3e45d51b3097e082c5da614d03a5ac422e5dcc3b764bbc02aa633a517bbe391d2662d71ab851e4eb3f5\n\n# tcId = 15\n# length contains leading 0\nmsg = 54657374\npadding = 30333082000d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 65fa4957fe03c0eb8a6680ede12f009178d3ce357927c8586ae056f209e0ab0c110871fdf0b95a2ff684748beb4e5a6a73ca3c657b23bfa06d362a300f260f4d60d459a066c9f5311d634bf96ac7ee4c80ffec2fca27eca7dbd37025bae76122a1fed1914da70f2bfb6bf2e1bf3a624acf2a6377606fbf06044a21a39ccd55b2cc1f0ff184d9df95bd73942a190f30028e770139d38ef3156f64fc3eec68ed5170c41f09f110f5a0fd195cd42c4dd8e394f32d195c159c7c2b69943ea966039b20c7ca17cec610be60aaf7ecdf3511590a662b74a181fb89135604d84cf9c4d6cb6cc0b4c24f4b5e7e9e9cd969855cdb92e3b399f32cb31319ac81701d056e84\n\n# tcId = 16\n# length contains leading 0\nmsg = 54657374\npadding = 3033300f0682000960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 305b0cb38db7ba5dd11c1d82195313b522f57ceb7b4045249dcf5977b99315f6708e9d8eaef6a89da0c11fa6f8dff3aa9050369cd520dd6e957226144fb68c846255b923a49ce896fed8828f8956d0d7aa5193123940ad0a5225e921ca0dc0852aae48507c7e22ca007f403bf0fcb6553d0af0bcce6be17eb53b0e8401349c8d144eb1ddbbf8215fc0e06d6adef096acf52d71978b1bffe95ffd21899256dc944fa9cfd4d7a25e62843f965d55515f6c45b22a825288773e25410582f62b9f1fdc1e0c6d4c941b90de7d8c3b18cd3eaf5319862d7ee160a5edba133cbc67024771817c7eda526c92d146e3b38b801025d01871c3efc2591a32ffaeb7b20e7dbc\n\n# tcId = 17\n# length contains leading 0\nmsg = 54657374\npadding = 3033300f0609608648016503040201058200000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 69c99cb5b397c6f9fa0f38b0d311f8b64eca97b578302912208bdae5c04244da7cae594e59a6bc0935b8878b7a55b90acbe73ed2adfabbe561cf104d2a60aae3c4fb58cb69a11ed739dea095c224c98bb0fcbddd44d4e1e4b71a8681730c4605d93a93e40e27e6b1182c57fe5f4332898872add7e2e7c3b39e0b45d07ad7cf3c90ea5bdad70902533ce78130c74ded898cad1d1830414951f33ecc0119ae785722d1d4320781178f393ca1fd11dd96da6f44bc586fb4b5a911fdfbb87b7d88833a9a1e036405e205013e2bea23e663dbb2fa813f1d8420f1c57b25dc5bc09fd7dcf99d0dd4a5b3bba8ff2cfddf2f9aa9ea78b8f4132cf0f373157b97097fdffc\n\n# tcId = 18\n# length contains leading 0\nmsg = 54657374\npadding = 3033300d0609608648016503040201050004820020532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 29a239412587861ba02da5cbeae093ff6217ca4b1c80eee56baba352290d6cf721260021b3779a009a3050c2e5fbf19e1e717f906a7f62e52d626c4a31e259c8324796e63ac75bd04081cf2d1f22a5687ee9464cd47ce491eb7ccace2b6bda1ad3c99de2b4dae26021d08dc270a2e84d4467f7a6a2cc59888f3b74cb107311c62ccf5f327c75adc5bdc830c2bee5303a1c43cdf80e00374fd3601f122b19ca4b2f36476abbdd0633561eb3f05265282b4d637647a1e8a2be47b4ea40e4248c3e2541950ef2eb98a487569a35d3c8d8fad28d42ba57e3134f828aa1222c4d13b6fba906086cf8f07f5f3ad539cff8c0cefaf42d89a884444e62e408e36236e70c\n\n# tcId = 19\n# wrong length\nmsg = 54657374\npadding = 3032300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 36f62f546a36d5215548e6a770a14fc6edd4a9353ff8ed6231369cbb6598d25d86018b8cea9f1a87c150fda18c7e89b2c907f0ce485c8c321be467a97febc05dce335db88cabdb99ebc4c187a04fdc8e879487f03c2aeccb6ddaf006f0613d32b197c79b2a8cfae015909e02746fecb9ae9da3f07ee91ba70c0356984dd15d078cd0b93dd9e3c1cc03d6f255c1383e6e949e529ca4408f0f453e7e94c17e9b47f841f73dd62e5be047c44e1d9d7eee0d9f2a56bab13d4397494812793a49e8dc0d237242bf134aaead8f303226e532afd0c2e9748be08d7b7fd74f6f1806cfc4092af39d6eada4e0b6d7aa6f06592f6cd7dd26c1fcc84fdff1bf3086e8e2c81b\n\n# tcId = 20\n# wrong length\nmsg = 54657374\npadding = 3030300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 6e18d86059eb2f05c0c1277abcd8d2380ea39ea0c4587ae140d2f709363eaa2b0b7f801a75fbe15aa329129c4abe43ec0fd84f552a3aff7e4de40a5943ef13cc3b2d02a1ad90309e8091d5c2c6fe3b6dc2472c94116cd9adf367e575720906a9fe41068a86c15214e3dae39ac41b84f5fb824dbf5c911c8c640254cd19910e15a6488c2a59179f271dbde468d540cb33dd5add9a864780e27a3e55c87402d9e2c0e12d70c9a41681bda6f9f337e7a26dd2ec06580e6fd9cd4db40a62002feaf5a4c93dfe05dc392b63809d4caebdcdac74a7a240260a6eb8db8dcbf25527d4297e4c6145decb0a888817b4f949fb66ee63e5cb2c2477a9373d1e30b4d71cd7c1\n\n# tcId = 21\n# wrong length\nmsg = 54657374\npadding = 3031300e060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 61a6e5ea6b3c5241d75dbf0cb397da7cd9d5b2c23ffefa183ddd1d34b6cf116b127045f4681877fd58907c1209528a6b45266cfd5bf4e95361",
     "b9036c77fd6cc7891cb2417d081ed897ab97588dfcf975992ac9c0239aa9fc19dcf6d6d0f3e4bf72da5ab09cdd4b205b41a27e6b36dff608a638925d13e3ad7143b1ea9a2758c787a2f33790ad423749c1b79b3239d1f96fc4690b19a0b8edbeff446b148fbf39a890ed8e4a18ea09d5e50c25855e1a4a4c28c5437c906d1a9c371569936c858c29bd16e98af749edf2f048933d706068928e81ac7e219fc923f6dee8a411f40ede593468ada31e5c647d4a576ddb68a335bd50cdf7446dc722ee711b5c71ae93\n\n# tcId = 22\n# wrong length\nmsg = 54657374\npadding = 3031300c060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 6494a47f97d18199ce0948b2ddf81e408e2d4acd58705059454b728b1be79842ca8b9e197a29347bfc02a6830aa7189ccd84469e696daed24fd3e45a403af6d38a2bf3e5e8005b9535a00a5b1520a9665676aa51a1b274a3c0270a20b86a5168e08000fc4cc60673604564f8620e9a2a2374ae148ec6fdbf7e880fb8be7bd85131a3b2cc08e85ff3270a4b433a6f58583a16e5b18eb2a093e6249e0e5e27c13e1cfc3fb8e078ede70034f52f4540f5fc69dc9124671200c5dc6961aee740d39bb5b6ea9f9325f2dc9eb85be46b998b29ed3dd9c7169d58e33efc212c9cc0b09e356e65463b9becc52e7654cb22a374832ad6d4e219e0fc5eddec8debf779031f\n\n# tcId = 23\n# wrong length\nmsg = 54657374\npadding = 3031300d060a60864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 99647015158993892da3dcecb4fd837d0111d7ac81efac2e1bae2242e6605182ff1ed43e41b81b85448367815c6549e363a635b946ada99ca0118cc35f37872aca53b024aab1d809909d27bd664f32be9501c3d4b7e3539c2ef10bfc340a89c23cd2c25e51425e2e7f989076bb716057078c968632e0d47ec81192f37dd5dc4d8a0ffb5e9b828b08b47b350801bb4d358e91165444e8ce8bf5d59d4dae17202919f67c7ec8b78105e255d1714ead968b9c075c11e69b5478c3595756858a98e39f321957b6ddd63b37c69d34891beadfded732f0ba587fba6ca62b0e932acddb5c5a75ac316974dc3b5a27cefd81d799a8a6244a9a78fcbc403e6fb41e4f157c\n\n# tcId = 24\n# wrong length\nmsg = 54657374\npadding = 3031300d060860864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 629e5afc04cc1f4c602f030755deeedb0a5f5c271b3d52556e81c44911296bcdad7f5d223cb6d72cf9740554bdde2936a7e3cbfad72a7704d27343240f68e2f598892911e50340c2c29a41c0d10ebb996c7e92a94fcd23a03507488be345ffd63db338b19e95d47a1095cb6894079865d299ac8101a443e6b5a9557acb9113552932108565d1d3409aa30b6c013c54bc571a08fe9f39c6a3ddaad948656bf77e7407cee8d74a037ca6860a466ad06082c39f9266f7ea16b62b5fc149a7d23093b5f7c48f81673574c8a68b75503c15ae7565775160e16d0e4035489179735c0c9736e52654d4c84c1a785f8b5a9ec2f42aecf88cd925dd274ceeec7e1d31ce4f\n\n# tcId = 25\n# wrong length\nmsg = 54657374\npadding = 3031300d060960864801650304020105010420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 278b61e00fe4e47bfde76cf6c436bfa0e7fed104493a2457ba41ba5fa430cd417ba2ffd345b27d739f6fe7b414e9498e1e44a0a5af8af2f9091f4b42470da0cf09fd1d3542f8a991f4a3be0ac6fb499290889a0e5ba595ca1ed9d97f4407dee17867ca650a49e42c701e3429a34a8bd8e934aa8d107f1761a6fe774c70a974c4ba30990b55a082c87f39266b526c13c4021918196797336e49de36844c908234def2f66aa82e84715834019cbb906011d8bdb29afcbb31dc7503ede0bc39124ac7fe054536d4d79d99186542454253f94a604559a6e992116230c7c9ce4137308b8a091f31843a87e39e29c4ce1520803beeff3fc668741cf504754bc870908d\n\n# tcId = 26\n# wrong length\nmsg = 54657374\npadding = 3031300d060960864801650304020105000421532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = b9709d62db65f1584a5f0dad0602cf2d1ad02447289312f59d001fac696d5b52ac9311e0e5266dc04f5a382405259f6568274a8aca4782d5017b97c765742c6a3bec33c8f3cde398d55bf7ee0b2d3fa768b416c0b1a58e70b865c39057bf6ccea37112ba2d277159ccdbaca928fb4fbf5970296462df7b8ea7715f76c14bf1ac7e4a48a6086e7ffe71653e4246aadcf97a9999782596c87ee5098d788a1a82c2c52bda65ff5c417f9583537aa52c5d8151b3dad189dc0f93758c9e3d45a216359f9952388dfa3eb7b5727774815647b17f6feb39d963340aec6b37507a349eca6c677fdec97d9a5d21a87e999573be5c90d71cbb1b58946036f3f4e6c26dcedb\n\n# tcId = 27\n# wrong length\nmsg = 54657374\npadding = 3031300d06096086480165030402010500041f532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 7cc584726f5874d041a892993bcac52a34e71ba6fe4c3db4d48960b1abae664549656af526b59b3018fbfe7447c4c6730f0e93cb148c0f0fda55fa0a93aebab07519123805ee1d551f19c4c69c09549ae56455710cf7b5468206b820672a0d7221fc7972e958e241d4ad164ef1f90cbf769a1ccb466081cc60877d28a05c91f90eabe57d9ff8d097a3a1f59fa69761f0f3b356c2ce1fa7af8bfc70a1c4753af9c715387a5b3249cb792532d1cba87be23624836eb33f0074e927122479a9d71f1962ee6e7e7be1ead8a514bfed9abfd4cbe33ac2d3adf438bb86ec47734961292bae4b61224e957e331b794c22066cde9e51847dad897e7c65d35c98803830f0\n\n# tcId = 28\n# uint32 overflow in length\nmsg = 54657374\npadding = 30850100000031300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 55d1cee3129381d3c8526661a5f2c9b59bef9972a8d3ecbddd3cd859db06be0971a181d9deb7a7333b3f40eab2e93a67342da7880961fa3b931b3ee94cfa5eb7cc76ca8f6f013bda5b1dff7a7d8ec7afa76fc6acb7809b411e8d77e97fd11f4d13af1033a04b949ce35efdc52e125394759df4f7658fb4c807823f80c01b74c5424744a39193c901a8b7238f77c330f0c37877cdfb493228a600dbb5694ccaf9521b0e2921cf84fb0a778d6616ea76f79d89ddb344834bb34a033f2399289c35ba4b5b70b1aa6d504db3f15cd1be6215678f01f3df03a3a38cd2f6e9d18755c484b4b4ee514c976a7a3edb9d93f475c4fcfa6fec43e6f815095d4dda75a5ec81\n\n# tcId = 29\n# uint32 overflow in length\nmsg = 54657374\npadding = 30363085010000000d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 759135e8b8f94d853d92e75bed21033eaa80c88e1cfa202aeaeee96fc9dd8f5430da9baa436062c843e2a6d06801e4397c93a7643b52e4e33c298638f546be9f8b2961c0da08a172ab2a9185eec9b9b859a8b46cb240317e66469882269a53b34c9db60ba080e1831942db3ad65d3779c7205aaa366c00b6372496d71fd5cebc14b885303fb7c9e968f7d4f9f0511bac5f273608c8803db4ce582eddb0c672d579b4d1d67cb5aaa4fcaa14d744acb8124f3715bb82417ca020cb1b2a597f149364f859d5f1dc17dde4181628b96438df017e9b96b87f45d40383badf6b6a89620adf601c9c4fee15b1a868f8bf7ed6f59d1f9a960fcc1d961c8d010002e238f3\n\n# tcId = 30\n# uint32 overflow in length\nmsg = 54657374\npadding = 303630120685010000000960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 829207379fc900183437b9794d8f7fe9ce67bf4dfb66b04c5e841575ff2ca607766acd6def23b5e22d25be703c0126be641d72f245bcdd60ca0fa8ace694fb8866ded8d5b572852ab899b5ed8808789167ffc699c242c7a6124f6aa6754b2b8c7e654f14aca2446a40f64030b0d836562ea9fd44adb75d235f1b7ea86048b4094aef96f0cd76c31ce25788aa9fae68c1062ae48c9a6b9130652b50be2f98ba64c89a987c0e566ba74bd3616f79567bbdd867f0081e97d0fbc948b6819f46561281061a413b4f3f43d5eb4174052055745d950caa95c320c4c7fc5e02f604071bcc361c20d72dd5509aa496a9bf1d497b61a064893880e052957353b2fab31476\n\n# tcId = 31\n# uint32 overflow in length\nmsg = 54657374\npadding = 303630120609608648016503040201058501000000000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 8daf99c4f0ddc3b0eaa50d674076e2806d744bda24522938c6e4ee2970a5079586d866f0c1abe824b16d40bfe0239aebbecbf67a9155b2855da4656a15d23fc3f1d3518567deec75587d7ea77d3b510b9dd2b1672c8d4774860535f8690a286ea8da3636a1b65f38689b25e9e9b0ddadfb52a0c60ac90b376af968fc654387b5d712f93cfcad8f571ae550072d42b77e439cf28ab0b5857646b4bf2f7b57af7f0443944943828ad174780e1ac0d182fa92cf992991f8fcf2a9d5fcf72eff4ec1847c30f268092b87825fd5931e5306955fe0457e1b9f7162683218f6a9abe5213442a7f8f6a5f4dfbc6084b1bc01f11558fb314a0f07b86b0c6538cd3c7d2fb9\n\n# tcId = 32\n# uint32 overflow in length\nmsg = 54657374\npadding = 3036300d0609608648016503040201050004850100000020532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25\nresult = invalid\nsig = 0b93779478f1ebd8d0b018e0db874d2f639834d48d2440cf5215c9b914acc3a7eb9111b5f77d605903a40c7020ec8a4be9cced3714df84586d5f9e0fe44fc1c61a0ac529e9fda9863086b77555e68e290ef716b9add9455b2349d9e14d7d2825af2ed0f619636c50599616508c79badc2dc2c47489028c5bd793022d189058f559dc272a01ddffddb8fee9d83c259cabecd93398d48591d7acc2787e1b8598cb0218b007440ee11733100ec3a3a9749ed81b3b62d4b9c32dddde30740c4875e451e3cf89fe5a970bb92f4065aa7d43fc6e08eefa416aba932a7bde5a10df11b433527bafb2854439b463f6a0a13ae66265dfabaeb4d8de6eeeba4de45e0be421\n\n# tcId = 33\n# uint64 overflow in length\nmsg = 54657374\npadding = ",
@@ -3412,9 +3383,9 @@
     "81553999ed9e73dc6f4e0cec5b00452391bb7a742f5b932c0a4eccf802120cf]\n[sha = SHA-256]\n\n# tcId = 357\n# short signature\nmsg = 3831\npadding = 3031300d0609608648016503040201050004205316ca1c5ddca8e6ceccfce58f3b8540e540ee22f6180fb89492904051b3d531\nresult = acceptable\nsig = 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020c68149efc8a4a913a26c9170590a1ed9064323c12b6ebde15ae8c05a0e5205c91f57f5753815ff39c918\n# The key for this test vector has a modulus of size < 2048.\n# The key for this test vector uses a small public key.\n\n[e = 3]\n[keyAsn = 30820108028201010090a5d7aba2c8dc828e616fc1fc45c7c52130c8589dcbe2913da187572f6c23217b89a5186b6f90cbe053abfb0885a91f141dbe106ce6ad303904a5941df26ced10478cb56a7bd6cf1313c4966d9cf7c4509d9dc63566aa323e110af219f3398c04e79bb486de8703793473136f5c9051af24bd2c0208ea1bf9321a3e8f24af00aaca1216842eab248d58cf46ac786c49fd3ca8557e9b53993a4b9718cdc5c474bf1cfe58c07ad97b2c5acb7d86accc0fc7bed147adb2e77b8697d80150948117714b806ff76f9d88147d84e93987b724bf4870429e85a7a7b51486a78d8a88f1688f60e215d43d06221e2b993b5c12a607b80e9e0122472b29945f76b55737c1020103]\n[keyDer = 30820120300d06092a864886f70d01010105000382010d0030820108028201010090a5d7aba2c8dc828e616fc1fc45c7c52130c8589dcbe2913da187572f6c23217b89a5186b6f90cbe053abfb0885a91f141dbe106ce6ad303904a5941df26ced10478cb56a7bd6cf1313c4966d9cf7c4509d9dc63566aa323e110af219f3398c04e79bb486de8703793473136f5c9051af24bd2c0208ea1bf9321a3e8f24af00aaca1216842eab248d58cf46ac786c49fd3ca8557e9b53993a4b9718cdc5c474bf1cfe58c07ad97b2c5acb7d86accc0fc7bed147adb2e77b8697d80150948117714b806ff76f9d88147d84e93987b724bf4870429e85a7a7b51486a78d8a88f1688f60e215d43d06221e2b993b5c12a607b80e9e0122472b29945f76b55737c1020103]\n[keysize = 2048]\n[n = 090a5d7aba2c8dc828e616fc1fc45c7c52130c8589dcbe2913da187572f6c23217b89a5186b6f90cbe053abfb0885a91f141dbe106ce6ad303904a5941df26ced10478cb56a7bd6cf1313c4966d9cf7c4509d9dc63566aa323e110af219f3398c04e79bb486de8703793473136f5c9051af24bd2c0208ea1bf9321a3e8f24af00aaca1216842eab248d58cf46ac786c49fd3ca8557e9b53993a4b9718cdc5c474bf1cfe58c07ad97b2c5acb7d86accc0fc7bed147adb2e77b8697d80150948117714b806ff76f9d88147d84e93987b724bf4870429e85a7a7b51486a78d8a88f1688f60e215d43d06221e2b993b5c12a607b80e9e0122472b29945f76b55737c1]\n[sha = SHA-256]\n\n# tcId = 358\n# short signature\nmsg = 33363730\npadding = 3031300d0609608648016503040201050004209385aabddf6b3fe60d2955cb9303e9354b775e8fab2f95cb72ecf3553c64633a\nresult = acceptable\nsig = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000989e7ff72e67e680bd21d5f966e4ad8a48c3592dbacc4a2f035b4ef4d17a2f25f8a9fef7e78eb99d76d68629ed02d67c43c4b7ec8c3badc32e3d0a524c326537739b0fde156723b27c23ae2b09895e470c64d700f5c\n# The key for this test vector uses a small public key.\n\n[e = 3]\n[keyAsn = 308201080282010100f2ed0e93228f37c2ce1c215e00cce4ef00e2c08a004a39c4170dc73e5fbd9b91e7c55e596579ec9c60b9bd341e83029b1934e6493eb60099b6cfbb9804d4179c983099e19102bba49eaa28fa505efacc5a9d5374499c0c5775778317ed370de1919f38aff22d5aee8c8af36a86d036029e761f243dff3c205a11e9bce9ac1d6baf81e79ad4146b119abb13903f8562e8f3e6a918f48223465bc93d5e7d5abe3d08503ec42998fe087a1f935d1b8673c495f005dfa7453daf977e1608a8c276da2a4cd0567e4af4d18cba05fdbedcde74493ccabd9060c27d35a02f35c760b12a4deae1359f649f273fa408626fb789c916434a642d528f41db868ff93b7f889f020103]\n[keyDer = 30820120300d06092a864886f70d01010105000382010d00308201080282010100f2ed0e93228f37c2ce1c215e00cce4ef00e2c08a004a39c4170dc73e5fbd9b91e7c55e596579ec9c60b9bd341e83029b1934e6493eb60099b6cfbb9804d4179c983099e19102bba49eaa28fa505efacc5a9d5374499c0c5775778317ed370de1919f38aff22d5aee8c8af36a86d036029e761f243dff3c205a11e9bce9ac1d6baf81e79ad4146b119abb13903f8562e8f3e6a918f48223465bc93d5e7d5abe3d08503ec42998fe087a1f935d1b8673c495f005dfa7453daf977e1608a8c276da2a4cd0567e4af4d18cba05fdbedcde74493ccabd9060c27d35a02f35c760b12a4deae1359f649f273fa408626fb789c916434a642d528f41db868ff93b7f889f020103]\n[keysize = 2048]\n[n = 0f2ed0e93228f37c2ce1c215e00cce4ef00e2c08a004a39c4170dc73e5fbd9b91e7c55e596579ec9c60b9bd341e83029b1934e6493eb60099b6cfbb9804d4179c983099e19102bba49eaa28fa505efacc5a9d5374499c0c5775778317ed370de1919f38aff22d5aee8c8af36a86d036029e761f243dff3c205a11e9bce9ac1d6baf81e79ad4146b119abb13903f8562e8f3e6a918f48223465bc93d5e7d5abe3d08503ec42998fe087a1f935d1b8673c495f005dfa7453daf977e1608a8c276da2a4cd0567e4af4d18cba05fdbedcde74493ccabd9060c27d35a02f35c760b12a4deae1359f649f273fa408626fb789c916434a642d528f41db868ff93b7f889f]\n[sha = SHA-512]\n\n# tcId = 359\n# short signature\nmsg = 38343432\npadding = 3051300d0609608648016503040203050004406114f0b81fa48090bf41e600bbf301f49262bac5794aae087d8921eb23bf4de867fa9403b85e21cf6f59a14127ef0babdbc425d415f15c0ea18d2962839471cc\nresult = acceptable\nsig = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009e7a1269086f0bbc0778ded8d7108ff4edcc2313425088117b2d5c53e9d9971950a5fe8b2b67d2bcd1be74f6b557a3f90650a96d7e4dbd63c05b94f73337eea682417c058d66ce523e4461065ac8ba990c4ecd04932\n# The key for this test vector uses a small public key.\n\n[e = 3]\n[keyAsn = 308201880282018100ab54a4f2560b9f65faa2f83bcf77d41803c080e4e5c3eab3534210982bba8a5d7e513ba50ba1ece33555c5457c41ba58f3f605a04369408f586c26dfda464c7b300a01f1616893264c7606daad4ced14df9a894a1f34586181294297e3ceb9580b0c785c056d5c566467f6f227f3084918d1cd17ed156e7f9fcce4757c5794f92770771ea5cf3101ca0425c846775f56938c1d1cad4401f4df2f5e0d3a3b2770f99e3c1cb4d9d4896c7ca89287b45831218b099add4bdf1dab6e2fb55d2775429386c85dff32c07a6dda504a9627529dd82c943554aaf23c5a5f6cea9c301b4b1f066b86bbef2e4bae9dc5b5e82e1fa03c29ff8bf38556729b356d5ba41d37a069fcc8fc23ac715bbea04c1972a2d50c57cc0159a46b5919fb670fb2a502d5ab66f0aa99e51016b83a406943ce9bdf0ab9b9e946574a5b32ce95d97ac8b1fbb48f0bf7e3c0d4b7a00d131966d009997a166a6630dee4a74c141cde0114aa423351b1dfdd3893a856fc632b6d90dbc79c8a61a9f9e31702ba69fb222860e60a83020103]\n[keyDer = 308201a0300d06092a864886f70d01010105000382018d00308201880282018100ab54a4f2560b9f65faa2f83bcf77d41803c080e4e5c3eab3534210982bba8a5d7e513ba50ba1ece33555c5457c41ba58f3f605a04369408f586c26dfda464c7b300a01f1616893264c7606daad4ced14df9a894a1f34586181294297e3ceb9580b0c785c056d5c566467f6f227f3084918d1cd17ed156e7f9fcce4757c5794f92770771ea5cf3101ca0425c846775f56938c1d1cad4401f4df2f5e0d3a3b2770f99e3c1cb4d9d4896c7ca89287b45831218b099add4bdf1dab6e2fb55d2775429386c85dff32c07a6dda504a9627529dd82c943554aaf23c5a5f6cea9c301b4b1f066b86bbef2e4bae9dc5b5e82e1fa03c29ff8bf38556729b356d5ba41d37a069fcc8fc23ac715bbea04c1972a2d50c57cc0159a46b5919fb670fb2a502d5ab66f0aa99e51016b83a406943ce9bdf0ab9b9e946574a5b32ce95d97ac8b1fbb48f0bf7e3c0d4b7a00d131966d009997a166a6630dee4a74c141cde0114aa423351b1dfdd3893a856fc632b6d90dbc79c8a61a9f9e31702ba69fb222860e60a83020103]\n[keysize = 3072]\n[n = 0ab54a4f2560b9f65faa2f83bcf77d41803c080e4e5c3eab3534210982bba8a5d7e513ba50ba1ece33555c5457c41ba58f3f605a04369408f586c26dfda464c7b300a01f1616893264c7606daad4ced14df9a894a1f34586181294297e3ceb9580b0c785c056d5c566467f6f227f3084918d1cd17ed156e7f9fcce4757c5794f92770771ea5cf3101ca0425c846775f56938c1d1cad4401f4df2f5e0d3a3b2770f99e3c1cb4d9d4896c7ca89287b45831218b099add4bdf1dab6e2fb55d2775429386c85dff32c07a6dda504a9627529dd82c943554aaf23c5a5f6cea9c301b4b1f066b86bbef2e4bae9dc5b5e82e1fa03c29ff8bf38556729b356d5ba41d37a069fcc8fc23ac715bbea04c1972a2d50c57cc0159a46b5919fb670fb2a502d5ab66f0aa99e51016b83a406943ce9bdf0ab9b9e946574a5b32ce95d97ac8b1fbb48f0bf7e3c0d4b7a00d131966d009997a166a6630dee4a74c141cde0114aa423351b1dfdd3893a856fc632b6d90dbc79c8a61a9f9e31702ba69fb222860e60a83]\n[sha = SHA-256]\n\n# tcId = 360\n# short signature\nmsg = 34333630\npadding = 3031300d060960864801650304020105000420",
     "5d19d2275db8df24fd8e87092599d5b8c7c798f483bbb6cddb4310353b903971\nresult = acceptable\nsig = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011a21abeac8409398319e65c8656f8f72e179dd1e99358c7531fddc037e47c1e688cd70eafd6eea01c823516bc79f89d7e52ee1eb4ffdeaad1d550dc0a47185bc9c42e47fce5503c3370a60510f834b4691152ef668deca633cf3873ce6613951784aa7dafde118f37f1cdf1a687ac236d5c956bced564b73cf202e3bace59667\n# The key for this test vector uses a small public key.\n\n[e = 3]\n[keyAsn = 3082018802820181008733b9c2bc754216fac899159abb71c5ca84be37153720040f33f291f5f7861bc122cafde3091b5211bc81ee03e280e3c6c2902ec49afb8432c3273536edce7116048513e9b33e2fcfe56f9597c81bc9be81a1b1d46e863ca11db2c33ac1bdebf7c552332067e2e588497e7d9e0738caa57a73dd28157e88fc202b31bbe3b9993548399a0b0df9b72dfeece75ecd78376227e9cd21c8d24ca4aa64fa50a59ee8e7621158e7bac2420fc0d77064d3959afab664ecda0decb8c979eb402795b9a562f2de310aa7fc6864469ac88867788c57ee96f6dc32dbdbe3aa7d3ff47ae4b78e1106e1bc80350b2383dae54140a4605f4130d7e5d3f7818262a27c76a51e4c6db4ab4590b4766b8c50ec1bfed53f0d716b5c7d9dc971399246c75ce27745147151f2e7629039f0b2efed99c7f17cda8f3c3df764dfb40cc0c2ad7bf2b6c72829df93329a4bad6be8635953dd10840888784eea738c763be9f5dc3ba47a9e9d800e21b4ffcc18193e591e8a5283192426e8867331c72bdda06a0eb49367bb01020103]\n[keyDer = 308201a0300d06092a864886f70d01010105000382018d003082018802820181008733b9c2bc754216fac899159abb71c5ca84be37153720040f33f291f5f7861bc122cafde3091b5211bc81ee03e280e3c6c2902ec49afb8432c3273536edce7116048513e9b33e2fcfe56f9597c81bc9be81a1b1d46e863ca11db2c33ac1bdebf7c552332067e2e588497e7d9e0738caa57a73dd28157e88fc202b31bbe3b9993548399a0b0df9b72dfeece75ecd78376227e9cd21c8d24ca4aa64fa50a59ee8e7621158e7bac2420fc0d77064d3959afab664ecda0decb8c979eb402795b9a562f2de310aa7fc6864469ac88867788c57ee96f6dc32dbdbe3aa7d3ff47ae4b78e1106e1bc80350b2383dae54140a4605f4130d7e5d3f7818262a27c76a51e4c6db4ab4590b4766b8c50ec1bfed53f0d716b5c7d9dc971399246c75ce27745147151f2e7629039f0b2efed99c7f17cda8f3c3df764dfb40cc0c2ad7bf2b6c72829df93329a4bad6be8635953dd10840888784eea738c763be9f5dc3ba47a9e9d800e21b4ffcc18193e591e8a5283192426e8867331c72bdda06a0eb49367bb01020103]\n[keysize = 3072]\n[n = 08733b9c2bc754216fac899159abb71c5ca84be37153720040f33f291f5f7861bc122cafde3091b5211bc81ee03e280e3c6c2902ec49afb8432c3273536edce7116048513e9b33e2fcfe56f9597c81bc9be81a1b1d46e863ca11db2c33ac1bdebf7c552332067e2e588497e7d9e0738caa57a73dd28157e88fc202b31bbe3b9993548399a0b0df9b72dfeece75ecd78376227e9cd21c8d24ca4aa64fa50a59ee8e7621158e7bac2420fc0d77064d3959afab664ecda0decb8c979eb402795b9a562f2de310aa7fc6864469ac88867788c57ee96f6dc32dbdbe3aa7d3ff47ae4b78e1106e1bc80350b2383dae54140a4605f4130d7e5d3f7818262a27c76a51e4c6db4ab4590b4766b8c50ec1bfed53f0d716b5c7d9dc971399246c75ce27745147151f2e7629039f0b2efed99c7f17cda8f3c3df764dfb40cc0c2ad7bf2b6c72829df93329a4bad6be8635953dd10840888784eea738c763be9f5dc3ba47a9e9d800e21b4ffcc18193e591e8a5283192426e8867331c72bdda06a0eb49367bb01]\n[sha = SHA-512]\n\n# tcId = 361\n# short signature\nmsg = 36313237\npadding = 3051300d060960864801650304020305000440925eb0238e4d842826b081a74083e55a2d89e67c524d5a903366c1e26afd1e478cb4779e6f69eb70e7034556745f6bddf9547987d8785a7deaa8765aaffbf2c5\nresult = acceptable\nsig = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001bdd0c9e451b5b3e5513a94492dbee1ada9ea87e65a8cd95cceb4d304294ce34bf09a212f14908f5b865c7a34a72e68e389794a2d1c5767ba17829e2044108ac7842b6bfe0a5663b433d656f4e38522c5a5a23c460b898833828d257350e5814291b54cf13089080f84998edcacf0fe5fca0c1f8b176b172c5f9989491a039bef\n# The key for this test vector uses a small public key.\n\n[e = 3]\n[keyAsn = 30820108028201010092bf17cdbffb42fa9957ce37826bb451708e7cdec8752b809c81a8d16fe5fe4dab6a9db6d11dbb12086645db7546642b322e8331dd7f29eff68bf40b24f80884f5152b1fda9b9f7ae2fce2721cdee0fc48f85a6e8e64f767ed9727fd2dc597967e276a5e2e768528afdd9df4b6ddda4c174300e4da3c19a3c32299e1e7857934c14dd6203d8c2671289bc392711597155364a59046b2b9f1905fe717ca7efebb4c1969b804118effa240c11ebf97cd68c2aa19c787b3be21e68c0e397c7f04c6ef98950e27e0e19a40da92a3ea10800fe9252b77026d14c2fa1eb4ac102491e5773279f07d856d446f45169b09bf60b8a2695f5e4864eaaf9590aec8c7c2f86d020103]\n[keyDer = 30820120300d06092a864886f70d01010105000382010d0030820108028201010092bf17cdbffb42fa9957ce37826bb451708e7cdec8752b809c81a8d16fe5fe4dab6a9db6d11dbb12086645db7546642b322e8331dd7f29eff68bf40b24f80884f5152b1fda9b9f7ae2fce2721cdee0fc48f85a6e8e64f767ed9727fd2dc597967e276a5e2e768528afdd9df4b6ddda4c174300e4da3c19a3c32299e1e7857934c14dd6203d8c2671289bc392711597155364a59046b2b9f1905fe717ca7efebb4c1969b804118effa240c11ebf97cd68c2aa19c787b3be21e68c0e397c7f04c6ef98950e27e0e19a40da92a3ea10800fe9252b77026d14c2fa1eb4ac102491e5773279f07d856d446f45169b09bf60b8a2695f5e4864eaaf9590aec8c7c2f86d020103]\n[keysize = 2048]\n[n = 092bf17cdbffb42fa9957ce37826bb451708e7cdec8752b809c81a8d16fe5fe4dab6a9db6d11dbb12086645db7546642b322e8331dd7f29eff68bf40b24f80884f5152b1fda9b9f7ae2fce2721cdee0fc48f85a6e8e64f767ed9727fd2dc597967e276a5e2e768528afdd9df4b6ddda4c174300e4da3c19a3c32299e1e7857934c14dd6203d8c2671289bc392711597155364a59046b2b9f1905fe717ca7efebb4c1969b804118effa240c11ebf97cd68c2aa19c787b3be21e68c0e397c7f04c6ef98950e27e0e19a40da92a3ea10800fe9252b77026d14c2fa1eb4ac102491e5773279f07d856d446f45169b09bf60b8a2695f5e4864eaaf9590aec8c7c2f86d]\n[sha = SHA-256]\n\n# tcId = 362\n# signature is close to n\nmsg = 32353934\npadding = 3031300d0609608648016503040201050004208f87edbf7e3fbfba22df722036c493b7b8f35321b7d147f22c4789a9d0a4cbc1\nresult = acceptable\nsig = 92bf17cdbffb42fa9957ce37826bb451708e7cdec8752b809c81a8d16fe5fe4dab6a9db6d11dbb12086645db7546642b322e8331dd7f29eff68bf40b24f80884f5152b1fda9b9f7ae2fce2721cdee0fc48f85a6e8e64f767ed9727fd2dc597967e276a5e2e768528afdd9df4b6ddda4c174300e4da3c19a3c32299e1e7857934c14dd6203d8c2671289bc392711597155364a59046b2b9f1905fe717ca7efebb4c1969b804118effa240b8bf4bb1a6d0616fd5be2f081dc9ef741a9a4ae7274418b791432de470c4556463108388e8e8ed5dcebf3558e4650c2ac97c86fa682176f09b5dd8cfbf15d19c3fe4f961f4607c12cb3dfad9b6a0e59c92faa1fc8622\n# The key for this test vector uses a small public key.\n\n",
 };
-static const size_t kLen85 = 35004;
+static const size_t kLen83 = 35004;
 
-static const char *kData85[] = {
+static const char *kData83[] = {
     "# Imported from Wycheproof's x25519_test.json.\n# This file is generated by convert_wycheproof.go. Do not edit by hand.\n#\n# Algorithm: X25519\n# Generator version: 0.4.12\n\n[curve = curve25519]\n\n# tcId = 1\n# normal case\ncurve = curve25519\nprivate = 4852834d9d6b77dadeabaaf2e11dca66d19fe74993a7bec36c6e16a0983feaba\npublic = 9c647d9ae589b9f58fdc3ca4947efbc915c4b2e08e744a0edf469dac59c8f85a\nresult = valid\nshared = 87b7f212b627f7a54ca5e0bcdaddd5389d9de6156cdbcf8ebe14ffbcfb436551\n\n# tcId = 2\n# normal case\ncurve = curve25519\nprivate = 1064a67da639a8f6df4fbea2d63358b65bca80a770712e14ea8a72df5a3313ae\npublic = 9c647d9ae589b9f58fdc3ca4947efbc915c4b2e08e744a0edf469dac59c8f85a\nresult = valid\nshared = 4b82bd8650ea9b81a42181840926a4ffa16434d1bf298de1db87efb5b0a9e34e\n# Curve25519 or its twist contains some points of low order. This test vector\n# contains a public key with such a point. While many libraries reject such\n# public keys, doing so is not a strict requirement according to RFC 7748.\n\n# tcId = 3\n# public key on twist\ncurve = curve25519\nprivate = 588c061a50804ac488ad774ac716c3f5ba714b2712e048491379a500211998a8\npublic = 63aa40c6e38346c5caf23a6df0a5e6c80889a08647e551b3563449befcfc9733\nresult = acceptable\nshared = b1a707519495ffffb298ff941716b06dfab87cf8d91123fe2be9a233dda22212\n# Public keys are either points on curve25519 or points on its twist.\n# Implementations may either reject such keys or compute X25519 using the twist.\n# If a point multiplication is performed then it is important that the result is\n# correct, since otherwise attacks with invalid keys are possible.\n\n# tcId = 4\n# public key on twist\ncurve = curve25519\nprivate = b05bfd32e55325d9fd648cb302848039000b390e44d521e58aab3b29a6960ba8\npublic = 0f83c36fded9d32fadf4efa3ae93a90bb5cfa66893bc412c43fa7287dbb99779\nresult = acceptable\nshared = 67dd4a6e165533534c0e3f172e4ab8576bca923a5f07b2c069b4c310ff2e935b\n# Public keys are either points on curve25519 or points on its twist.\n# Implementations may either reject such keys or compute X25519 using the twist.\n# If a point multiplication is performed then it is important that the result is\n# correct, since otherwise attacks with invalid keys are possible.\n\n# tcId = 5\n# public key on twist\ncurve = curve25519\nprivate = 70e34bcbe1f47fbc0fddfd7c1e1aa53d57bfe0f66d243067b424bb6210bed19c\npublic = 0b8211a2b6049097f6871c6c052d3c5fc1ba17da9e32ae458403b05bb283092a\nresult = acceptable\nshared = 4a0638cfaa9ef1933b47f8939296a6b25be541ef7f70e844c0bcc00b134de64a\n# Public keys are either points on curve25519 or points on its twist.\n# Implementations may either reject such keys or compute X25519 using the twist.\n# If a point multiplication is performed then it is important that the result is\n# correct, since otherwise attacks with invalid keys are possible.\n\n# tcId = 6\n# public key on twist\ncurve = curve25519\nprivate = 68c1f3a653a4cdb1d37bba94738f8b957a57beb24d646e994dc29a276aad458d\npublic = 343ac20a3b9c6a27b1008176509ad30735856ec1c8d8fcae13912d08d152f46c\nresult = acceptable\nshared = 399491fce8dfab73b4f9f611de8ea0b27b28f85994250b0f475d585d042ac207\n# Public keys are either points on curve25519 or points on its twist.\n# Implementations may either reject such keys or compute X25519 using the twist.\n# If a point multiplication is performed then it is important that the result is\n# correct, since otherwise attacks with invalid keys are possible.\n\n# tcId = 7\n# public key on twist\ncurve = curve25519\nprivate = d877b26d06dff9d9f7fd4c5b3769f8cdd5b30516a5ab806be324ff3eb69ea0b2\npublic = fa695fc7be8d1be5bf704898f388c452bafdd3b8eae805f8681a8d15c2d4e142\nresult = acceptable\nshared = 2c4fe11d490a53861776b13b4354abd4cf5a97699db6e6c68c1626d07662f758\n# Public keys are either points on curve25519 or points on its twist.\n# Implementations may either reject such keys or compute X25519 using the twist.\n# If a point multiplication is performed then it is important that the result is\n# correct, since otherwise attacks with invalid keys are possible.\n\n# tcId = 8\n# public key = 0\ncurve = curve25519\nprivate = 207494038f2bb811d47805bcdf04a2ac585ada7f2f23389bfd4658f9ddd4debc\npublic = 0000000000000000000000000000000000000000000000000000000000000000\nresult = acceptable\nshared = 0000000000000000000000000000000000000000000000000000000000000000\n# The public key is insecure and does not belong to a valid private key. Some\n# libraries reject such keys.\n\n# tcId = 9\n# public key = 1\ncurve = curve25519\nprivate = 202e8972b61c7e61930eb9450b5070eae1c670475685541f0476217e4818cfab\npublic = 0100000000000000000000000000000000000000000000000000000000000000\nresult = acceptable\nshared = 0000000000000000000000000000000000000000000000000000000000000000\n# The public key is insecure and does not belong to a valid private key. Some\n# libraries reject such keys.\n\n# tcId = 10\n# edge case on twist\ncurve = curve25519\nprivate = 38dde9f3e7b799045f9ac3793d4a9277dadeadc41bec0290f81f744f73775f84\npublic = 0200000000000000000000000000000000000000000000000000000000000000\nresult = acceptable\nshared = 9a2cfe84ff9c4a9739625cae4a3b82a906877a441946f8d7b3d795fe8f5d1639\n# Public keys are either points on curve25519 or points on its twist.\n# Implementations may either reject such keys or compute X25519 using the twist.\n# If a point multiplication is performed then it is important that the result is\n# correct, since otherwise attacks with invalid keys are possible.\n\n# tcId = 11\n# edge case on twist\ncurve = curve25519\nprivate = 9857a914e3c29036fd9a442ba526b5cdcdf28216153e636c10677acab6bd6aa5\npublic = 0300000000000000000000000000000000000000000000000000000000000000\nresult = acceptable\nshared = 4da4e0aa072c232ee2f0fa4e519ae50b52c1edd08a534d4ef346c2e106d21d60\n# Public keys are either points on curve25519 or points on its twist.\n# Implementations may either reject such keys or compute X25519 using the twist.\n# If a point multiplication is performed then it is important that the result is\n# correct, since otherwise attacks with invalid keys are possible.\n\n# tcId = 12\n# edge case on twist\ncurve = curve25519\nprivate = 48e2130d723305ed05e6e5894d398a5e33367a8c6aac8fcdf0a88e4b42820db7\npublic = ffffff030000f8ffff1f0000c0ffffff000000feffff070000f0ffff3f000000\nresult = acceptable\nshared = 9ed10c53747f647f82f45125d3de15a1e6b824496ab40410ffcc3cfe95760f3b\n# Public keys are either points on curve25519 or points on its twist.\n# Implementations may either reject such keys or compute X25519 using the twist.\n# If a point multiplication is performed then it is important that the result is\n# correct, since otherwise attacks with invalid keys are possible.\n\n# tcId = 13\n# edge case on twist\ncurve = curve25519\nprivate = 28f41011691851b3a62b641553b30d0dfddcb8fffcf53700a7be2f6a872e9fb0\npublic = 000000fcffff070000e0ffff3f000000ffffff010000f8ffff0f0000c0ffff7f\nresult = acceptable\nshared = cf72b4aa6aa1c9f894f4165b86109aa468517648e1f0cc70e1ab08460176506b\n# Public keys are either points on curve25519 or points on its twist.\n# Implementations may either reject such keys or compute X25519 using the twist.\n# If a point multiplication is performed then it is important that the result is\n# correct, since otherwise attacks with invalid keys are possible.\n\n# tcId = 14\n# edge case on twist\ncurve = curve25519\nprivate = 18a93b6499b9f6b3225ca02fef410e0adec23532321d2d8ef1a6d602a8c65b83\npublic = 00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffff7f\nresult = acceptable\nshared = 5d50b62836bb69579410386cf7bb811c14bf85b1c7b17e5924c7ffea91ef9e12\n# Public keys are either points on curve25519 or points on its twist.\n# Implementations may either reject such keys or compute X25519 using the twist.\n# If a point multiplication is performed then it is important that the result is\n# correct, since otherwise attacks with invalid keys are possible.\n\n# tcId = 15\n# edge case on twist\ncurve = curve25519\nprivate = c01d1305a1338a1fcac2ba7e2e032b427e0b04903165aca957d8d0553d8717b0\npublic = eaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f\nresult = acceptable\nshared = 19230eb148d5d67c3c22ab1daeff80a57eae4265ce2872657b2c8099fc698e50\n# Public keys are either points on curve25519 or points on its twist.\n# Implementations may either reject such keys or compute X25519 using the twist.\n# If a poin",
     "t multiplication is performed then it is important that the result is\n# correct, since otherwise attacks with invalid keys are possible.\n\n# tcId = 16\n# edge case for public key\ncurve = curve25519\nprivate = 386f7f16c50731d64f82e6a170b142a4e34f31fd7768fcb8902925e7d1e21abe\npublic = 0400000000000000000000000000000000000000000000000000000000000000\nresult = valid\nshared = 0fcab5d842a078d7a71fc59b57bfb4ca0be6873b49dcdb9f44e14ae8fbdfa542\n\n# tcId = 17\n# edge case for public key\ncurve = curve25519\nprivate = e023a289bd5e90fa2804ddc019a05ef3e79d434bb6ea2f522ecb643a75296e95\npublic = ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000\nresult = valid\nshared = 54ce8f2275c077e3b1306a3939c5e03eef6bbb88060544758d9fef59b0bc3e4f\n\n# tcId = 18\n# edge case for public key\ncurve = curve25519\nprivate = 68f010d62ee8d926053a361c3a75c6ea4ebdc8606ab285003a6f8f4076b01e83\npublic = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03\nresult = valid\nshared = f136775c5beb0af8110af10b20372332043cab752419678775a223df57c9d30d\n\n# tcId = 19\n# edge case for public key\ncurve = curve25519\nprivate = 58ebcb35b0f8845caf1ec630f96576b62c4b7b6c36b29deb2cb0084651755c96\npublic = fffffffbfffffbffffdfffffdffffffffefffffefffff7fffff7ffffbfffff3f\nresult = valid\nshared = bf9affd06b844085586460962ef2146ff3d4533d9444aab006eb88cc3054407d\n\n# tcId = 20\n# edge case for public key\ncurve = curve25519\nprivate = 188c4bc5b9c44b38bb658b9b2ae82d5b01015e093184b17cb7863503a783e1bb\npublic = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3f\nresult = valid\nshared = d480de04f699cb3be0684a9cc2e31281ea0bc5a9dcc157d3d20158d46ca5246d\n\n# tcId = 21\n# edge case for public key\ncurve = curve25519\nprivate = e06c11bb2e13ce3dc7673f67f5482242909423a9ae95ee986a988d98faee23a2\npublic = fffffffffeffff7ffffffffffeffff7ffffffffffeffff7ffffffffffeffff7f\nresult = valid\nshared = 4c4401cce6b51e4cb18f2790246c9bf914db667750a1cb89069092af07292276\n\n# tcId = 22\n# edge case for public key\ncurve = curve25519\nprivate = c0658c46dde18129293877535b1162b6f9f5414a23cf4d2cbc140a4d99da2b8f\npublic = ebffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f\nresult = valid\nshared = 578ba8cc2dbdc575afcf9df2b3ee6189f5337d6854c79b4ce165ea12293b3a0f\n\n# tcId = 23\n# public key with low order\ncurve = curve25519\nprivate = 10255c9230a97a30a458ca284a629669293a31890cda9d147febc7d1e22d6bb1\npublic = e0eb7a7c3b41b8ae1656e3faf19fc46ada098deb9c32b1fd866205165f49b800\nresult = acceptable\nshared = 0000000000000000000000000000000000000000000000000000000000000000\n# Curve25519 or its twist contains some points of low order. This test vector\n# contains a public key with such a point. While many libraries reject such\n# public keys, doing so is not a strict requirement according to RFC 7748.\n\n# tcId = 24\n# public key with low order\ncurve = curve25519\nprivate = 78f1e8edf14481b389448dac8f59c70b038e7cf92ef2c7eff57a72466e115296\npublic = 5f9c95bca3508c24b1d0b1559c83ef5b04445cc4581c8e86d8224eddd09f1157\nresult = acceptable\nshared = 0000000000000000000000000000000000000000000000000000000000000000\n# Curve25519 or its twist contains some points of low order. This test vector\n# contains a public key with such a point. While many libraries reject such\n# public keys, doing so is not a strict requirement according to RFC 7748.\n\n# tcId = 25\n# public key with low order\ncurve = curve25519\nprivate = a0a05a3e8f9f44204d5f8059a94ac7dfc39a49ac016dd743dbfa43c5d671fd88\npublic = ecffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f\nresult = acceptable\nshared = 0000000000000000000000000000000000000000000000000000000000000000\n# Curve25519 or its twist contains some points of low order. This test vector\n# contains a public key with such a point. While many libraries reject such\n# public keys, doing so is not a strict requirement according to RFC 7748.\n\n# tcId = 26\n# public key with low order\ncurve = curve25519\nprivate = d0dbb3ed1906663f15420af31f4eaf6509d9a9949723500605ad7c1c6e7450a9\npublic = edffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f\nresult = acceptable\nshared = 0000000000000000000000000000000000000000000000000000000000000000\n# Curve25519 or its twist contains some points of low order. This test vector\n# contains a public key with such a point. While many libraries reject such\n# public keys, doing so is not a strict requirement according to RFC 7748.\n\n# tcId = 27\n# public key with low order\ncurve = curve25519\nprivate = c0b1d0eb22b244fe3291140072cdd9d989b5f0ecd96c100feb5bca241c1d9f8f\npublic = eeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f\nresult = acceptable\nshared = 0000000000000000000000000000000000000000000000000000000000000000\n# Curve25519 or its twist contains some points of low order. This test vector\n# contains a public key with such a point. While many libraries reject such\n# public keys, doing so is not a strict requirement according to RFC 7748.\n\n# tcId = 28\n# public key with low order\ncurve = curve25519\nprivate = 480bf45f594942a8bc0f3353c6e8b8853d77f351f1c2ca6c2d1abf8a00b4229c\npublic = 0000000000000000000000000000000000000000000000000000000000000080\nresult = acceptable\nshared = 0000000000000000000000000000000000000000000000000000000000000000\n# Curve25519 or its twist contains some points of low order. This test vector\n# contains a public key with such a point. While many libraries reject such\n# public keys, doing so is not a strict requirement according to RFC 7748.\n\n# tcId = 29\n# public key with low order\ncurve = curve25519\nprivate = 30f993fcf8514fc89bd8db14cd43ba0d4b2530e73c4276a05e1b145d420cedb4\npublic = 0100000000000000000000000000000000000000000000000000000000000080\nresult = acceptable\nshared = 0000000000000000000000000000000000000000000000000000000000000000\n# Curve25519 or its twist contains some points of low order. This test vector\n# contains a public key with such a point. While many libraries reject such\n# public keys, doing so is not a strict requirement according to RFC 7748.\n\n# tcId = 30\n# public key with low order\ncurve = curve25519\nprivate = c04974b758380e2a5b5df6eb09bb2f6b3434f982722a8e676d3da251d1b3de83\npublic = e0eb7a7c3b41b8ae1656e3faf19fc46ada098deb9c32b1fd866205165f49b880\nresult = acceptable\nshared = 0000000000000000000000000000000000000000000000000000000000000000\n# Curve25519 or its twist contains some points of low order. This test vector\n# contains a public key with such a point. While many libraries reject such\n# public keys, doing so is not a strict requirement according to RFC 7748.\n\n# tcId = 31\n# public key with low order\ncurve = curve25519\nprivate = 502a31373db32446842fe5add3e024022ea54f274182afc3d9f1bb3d39534eb5\npublic = 5f9c95bca3508c24b1d0b1559c83ef5b04445cc4581c8e86d8224eddd09f11d7\nresult = acceptable\nshared = 0000000000000000000000000000000000000000000000000000000000000000\n# Curve25519 or its twist contains some points of low order. This test vector\n# contains a public key with such a point. While many libraries reject such\n# public keys, doing so is not a strict requirement according to RFC 7748.\n\n# tcId = 32\n# public key with low order\ncurve = curve25519\nprivate = 90fa6417b0e37030fd6e43eff2abaef14c6793117a039cf621318ba90f4e98be\npublic = ecffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\nresult = acceptable\nshared = 0000000000000000000000000000000000000000000000000000000000000000\n# Curve25519 or its twist contains some points of low order. This test vector\n# contains a public key with such a point. While many libraries reject such\n# public keys, doing so is not a strict requirement according to RFC 7748.\n\n# tcId = 33\n# public key with low order\ncurve = curve25519\nprivate = 78ad3f26027f1c9fdd975a1613b947779bad2cf2b741ade01840885a30bb979c\npublic = edffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\nresult = acceptable\nshared = 0000000000000000000000000000000000000000000000000000000000000000\n# Curve25519 or its twist contains some points of low order. This test vector\n# contains a public key with such a point. While many libraries reject such\n# public keys, doing so is not a strict requirement according to RFC 7748.\n\n# tcId = 34\n# public key with low order\ncurve = curve25519\nprivate = 98e23de7b1e0926ed9c87e7b14baf55f497a1d7096f93977680e44",
     "dc1c7b7b8b\npublic = eeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\nresult = acceptable\nshared = 0000000000000000000000000000000000000000000000000000000000000000\n# Curve25519 or its twist contains some points of low order. This test vector\n# contains a public key with such a point. While many libraries reject such\n# public keys, doing so is not a strict requirement according to RFC 7748.\n\n# tcId = 35\n# public key with low order\ncurve = curve25519\nprivate = 1064a67da639a8f6df4fbea2d63358b65bca80a770712e14ea8a72df5a3313ae\npublic = 0000000000000000000000000000000000000000000000000000000000000000\nresult = acceptable\nshared = 0000000000000000000000000000000000000000000000000000000000000000\n\n# tcId = 36\n# public key with low order\ncurve = curve25519\nprivate = 1064a67da639a8f6df4fbea2d63358b65bca80a770712e14ea8a72df5a3313ae\npublic = 0100000000000000000000000000000000000000000000000000000000000000\nresult = acceptable\nshared = 0000000000000000000000000000000000000000000000000000000000000000\n\n# tcId = 37\n# public key with low order\ncurve = curve25519\nprivate = 1064a67da639a8f6df4fbea2d63358b65bca80a770712e14ea8a72df5a3313ae\npublic = ecffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f\nresult = acceptable\nshared = 0000000000000000000000000000000000000000000000000000000000000000\n\n# tcId = 38\n# public key with low order\ncurve = curve25519\nprivate = 1064a67da639a8f6df4fbea2d63358b65bca80a770712e14ea8a72df5a3313ae\npublic = 5f9c95bca3508c24b1d0b1559c83ef5b04445cc4581c8e86d8224eddd09f1157\nresult = acceptable\nshared = 0000000000000000000000000000000000000000000000000000000000000000\n\n# tcId = 39\n# public key with low order\ncurve = curve25519\nprivate = 1064a67da639a8f6df4fbea2d63358b65bca80a770712e14ea8a72df5a3313ae\npublic = e0eb7a7c3b41b8ae1656e3faf19fc46ada098deb9c32b1fd866205165f49b800\nresult = acceptable\nshared = 0000000000000000000000000000000000000000000000000000000000000000\n\n# tcId = 40\n# public key with low order\ncurve = curve25519\nprivate = 1064a67da639a8f6df4fbea2d63358b65bca80a770712e14ea8a72df5a3313ae\npublic = edffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f\nresult = acceptable\nshared = 0000000000000000000000000000000000000000000000000000000000000000\n\n# tcId = 41\n# public key with low order\ncurve = curve25519\nprivate = 1064a67da639a8f6df4fbea2d63358b65bca80a770712e14ea8a72df5a3313ae\npublic = eeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f\nresult = acceptable\nshared = 0000000000000000000000000000000000000000000000000000000000000000\n\n# tcId = 42\n# public key with low order\ncurve = curve25519\nprivate = 1064a67da639a8f6df4fbea2d63358b65bca80a770712e14ea8a72df5a3313ae\npublic = 0000000000000000000000000000000000000000000000000000000000000080\nresult = acceptable\nshared = 0000000000000000000000000000000000000000000000000000000000000000\n\n# tcId = 43\n# public key with low order\ncurve = curve25519\nprivate = 1064a67da639a8f6df4fbea2d63358b65bca80a770712e14ea8a72df5a3313ae\npublic = 0100000000000000000000000000000000000000000000000000000000000080\nresult = acceptable\nshared = 0000000000000000000000000000000000000000000000000000000000000000\n\n# tcId = 44\n# public key with low order\ncurve = curve25519\nprivate = 1064a67da639a8f6df4fbea2d63358b65bca80a770712e14ea8a72df5a3313ae\npublic = ecffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\nresult = acceptable\nshared = 0000000000000000000000000000000000000000000000000000000000000000\n\n# tcId = 45\n# public key with low order\ncurve = curve25519\nprivate = 1064a67da639a8f6df4fbea2d63358b65bca80a770712e14ea8a72df5a3313ae\npublic = 5f9c95bca3508c24b1d0b1559c83ef5b04445cc4581c8e86d8224eddd09f11d7\nresult = acceptable\nshared = 0000000000000000000000000000000000000000000000000000000000000000\n\n# tcId = 46\n# public key with low order\ncurve = curve25519\nprivate = 1064a67da639a8f6df4fbea2d63358b65bca80a770712e14ea8a72df5a3313ae\npublic = e0eb7a7c3b41b8ae1656e3faf19fc46ada098deb9c32b1fd866205165f49b880\nresult = acceptable\nshared = 0000000000000000000000000000000000000000000000000000000000000000\n\n# tcId = 47\n# public key with low order\ncurve = curve25519\nprivate = 1064a67da639a8f6df4fbea2d63358b65bca80a770712e14ea8a72df5a3313ae\npublic = edffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\nresult = acceptable\nshared = 0000000000000000000000000000000000000000000000000000000000000000\n\n# tcId = 48\n# public key with low order\ncurve = curve25519\nprivate = 1064a67da639a8f6df4fbea2d63358b65bca80a770712e14ea8a72df5a3313ae\npublic = eeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\nresult = acceptable\nshared = 0000000000000000000000000000000000000000000000000000000000000000\n\n# tcId = 49\n# public key >= p\ncurve = curve25519\nprivate = f01e48dafac9d7bcf589cbc382c878d18bda3550589ffb5d50b523bebe329dae\npublic = efffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f\nresult = acceptable\nshared = bd36a0790eb883098c988b21786773de0b3a4df162282cf110de18dd484ce74b\n\n# tcId = 50\n# public key >= p\ncurve = curve25519\nprivate = 288796bc5aff4b81a37501757bc0753a3c21964790d38699308debc17a6eaf8d\npublic = f0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f\nresult = acceptable\nshared = b4e0dd76da7b071728b61f856771aa356e57eda78a5b1655cc3820fb5f854c5c\n\n# tcId = 51\n# public key >= p\ncurve = curve25519\nprivate = 98df845f6651bf1138221f119041f72b6dbc3c4ace7143d99fd55ad867480da8\npublic = f1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f\nresult = acceptable\nshared = 6fdf6c37611dbd5304dc0f2eb7c9517eb3c50e12fd050ac6dec27071d4bfc034\n\n# tcId = 52\n# public key >= p\ncurve = curve25519\nprivate = f09498e46f02f878829e78b803d316a2ed695d0498a08abdf8276930e24edcb0\npublic = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f\nresult = acceptable\nshared = 4c8fc4b1c6ab88fb21f18f6d4c810240d4e94651ba44f7a2c863cec7dc56602d\n\n# tcId = 53\n# public key >= p\ncurve = curve25519\nprivate = 1813c10a5c7f21f96e17f288c0cc37607c04c5f5aea2db134f9e2ffc66bd9db8\npublic = 0200000000000000000000000000000000000000000000000000000000000080\nresult = acceptable\nshared = 1cd0b28267dc541c642d6d7dca44a8b38a63736eef5c4e6501ffbbb1780c033c\n\n# tcId = 54\n# public key >= p\ncurve = curve25519\nprivate = 7857fb808653645a0beb138a64f5f4d733a45ea84c3cda11a9c06f7e7139149e\npublic = 0300000000000000000000000000000000000000000000000000000000000080\nresult = acceptable\nshared = 8755be01c60a7e825cff3e0e78cb3aa4333861516aa59b1c51a8b2a543dfa822\n\n# tcId = 55\n# public key >= p\ncurve = curve25519\nprivate = e03aa842e2abc56e81e87b8b9f417b2a1e5913c723eed28d752f8d47a59f498f\npublic = 0400000000000000000000000000000000000000000000000000000000000080\nresult = acceptable\nshared = 54c9a1ed95e546d27822a360931dda60a1df049da6f904253c0612bbdc087476\n\n# tcId = 56\n# public key >= p\ncurve = curve25519\nprivate = f8f707b7999b18cb0d6b96124f2045972ca274bfc154ad0c87038c24c6d0d4b2\npublic = daffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\nresult = acceptable\nshared = cc1f40d743cdc2230e1043daba8b75e810f1fbab7f255269bd9ebb29e6bf494f\n\n# tcId = 57\n# public key >= p\ncurve = curve25519\nprivate = a034f684fa631e1a348118c1ce4c98231f2d9eec9ba5365b4a05d69a785b0796\npublic = dbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\nresult = acceptable\nshared = 54998ee43a5b007bf499f078e736524400a8b5c7e9b9b43771748c7cdf880412\n\n# tcId = 58\n# public key >= p\ncurve = curve25519\nprivate = 30b6c6a0f2ffa680768f992ba89e152d5bc9893d38c9119be4f767bfab6e0ca5\npublic = dcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\nresult = acceptable\nshared = ead9b38efdd723637934e55ab717a7ae09eb86a21dc36a3feeb88b759e391e09\n\n# tcId = 59\n# public key >= p\ncurve = curve25519\nprivate = 901b9dcf881e01e027575035d40b43bdc1c5242e030847495b0c7286469b6591\npublic = eaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\nresult = acceptable\nshared = 602ff40789b54b41805915fe2a6221f07a50ffc2c3fc94cf61f13d7904e88e0e\n\n# tcId = 60\n# public key >= p\ncurve = curve25519\nprivate = 8046677c28fd82c9a1bdb71a1a1a34faba1225e2507fe3f54d10bd5b0d865f8e\npublic = ebffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\nresult = acceptable\nshared = e00ae8b143471247ba24f12c885536c3cb981b58e1e56b2baf35c12ae1f79c26\n\n# tcId = 61\n# public key ",
@@ -3578,119 +3549,113 @@
   if (strcmp(path, "crypto/poly1305/poly1305_tests.txt") == 0) {
     return AssembleString(kData47, kLen47);
   }
-  if (strcmp(path, "crypto/siphash/siphash_tests.txt") == 0) {
+  if (strcmp(path, "crypto/x509/many_constraints.pem") == 0) {
     return AssembleString(kData48, kLen48);
   }
-  if (strcmp(path, "crypto/x509/many_constraints.pem") == 0) {
+  if (strcmp(path, "crypto/x509/many_names1.pem") == 0) {
     return AssembleString(kData49, kLen49);
   }
-  if (strcmp(path, "crypto/x509/many_names1.pem") == 0) {
+  if (strcmp(path, "crypto/x509/many_names2.pem") == 0) {
     return AssembleString(kData50, kLen50);
   }
-  if (strcmp(path, "crypto/x509/many_names2.pem") == 0) {
+  if (strcmp(path, "crypto/x509/many_names3.pem") == 0) {
     return AssembleString(kData51, kLen51);
   }
-  if (strcmp(path, "crypto/x509/many_names3.pem") == 0) {
+  if (strcmp(path, "crypto/x509/some_names1.pem") == 0) {
     return AssembleString(kData52, kLen52);
   }
-  if (strcmp(path, "crypto/x509/some_names1.pem") == 0) {
+  if (strcmp(path, "crypto/x509/some_names2.pem") == 0) {
     return AssembleString(kData53, kLen53);
   }
-  if (strcmp(path, "crypto/x509/some_names2.pem") == 0) {
+  if (strcmp(path, "crypto/x509/some_names3.pem") == 0) {
     return AssembleString(kData54, kLen54);
   }
-  if (strcmp(path, "crypto/x509/some_names3.pem") == 0) {
+  if (strcmp(path, "third_party/wycheproof_testvectors/aes_cbc_pkcs5_test.txt") == 0) {
     return AssembleString(kData55, kLen55);
   }
-  if (strcmp(path, "third_party/wycheproof_testvectors/aes_cbc_pkcs5_test.txt") == 0) {
+  if (strcmp(path, "third_party/wycheproof_testvectors/aes_cmac_test.txt") == 0) {
     return AssembleString(kData56, kLen56);
   }
-  if (strcmp(path, "third_party/wycheproof_testvectors/aes_cmac_test.txt") == 0) {
+  if (strcmp(path, "third_party/wycheproof_testvectors/aes_gcm_siv_test.txt") == 0) {
     return AssembleString(kData57, kLen57);
   }
-  if (strcmp(path, "third_party/wycheproof_testvectors/aes_gcm_siv_test.txt") == 0) {
+  if (strcmp(path, "third_party/wycheproof_testvectors/aes_gcm_test.txt") == 0) {
     return AssembleString(kData58, kLen58);
   }
-  if (strcmp(path, "third_party/wycheproof_testvectors/aes_gcm_test.txt") == 0) {
+  if (strcmp(path, "third_party/wycheproof_testvectors/chacha20_poly1305_test.txt") == 0) {
     return AssembleString(kData59, kLen59);
   }
-  if (strcmp(path, "third_party/wycheproof_testvectors/chacha20_poly1305_test.txt") == 0) {
+  if (strcmp(path, "third_party/wycheproof_testvectors/dsa_test.txt") == 0) {
     return AssembleString(kData60, kLen60);
   }
-  if (strcmp(path, "third_party/wycheproof_testvectors/dsa_test.txt") == 0) {
+  if (strcmp(path, "third_party/wycheproof_testvectors/ecdh_secp224r1_test.txt") == 0) {
     return AssembleString(kData61, kLen61);
   }
-  if (strcmp(path, "third_party/wycheproof_testvectors/ecdh_secp224r1_test.txt") == 0) {
+  if (strcmp(path, "third_party/wycheproof_testvectors/ecdh_secp256r1_test.txt") == 0) {
     return AssembleString(kData62, kLen62);
   }
-  if (strcmp(path, "third_party/wycheproof_testvectors/ecdh_secp256r1_test.txt") == 0) {
+  if (strcmp(path, "third_party/wycheproof_testvectors/ecdh_secp384r1_test.txt") == 0) {
     return AssembleString(kData63, kLen63);
   }
-  if (strcmp(path, "third_party/wycheproof_testvectors/ecdh_secp384r1_test.txt") == 0) {
+  if (strcmp(path, "third_party/wycheproof_testvectors/ecdh_secp521r1_test.txt") == 0) {
     return AssembleString(kData64, kLen64);
   }
-  if (strcmp(path, "third_party/wycheproof_testvectors/ecdh_secp521r1_test.txt") == 0) {
+  if (strcmp(path, "third_party/wycheproof_testvectors/ecdsa_secp224r1_sha224_test.txt") == 0) {
     return AssembleString(kData65, kLen65);
   }
-  if (strcmp(path, "third_party/wycheproof_testvectors/ecdsa_secp224r1_sha224_test.txt") == 0) {
+  if (strcmp(path, "third_party/wycheproof_testvectors/ecdsa_secp224r1_sha256_test.txt") == 0) {
     return AssembleString(kData66, kLen66);
   }
-  if (strcmp(path, "third_party/wycheproof_testvectors/ecdsa_secp224r1_sha256_test.txt") == 0) {
+  if (strcmp(path, "third_party/wycheproof_testvectors/ecdsa_secp224r1_sha512_test.txt") == 0) {
     return AssembleString(kData67, kLen67);
   }
-  if (strcmp(path, "third_party/wycheproof_testvectors/ecdsa_secp224r1_sha512_test.txt") == 0) {
+  if (strcmp(path, "third_party/wycheproof_testvectors/ecdsa_secp256r1_sha256_test.txt") == 0) {
     return AssembleString(kData68, kLen68);
   }
-  if (strcmp(path, "third_party/wycheproof_testvectors/ecdsa_secp256r1_sha256_test.txt") == 0) {
+  if (strcmp(path, "third_party/wycheproof_testvectors/ecdsa_secp256r1_sha512_test.txt") == 0) {
     return AssembleString(kData69, kLen69);
   }
-  if (strcmp(path, "third_party/wycheproof_testvectors/ecdsa_secp256r1_sha512_test.txt") == 0) {
+  if (strcmp(path, "third_party/wycheproof_testvectors/ecdsa_secp384r1_sha384_test.txt") == 0) {
     return AssembleString(kData70, kLen70);
   }
-  if (strcmp(path, "third_party/wycheproof_testvectors/ecdsa_secp384r1_sha384_test.txt") == 0) {
+  if (strcmp(path, "third_party/wycheproof_testvectors/ecdsa_secp384r1_sha512_test.txt") == 0) {
     return AssembleString(kData71, kLen71);
   }
-  if (strcmp(path, "third_party/wycheproof_testvectors/ecdsa_secp384r1_sha512_test.txt") == 0) {
+  if (strcmp(path, "third_party/wycheproof_testvectors/ecdsa_secp521r1_sha512_test.txt") == 0) {
     return AssembleString(kData72, kLen72);
   }
-  if (strcmp(path, "third_party/wycheproof_testvectors/ecdsa_secp521r1_sha512_test.txt") == 0) {
+  if (strcmp(path, "third_party/wycheproof_testvectors/eddsa_test.txt") == 0) {
     return AssembleString(kData73, kLen73);
   }
-  if (strcmp(path, "third_party/wycheproof_testvectors/eddsa_test.txt") == 0) {
+  if (strcmp(path, "third_party/wycheproof_testvectors/kw_test.txt") == 0) {
     return AssembleString(kData74, kLen74);
   }
-  if (strcmp(path, "third_party/wycheproof_testvectors/kwp_test.txt") == 0) {
+  if (strcmp(path, "third_party/wycheproof_testvectors/rsa_pss_2048_sha1_mgf1_20_test.txt") == 0) {
     return AssembleString(kData75, kLen75);
   }
-  if (strcmp(path, "third_party/wycheproof_testvectors/kw_test.txt") == 0) {
+  if (strcmp(path, "third_party/wycheproof_testvectors/rsa_pss_2048_sha256_mgf1_0_test.txt") == 0) {
     return AssembleString(kData76, kLen76);
   }
-  if (strcmp(path, "third_party/wycheproof_testvectors/rsa_pss_2048_sha1_mgf1_20_test.txt") == 0) {
+  if (strcmp(path, "third_party/wycheproof_testvectors/rsa_pss_2048_sha256_mgf1_32_test.txt") == 0) {
     return AssembleString(kData77, kLen77);
   }
-  if (strcmp(path, "third_party/wycheproof_testvectors/rsa_pss_2048_sha256_mgf1_0_test.txt") == 0) {
+  if (strcmp(path, "third_party/wycheproof_testvectors/rsa_pss_3072_sha256_mgf1_32_test.txt") == 0) {
     return AssembleString(kData78, kLen78);
   }
-  if (strcmp(path, "third_party/wycheproof_testvectors/rsa_pss_2048_sha256_mgf1_32_test.txt") == 0) {
+  if (strcmp(path, "third_party/wycheproof_testvectors/rsa_pss_4096_sha256_mgf1_32_test.txt") == 0) {
     return AssembleString(kData79, kLen79);
   }
-  if (strcmp(path, "third_party/wycheproof_testvectors/rsa_pss_3072_sha256_mgf1_32_test.txt") == 0) {
+  if (strcmp(path, "third_party/wycheproof_testvectors/rsa_pss_4096_sha512_mgf1_32_test.txt") == 0) {
     return AssembleString(kData80, kLen80);
   }
-  if (strcmp(path, "third_party/wycheproof_testvectors/rsa_pss_4096_sha256_mgf1_32_test.txt") == 0) {
+  if (strcmp(path, "third_party/wycheproof_testvectors/rsa_pss_misc_test.txt") == 0) {
     return AssembleString(kData81, kLen81);
   }
-  if (strcmp(path, "third_party/wycheproof_testvectors/rsa_pss_4096_sha512_mgf1_32_test.txt") == 0) {
+  if (strcmp(path, "third_party/wycheproof_testvectors/rsa_signature_test.txt") == 0) {
     return AssembleString(kData82, kLen82);
   }
-  if (strcmp(path, "third_party/wycheproof_testvectors/rsa_pss_misc_test.txt") == 0) {
-    return AssembleString(kData83, kLen83);
-  }
-  if (strcmp(path, "third_party/wycheproof_testvectors/rsa_signature_test.txt") == 0) {
-    return AssembleString(kData84, kLen84);
-  }
   if (strcmp(path, "third_party/wycheproof_testvectors/x25519_test.txt") == 0) {
-    return AssembleString(kData85, kLen85);
+    return AssembleString(kData83, kLen83);
   }
   fprintf(stderr, "File not embedded: %s.\n", path);
   abort();
diff --git a/err_data.c b/err_data.c
index fee7d1d..f244bc7 100644
--- a/err_data.c
+++ b/err_data.c
@@ -75,54 +75,54 @@
     0xc3b00ea,
     0xc3b88d6,
     0x10320847,
-    0x10329585,
-    0x10331591,
-    0x103395aa,
-    0x103415bd,
-    0x10348f27,
+    0x10329574,
+    0x10331580,
+    0x10339599,
+    0x103415ac,
+    0x10348f14,
     0x10350c60,
-    0x103595d0,
-    0x103615fa,
-    0x1036960d,
-    0x1037162c,
-    0x10379645,
-    0x1038165a,
-    0x10389678,
-    0x10391687,
-    0x103996a3,
-    0x103a16be,
-    0x103a96cd,
-    0x103b16e9,
-    0x103b9704,
-    0x103c172a,
+    0x103595bf,
+    0x103615e9,
+    0x103695fc,
+    0x1037161b,
+    0x10379634,
+    0x10381649,
+    0x10389667,
+    0x10391676,
+    0x10399692,
+    0x103a16ad,
+    0x103a96bc,
+    0x103b16d8,
+    0x103b96f3,
+    0x103c1719,
     0x103c80ea,
-    0x103d173b,
-    0x103d974f,
-    0x103e176e,
-    0x103e977d,
-    0x103f1794,
-    0x103f97a7,
+    0x103d172a,
+    0x103d973e,
+    0x103e175d,
+    0x103e976c,
+    0x103f1783,
+    0x103f9796,
     0x10400c24,
-    0x104097ba,
-    0x104117d8,
-    0x104197eb,
-    0x10421805,
-    0x10429815,
-    0x10431829,
-    0x1043983f,
-    0x10441857,
-    0x1044986c,
-    0x10451880,
-    0x10459892,
+    0x104097a9,
+    0x104117c7,
+    0x104197da,
+    0x104217f4,
+    0x10429804,
+    0x10431818,
+    0x1043982e,
+    0x10441846,
+    0x1044985b,
+    0x1045186f,
+    0x10459881,
     0x104605fd,
     0x1046894f,
-    0x104718a7,
-    0x104798be,
-    0x104818d3,
-    0x104898e1,
-    0x10490e73,
-    0x1049971b,
-    0x104a15e5,
+    0x10471896,
+    0x104798ad,
+    0x104818c2,
+    0x104898d0,
+    0x10490e60,
+    0x1049970a,
+    0x104a15d4,
     0x14320c07,
     0x14328c15,
     0x14330c24,
@@ -130,103 +130,101 @@
     0x143400ac,
     0x143480ea,
     0x18320083,
-    0x18328f7d,
+    0x18328f6a,
     0x183300ac,
-    0x18338f93,
-    0x18340fa7,
+    0x18338f80,
+    0x18340f94,
     0x183480ea,
-    0x18350fbc,
-    0x18358fd4,
-    0x18360fe9,
-    0x18368ffd,
-    0x18371021,
-    0x18379037,
-    0x1838104b,
-    0x1838905b,
+    0x18350fa9,
+    0x18358fc1,
+    0x18360fd6,
+    0x18368fea,
+    0x1837100e,
+    0x18379024,
+    0x18381038,
+    0x18389048,
     0x18390a75,
-    0x1839906b,
-    0x183a1091,
-    0x183a90b7,
-    0x183b0c7f,
-    0x183b90ec,
-    0x183c10fe,
-    0x183c9109,
-    0x183d1119,
-    0x183d912a,
-    0x183e113b,
-    0x183e914d,
-    0x183f1176,
-    0x183f918f,
-    0x184011a7,
+    0x18399058,
+    0x183a1080,
+    0x183a90a6,
+    0x183b0c6c,
+    0x183b90db,
+    0x183c10ed,
+    0x183c90f8,
+    0x183d1108,
+    0x183d9119,
+    0x183e112a,
+    0x183e913c,
+    0x183f1165,
+    0x183f917e,
+    0x18401196,
     0x184086d5,
-    0x184110da,
-    0x184190a5,
-    0x184210c4,
-    0x18428c6c,
-    0x18431080,
-    0x203211e1,
-    0x203291ce,
-    0x243211ed,
+    0x184110c9,
+    0x18419094,
+    0x184210b3,
+    0x1842906d,
+    0x203211d0,
+    0x203291bd,
+    0x243211dc,
     0x24328995,
-    0x243311ff,
-    0x2433920c,
-    0x24341219,
-    0x2434922b,
-    0x2435123a,
-    0x24359257,
-    0x24361264,
-    0x24369272,
-    0x24371280,
-    0x2437928e,
-    0x24381297,
-    0x243892a4,
-    0x243912b7,
+    0x243311ee,
+    0x243391fb,
+    0x24341208,
+    0x2434921a,
+    0x24351229,
+    0x24359246,
+    0x24361253,
+    0x24369261,
+    0x2437126f,
+    0x2437927d,
+    0x24381286,
+    0x24389293,
+    0x243912a6,
     0x28320c54,
-    0x28328c7f,
+    0x28328c6c,
     0x28330c24,
-    0x28338c92,
+    0x28338c7f,
     0x28340c60,
     0x283480ac,
     0x283500ea,
-    0x28358c6c,
-    0x2c322ed8,
-    0x2c3292ce,
-    0x2c332ee6,
-    0x2c33aef8,
-    0x2c342f0c,
-    0x2c34af1e,
-    0x2c352f39,
-    0x2c35af4b,
-    0x2c362f5e,
+    0x2c322ec7,
+    0x2c3292bd,
+    0x2c332ed5,
+    0x2c33aee7,
+    0x2c342efb,
+    0x2c34af0d,
+    0x2c352f28,
+    0x2c35af3a,
+    0x2c362f4d,
     0x2c36832d,
-    0x2c372f6b,
-    0x2c37af7d,
-    0x2c382fa2,
-    0x2c38afb9,
-    0x2c392fc7,
-    0x2c39afd7,
-    0x2c3a2fe9,
-    0x2c3aaffd,
-    0x2c3b300e,
-    0x2c3bb02d,
-    0x2c3c12e0,
-    0x2c3c92f6,
-    0x2c3d3041,
-    0x2c3d930f,
-    0x2c3e305e,
-    0x2c3eb06c,
-    0x2c3f3084,
-    0x2c3fb09c,
-    0x2c4030c6,
-    0x2c4091e1,
-    0x2c4130d7,
-    0x2c41b0ea,
-    0x2c4211a7,
-    0x2c42b0fb,
+    0x2c372f5a,
+    0x2c37af6c,
+    0x2c382f91,
+    0x2c38afa8,
+    0x2c392fb6,
+    0x2c39afc6,
+    0x2c3a2fd8,
+    0x2c3aafec,
+    0x2c3b2ffd,
+    0x2c3bb01c,
+    0x2c3c12cf,
+    0x2c3c92e5,
+    0x2c3d3030,
+    0x2c3d92fe,
+    0x2c3e304d,
+    0x2c3eb05b,
+    0x2c3f3073,
+    0x2c3fb08b,
+    0x2c4030b5,
+    0x2c4091d0,
+    0x2c4130c6,
+    0x2c41b0d9,
+    0x2c421196,
+    0x2c42b0ea,
     0x2c430722,
-    0x2c43b01f,
-    0x2c442f90,
-    0x2c44b0a9,
+    0x2c43b00e,
+    0x2c442f7f,
+    0x2c44b098,
     0x30320000,
     0x30328015,
     0x3033001f,
@@ -328,273 +326,273 @@
     0x34348bf1,
     0x34350bd5,
     0x3c320083,
-    0x3c328cbc,
-    0x3c330cd5,
-    0x3c338cf0,
-    0x3c340d0d,
-    0x3c348d37,
-    0x3c350d52,
-    0x3c358d78,
-    0x3c360d91,
-    0x3c368da9,
-    0x3c370dba,
-    0x3c378dc8,
-    0x3c380dd5,
-    0x3c388de9,
-    0x3c390c7f,
-    0x3c398e0c,
-    0x3c3a0e20,
+    0x3c328ca9,
+    0x3c330cc2,
+    0x3c338cdd,
+    0x3c340cfa,
+    0x3c348d24,
+    0x3c350d3f,
+    0x3c358d65,
+    0x3c360d7e,
+    0x3c368d96,
+    0x3c370da7,
+    0x3c378db5,
+    0x3c380dc2,
+    0x3c388dd6,
+    0x3c390c6c,
+    0x3c398df9,
+    0x3c3a0e0d,
     0x3c3a890f,
-    0x3c3b0e30,
-    0x3c3b8e4b,
-    0x3c3c0e5d,
-    0x3c3c8e90,
-    0x3c3d0e9a,
-    0x3c3d8eae,
-    0x3c3e0ebc,
-    0x3c3e8ee1,
-    0x3c3f0ca8,
-    0x3c3f8eca,
+    0x3c3b0e1d,
+    0x3c3b8e38,
+    0x3c3c0e4a,
+    0x3c3c8e7d,
+    0x3c3d0e87,
+    0x3c3d8e9b,
+    0x3c3e0ea9,
+    0x3c3e8ece,
+    0x3c3f0c95,
+    0x3c3f8eb7,
     0x3c4000ac,
     0x3c4080ea,
-    0x3c410d28,
-    0x3c418d67,
-    0x3c420e73,
-    0x3c428dfd,
-    0x40321957,
-    0x4032996d,
-    0x4033199b,
-    0x403399a5,
-    0x403419bc,
-    0x403499da,
-    0x403519ea,
-    0x403599fc,
-    0x40361a09,
-    0x40369a15,
-    0x40371a2a,
-    0x40379a3c,
-    0x40381a47,
-    0x40389a59,
-    0x40390f27,
-    0x40399a69,
-    0x403a1a7c,
-    0x403a9a9d,
-    0x403b1aae,
-    0x403b9abe,
+    0x3c410d15,
+    0x3c418d54,
+    0x3c420e60,
+    0x3c428dea,
+    0x40321946,
+    0x4032995c,
+    0x4033198a,
+    0x40339994,
+    0x403419ab,
+    0x403499c9,
+    0x403519d9,
+    0x403599eb,
+    0x403619f8,
+    0x40369a04,
+    0x40371a19,
+    0x40379a2b,
+    0x40381a36,
+    0x40389a48,
+    0x40390f14,
+    0x40399a58,
+    0x403a1a6b,
+    0x403a9a8c,
+    0x403b1a9d,
+    0x403b9aad,
     0x403c0064,
     0x403c8083,
-    0x403d1b42,
-    0x403d9b58,
-    0x403e1b67,
-    0x403e9b9f,
-    0x403f1bb9,
-    0x403f9be1,
-    0x40401bf6,
-    0x40409c0a,
-    0x40411c27,
-    0x40419c42,
-    0x40421c5b,
-    0x40429c6e,
-    0x40431c82,
-    0x40439c9a,
-    0x40441cb1,
+    0x403d1b31,
+    0x403d9b47,
+    0x403e1b56,
+    0x403e9b8e,
+    0x403f1ba8,
+    0x403f9bd0,
+    0x40401be5,
+    0x40409bf9,
+    0x40411c16,
+    0x40419c31,
+    0x40421c4a,
+    0x40429c5d,
+    0x40431c71,
+    0x40439c89,
+    0x40441ca0,
     0x404480ac,
-    0x40451cc6,
-    0x40459cd8,
-    0x40461cfc,
-    0x40469d1c,
-    0x40471d2a,
-    0x40479d51,
-    0x40481dc2,
-    0x40489df5,
-    0x40491e0c,
-    0x40499e26,
-    0x404a1e3d,
-    0x404a9e5b,
-    0x404b1e73,
-    0x404b9e8a,
-    0x404c1ea0,
-    0x404c9eb2,
-    0x404d1ed3,
-    0x404d9f0c,
-    0x404e1f20,
-    0x404e9f2d,
-    0x404f1f5a,
-    0x404f9fa0,
-    0x40501ff7,
-    0x4050a00b,
-    0x4051203e,
-    0x4052204e,
-    0x4052a072,
-    0x4053208a,
-    0x4053a09d,
-    0x405420b2,
-    0x4054a0d5,
-    0x405520e3,
-    0x4055a120,
-    0x4056212d,
-    0x4056a146,
-    0x4057215e,
-    0x4057a171,
-    0x40582186,
-    0x4058a1ad,
-    0x405921dc,
-    0x4059a209,
-    0x405a221d,
-    0x405aa22d,
-    0x405b2245,
-    0x405ba256,
-    0x405c2269,
-    0x405ca2a8,
-    0x405d22b5,
-    0x405da2da,
-    0x405e2318,
+    0x40451cb5,
+    0x40459cc7,
+    0x40461ceb,
+    0x40469d0b,
+    0x40471d19,
+    0x40479d40,
+    0x40481db1,
+    0x40489de4,
+    0x40491dfb,
+    0x40499e15,
+    0x404a1e2c,
+    0x404a9e4a,
+    0x404b1e62,
+    0x404b9e79,
+    0x404c1e8f,
+    0x404c9ea1,
+    0x404d1ec2,
+    0x404d9efb,
+    0x404e1f0f,
+    0x404e9f1c,
+    0x404f1f49,
+    0x404f9f8f,
+    0x40501fe6,
+    0x40509ffa,
+    0x4051202d,
+    0x4052203d,
+    0x4052a061,
+    0x40532079,
+    0x4053a08c,
+    0x405420a1,
+    0x4054a0c4,
+    0x405520d2,
+    0x4055a10f,
+    0x4056211c,
+    0x4056a135,
+    0x4057214d,
+    0x4057a160,
+    0x40582175,
+    0x4058a19c,
+    0x405921cb,
+    0x4059a1f8,
+    0x405a220c,
+    0x405aa21c,
+    0x405b2234,
+    0x405ba245,
+    0x405c2258,
+    0x405ca297,
+    0x405d22a4,
+    0x405da2c9,
+    0x405e2307,
     0x405e8ab3,
-    0x405f2339,
-    0x405fa346,
-    0x40602354,
-    0x4060a376,
-    0x406123d7,
-    0x4061a40f,
-    0x40622426,
-    0x4062a437,
-    0x4063245c,
-    0x4063a471,
-    0x40642488,
-    0x4064a4b4,
-    0x406524cf,
-    0x4065a4e6,
-    0x406624fe,
-    0x4066a528,
-    0x40672553,
-    0x4067a598,
-    0x406825e0,
-    0x4068a601,
-    0x40692633,
-    0x4069a661,
-    0x406a2682,
-    0x406aa6a2,
-    0x406b282a,
-    0x406ba84d,
-    0x406c2863,
-    0x406cab06,
-    0x406d2b35,
-    0x406dab5d,
-    0x406e2b8b,
-    0x406eabd8,
-    0x406f2c13,
-    0x406fac4b,
-    0x40702c5e,
-    0x4070ac7b,
+    0x405f2328,
+    0x405fa335,
+    0x40602343,
+    0x4060a365,
+    0x406123c6,
+    0x4061a3fe,
+    0x40622415,
+    0x4062a426,
+    0x4063244b,
+    0x4063a460,
+    0x40642477,
+    0x4064a4a3,
+    0x406524be,
+    0x4065a4d5,
+    0x406624ed,
+    0x4066a517,
+    0x40672542,
+    0x4067a587,
+    0x406825cf,
+    0x4068a5f0,
+    0x40692622,
+    0x4069a650,
+    0x406a2671,
+    0x406aa691,
+    0x406b2819,
+    0x406ba83c,
+    0x406c2852,
+    0x406caaf5,
+    0x406d2b24,
+    0x406dab4c,
+    0x406e2b7a,
+    0x406eabc7,
+    0x406f2c02,
+    0x406fac3a,
+    0x40702c4d,
+    0x4070ac6a,
     0x40710802,
-    0x4071ac8d,
-    0x40722ca0,
-    0x4072acd6,
-    0x40732cee,
-    0x407394e0,
-    0x40742d02,
-    0x4074ad1c,
-    0x40752d2d,
-    0x4075ad41,
-    0x40762d4f,
-    0x407692a4,
-    0x40772d74,
-    0x4077ad96,
-    0x40782db1,
-    0x4078adea,
-    0x40792e01,
-    0x4079ae17,
-    0x407a2e43,
-    0x407aae56,
-    0x407b2e6b,
-    0x407bae7d,
-    0x407c2eae,
-    0x407caeb7,
-    0x407d261c,
-    0x407d9fb0,
-    0x407e2dc6,
-    0x407ea1bd,
-    0x407f1d3e,
-    0x407f9ae4,
-    0x40801f6a,
-    0x40809d66,
-    0x40812060,
-    0x40819f44,
-    0x40822b76,
-    0x40829aca,
-    0x40832198,
-    0x4083a499,
-    0x40841d7a,
-    0x4084a1f5,
-    0x4085227a,
-    0x4085a39e,
-    0x408622fa,
-    0x40869fca,
-    0x40872bbc,
-    0x4087a3ec,
-    0x40881b2b,
-    0x4088a5ab,
-    0x40891b7a,
-    0x40899b07,
-    0x408a289b,
-    0x408a98f8,
-    0x408b2e92,
-    0x408bac28,
-    0x408c228a,
-    0x408c9914,
-    0x408d1ddb,
-    0x408d9dac,
-    0x408e1ef5,
-    0x408ea100,
-    0x408f25bf,
-    0x408fa3ba,
-    0x40902574,
-    0x4090a2cc,
-    0x40912883,
-    0x4091993a,
-    0x40921bc7,
-    0x4092abf7,
-    0x40932cb9,
-    0x40939fdb,
-    0x40941d8e,
-    0x4094a8b4,
-    0x40952448,
-    0x4095ae23,
-    0x40962ba3,
-    0x40969f83,
-    0x40972026,
-    0x41f42755,
-    0x41f927e7,
-    0x41fe26da,
-    0x41fea8f7,
-    0x41ff29e8,
-    0x4203276e,
-    0x42082790,
-    0x4208a7cc,
-    0x420926be,
-    0x4209a806,
-    0x420a2715,
-    0x420aa6f5,
-    0x420b2735,
-    0x420ba7ae,
-    0x420c2a04,
-    0x420ca8c4,
-    0x420d28de,
-    0x420da915,
-    0x4212292f,
-    0x421729cb,
-    0x4217a971,
-    0x421c2993,
-    0x421f294e,
-    0x42212a1b,
-    0x422629ae,
-    0x422b2aea,
-    0x422baa98,
-    0x422c2ad2,
-    0x422caa57,
-    0x422d2a36,
-    0x422daab7,
-    0x422e2a7d,
+    0x4071ac7c,
+    0x40722c8f,
+    0x4072acc5,
+    0x40732cdd,
+    0x407394cf,
+    0x40742cf1,
+    0x4074ad0b,
+    0x40752d1c,
+    0x4075ad30,
+    0x40762d3e,
+    0x40769293,
+    0x40772d63,
+    0x4077ad85,
+    0x40782da0,
+    0x4078add9,
+    0x40792df0,
+    0x4079ae06,
+    0x407a2e32,
+    0x407aae45,
+    0x407b2e5a,
+    0x407bae6c,
+    0x407c2e9d,
+    0x407caea6,
+    0x407d260b,
+    0x407d9f9f,
+    0x407e2db5,
+    0x407ea1ac,
+    0x407f1d2d,
+    0x407f9ad3,
+    0x40801f59,
+    0x40809d55,
+    0x4081204f,
+    0x40819f33,
+    0x40822b65,
+    0x40829ab9,
+    0x40832187,
+    0x4083a488,
+    0x40841d69,
+    0x4084a1e4,
+    0x40852269,
+    0x4085a38d,
+    0x408622e9,
+    0x40869fb9,
+    0x40872bab,
+    0x4087a3db,
+    0x40881b1a,
+    0x4088a59a,
+    0x40891b69,
+    0x40899af6,
+    0x408a288a,
+    0x408a98e7,
+    0x408b2e81,
+    0x408bac17,
+    0x408c2279,
+    0x408c9903,
+    0x408d1dca,
+    0x408d9d9b,
+    0x408e1ee4,
+    0x408ea0ef,
+    0x408f25ae,
+    0x408fa3a9,
+    0x40902563,
+    0x4090a2bb,
+    0x40912872,
+    0x40919929,
+    0x40921bb6,
+    0x4092abe6,
+    0x40932ca8,
+    0x40939fca,
+    0x40941d7d,
+    0x4094a8a3,
+    0x40952437,
+    0x4095ae12,
+    0x40962b92,
+    0x40969f72,
+    0x40972015,
+    0x41f42744,
+    0x41f927d6,
+    0x41fe26c9,
+    0x41fea8e6,
+    0x41ff29d7,
+    0x4203275d,
+    0x4208277f,
+    0x4208a7bb,
+    0x420926ad,
+    0x4209a7f5,
+    0x420a2704,
+    0x420aa6e4,
+    0x420b2724,
+    0x420ba79d,
+    0x420c29f3,
+    0x420ca8b3,
+    0x420d28cd,
+    0x420da904,
+    0x4212291e,
+    0x421729ba,
+    0x4217a960,
+    0x421c2982,
+    0x421f293d,
+    0x42212a0a,
+    0x4226299d,
+    0x422b2ad9,
+    0x422baa87,
+    0x422c2ac1,
+    0x422caa46,
+    0x422d2a25,
+    0x422daaa6,
+    0x422e2a6c,
     0x4432072d,
     0x4432873c,
     0x44330748,
@@ -612,117 +610,117 @@
     0x44390802,
     0x44398810,
     0x443a0823,
-    0x483212ce,
-    0x483292e0,
-    0x483312f6,
-    0x4833930f,
-    0x4c321334,
-    0x4c329344,
-    0x4c331357,
-    0x4c339377,
+    0x483212bd,
+    0x483292cf,
+    0x483312e5,
+    0x483392fe,
+    0x4c321323,
+    0x4c329333,
+    0x4c331346,
+    0x4c339366,
     0x4c3400ac,
     0x4c3480ea,
-    0x4c351383,
-    0x4c359391,
-    0x4c3613ad,
-    0x4c3693d3,
-    0x4c3713e2,
-    0x4c3793f0,
-    0x4c381405,
-    0x4c389411,
-    0x4c391431,
-    0x4c39945b,
-    0x4c3a1474,
-    0x4c3a948d,
+    0x4c351372,
+    0x4c359380,
+    0x4c36139c,
+    0x4c3693c2,
+    0x4c3713d1,
+    0x4c3793df,
+    0x4c3813f4,
+    0x4c389400,
+    0x4c391420,
+    0x4c39944a,
+    0x4c3a1463,
+    0x4c3a947c,
     0x4c3b05fd,
-    0x4c3b94a6,
-    0x4c3c14b8,
-    0x4c3c94c7,
-    0x4c3d14e0,
+    0x4c3b9495,
+    0x4c3c14a7,
+    0x4c3c94b6,
+    0x4c3d14cf,
     0x4c3d8c47,
-    0x4c3e154d,
-    0x4c3e94ef,
-    0x4c3f156f,
-    0x4c3f92a4,
-    0x4c401505,
-    0x4c409320,
-    0x4c41153d,
-    0x4c4193c0,
-    0x4c421529,
-    0x5032310d,
-    0x5032b11c,
-    0x50333127,
-    0x5033b137,
-    0x50343150,
-    0x5034b16a,
-    0x50353178,
-    0x5035b18e,
-    0x503631a0,
-    0x5036b1b6,
-    0x503731cf,
-    0x5037b1e2,
-    0x503831fa,
-    0x5038b20b,
-    0x50393220,
-    0x5039b234,
-    0x503a3254,
-    0x503ab26a,
-    0x503b3282,
-    0x503bb294,
-    0x503c32b0,
-    0x503cb2c7,
-    0x503d32e0,
-    0x503db2f6,
-    0x503e3303,
-    0x503eb319,
-    0x503f332b,
+    0x4c3e153c,
+    0x4c3e94de,
+    0x4c3f155e,
+    0x4c3f9293,
+    0x4c4014f4,
+    0x4c40930f,
+    0x4c41152c,
+    0x4c4193af,
+    0x4c421518,
+    0x503230fc,
+    0x5032b10b,
+    0x50333116,
+    0x5033b126,
+    0x5034313f,
+    0x5034b159,
+    0x50353167,
+    0x5035b17d,
+    0x5036318f,
+    0x5036b1a5,
+    0x503731be,
+    0x5037b1d1,
+    0x503831e9,
+    0x5038b1fa,
+    0x5039320f,
+    0x5039b223,
+    0x503a3243,
+    0x503ab259,
+    0x503b3271,
+    0x503bb283,
+    0x503c329f,
+    0x503cb2b6,
+    0x503d32cf,
+    0x503db2e5,
+    0x503e32f2,
+    0x503eb308,
+    0x503f331a,
     0x503f837b,
-    0x5040333e,
-    0x5040b34e,
-    0x50413368,
-    0x5041b377,
-    0x50423391,
-    0x5042b3ae,
-    0x504333be,
-    0x5043b3ce,
-    0x504433dd,
+    0x5040332d,
+    0x5040b33d,
+    0x50413357,
+    0x5041b366,
+    0x50423380,
+    0x5042b39d,
+    0x504333ad,
+    0x5043b3bd,
+    0x504433cc,
     0x50448431,
-    0x504533f1,
-    0x5045b40f,
-    0x50463422,
-    0x5046b438,
-    0x5047344a,
-    0x5047b45f,
-    0x50483485,
-    0x5048b493,
-    0x504934a6,
-    0x5049b4bb,
-    0x504a34d1,
-    0x504ab4e1,
-    0x504b3501,
-    0x504bb514,
-    0x504c3537,
-    0x504cb565,
-    0x504d3577,
-    0x504db594,
-    0x504e35af,
-    0x504eb5cb,
-    0x504f35dd,
-    0x504fb5f4,
-    0x50503603,
+    0x504533e0,
+    0x5045b3fe,
+    0x50463411,
+    0x5046b427,
+    0x50473439,
+    0x5047b44e,
+    0x50483474,
+    0x5048b482,
+    0x50493495,
+    0x5049b4aa,
+    0x504a34c0,
+    0x504ab4d0,
+    0x504b34f0,
+    0x504bb503,
+    0x504c3526,
+    0x504cb554,
+    0x504d3566,
+    0x504db583,
+    0x504e359e,
+    0x504eb5ba,
+    0x504f35cc,
+    0x504fb5e3,
+    0x505035f2,
     0x505086f1,
-    0x50513616,
-    0x58320f65,
-    0x68320f27,
-    0x68328c7f,
-    0x68330c92,
-    0x68338f35,
-    0x68340f45,
+    0x50513605,
+    0x58320f52,
+    0x68320f14,
+    0x68328c6c,
+    0x68330c7f,
+    0x68338f22,
+    0x68340f32,
     0x683480ea,
-    0x6c320eed,
+    0x6c320eda,
     0x6c328c36,
-    0x6c330ef8,
-    0x6c338f11,
+    0x6c330ee5,
+    0x6c338efe,
     0x74320a1b,
     0x743280ac,
     0x74330c47,
@@ -752,7 +750,7 @@
     0x783d8b4c,
     0x783e0aa2,
     0x783e8a54,
-    0x7c3211bd,
+    0x7c3211ac,
 };
 
 const size_t kOpenSSLReasonValuesLen = sizeof(kOpenSSLReasonValues) / sizeof(kOpenSSLReasonValues[0]);
@@ -926,7 +924,6 @@
     "UNKNOWN_HASH\0"
     "BAD_Q_VALUE\0"
     "BAD_VERSION\0"
-    "INVALID_PARAMETERS\0"
     "MISSING_PARAMETERS\0"
     "NEED_NEW_SETUP_VALUES\0"
     "BIGNUM_OUT_OF_RANGE\0"
@@ -977,7 +974,7 @@
     "INVALID_KEYBITS\0"
     "INVALID_MGF1_MD\0"
     "INVALID_PADDING_MODE\0"
-    "INVALID_PEER_KEY\0"
+    "INVALID_PARAMETERS\0"
     "INVALID_PSS_SALTLEN\0"
     "INVALID_SIGNATURE\0"
     "KEYS_NOT_SET\0"
diff --git a/eureka.mk b/eureka.mk
index 2fca285..9824521 100644
--- a/eureka.mk
+++ b/eureka.mk
@@ -110,15 +110,12 @@
   src/crypto/evp/p_ed25519_asn1.c\
   src/crypto/evp/p_rsa.c\
   src/crypto/evp/p_rsa_asn1.c\
-  src/crypto/evp/p_x25519.c\
-  src/crypto/evp/p_x25519_asn1.c\
   src/crypto/evp/pbkdf.c\
   src/crypto/evp/print.c\
   src/crypto/evp/scrypt.c\
   src/crypto/evp/sign.c\
   src/crypto/ex_data.c\
   src/crypto/fipsmodule/bcm.c\
-  src/crypto/fipsmodule/fips_shared_support.c\
   src/crypto/fipsmodule/is_fips.c\
   src/crypto/hkdf/hkdf.c\
   src/crypto/hrss/hrss.c\
@@ -153,7 +150,6 @@
   src/crypto/refcount_lock.c\
   src/crypto/rsa_extra/rsa_asn1.c\
   src/crypto/rsa_extra/rsa_print.c\
-  src/crypto/siphash/siphash.c\
   src/crypto/stack/stack.c\
   src/crypto/thread.c\
   src/crypto/thread_none.c\
@@ -242,11 +238,6 @@
   src/crypto/x509v3/v3_sxnet.c\
   src/crypto/x509v3/v3_utl.c\
   src/third_party/fiat/curve25519.c\
-  src/third_party/sike/asm/fp_generic.c\
-  src/third_party/sike/curve_params.c\
-  src/third_party/sike/fpx.c\
-  src/third_party/sike/isogeny.c\
-  src/third_party/sike/sike.c\
 
 ssl_sources := \
   src/ssl/bio_ssl.cc\
@@ -314,7 +305,6 @@
   linux-aarch64/crypto/fipsmodule/sha512-armv8.S\
   linux-aarch64/crypto/fipsmodule/vpaes-armv8.S\
   linux-aarch64/crypto/test/trampoline-armv8.S\
-  linux-aarch64/crypto/third_party/sike/asm/fp-armv8.S\
 
 linux_arm_sources := \
   linux-arm/crypto/chacha/chacha-armv4.S\
@@ -372,6 +362,5 @@
   linux-x86_64/crypto/fipsmodule/x86_64-mont.S\
   linux-x86_64/crypto/fipsmodule/x86_64-mont5.S\
   linux-x86_64/crypto/test/trampoline-x86_64.S\
-  linux-x86_64/crypto/third_party/sike/asm/fp-x86_64.S\
   src/crypto/hrss/asm/poly_rq_mul.S\
 
diff --git a/ios-aarch64/crypto/third_party/sike/asm/fp-armv8.S b/ios-aarch64/crypto/third_party/sike/asm/fp-armv8.S
deleted file mode 100644
index 58dff58..0000000
--- a/ios-aarch64/crypto/third_party/sike/asm/fp-armv8.S
+++ /dev/null
@@ -1,995 +0,0 @@
-// This file is generated from a similarly-named Perl script in the BoringSSL
-// source tree. Do not edit by hand.
-
-#if defined(__has_feature)
-#if __has_feature(memory_sanitizer) && !defined(OPENSSL_NO_ASM)
-#define OPENSSL_NO_ASM
-#endif
-#endif
-
-#if !defined(OPENSSL_NO_ASM)
-#if defined(BORINGSSL_PREFIX)
-#include <boringssl_prefix_symbols_asm.h>
-#endif
-.section	__TEXT,__const
-
-# p434 x 2
-Lp434x2:
-.quad	0xFFFFFFFFFFFFFFFE, 0xFFFFFFFFFFFFFFFF
-.quad	0xFB82ECF5C5FFFFFF, 0xF78CB8F062B15D47
-.quad	0xD9F8BFAD038A40AC, 0x0004683E4E2EE688
-
-# p434 + 1
-Lp434p1:
-.quad	0xFDC1767AE3000000, 0x7BC65C783158AEA3
-.quad	0x6CFC5FD681C52056, 0x0002341F27177344
-
-.text
-.globl	_sike_mpmul
-.private_extern	_sike_mpmul
-.align	4
-_sike_mpmul:
-	stp	x29, x30, [sp,#-96]!
-	add	x29, sp, #0
-	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]
-
-	ldp	x3,  x4, [x0]
-	ldp	x5,  x6, [x0,#16]
-	ldp	x7,  x8, [x0,#32]
-	ldr	x9,      [x0,#48]
-	ldp	x10, x11, [x1,#0]
-	ldp	x12, x13, [x1,#16]
-	ldp	x14, x15, [x1,#32]
-	ldr	x16,      [x1,#48]
-
-        // x3-x7 <- AH + AL, x7 <- carry
-	adds	x3, x3, x7
-	adcs	x4, x4, x8
-	adcs	x5, x5, x9
-	adcs	x6, x6, xzr
-	adc	x7, xzr, xzr
-
-        // x10-x13 <- BH + BL, x8 <- carry
-	adds	x10, x10, x14
-	adcs	x11, x11, x15
-	adcs	x12, x12, x16
-	adcs	x13, x13, xzr
-	adc	x8, xzr, xzr
-
-        // x9 <- combined carry
-	and	x9, x7, x8
-        // x7-x8 <- mask
-	sub	x7, xzr, x7
-	sub	x8, xzr, x8
-
-        // x15-x19 <- masked (BH + BL)
-	and	x14, x10, x7
-	and	x15, x11, x7
-	and	x16, x12, x7
-	and	x17, x13, x7
-
-        // x20-x23 <- masked (AH + AL)
-	and	x20, x3, x8
-	and	x21, x4, x8
-	and	x22, x5, x8
-	and	x23, x6, x8
-
-        // x15-x19, x7 <- masked (AH+AL) + masked (BH+BL), step 1
-	adds	x14, x14, x20
-	adcs	x15, x15, x21
-	adcs	x16, x16, x22
-	adcs	x17, x17, x23
-	adc	x7, x9, xzr
-
-        // x8-x9,x19,x20-x24 <- (AH+AL) x (BH+BL), low part
-	stp	x3, x4, [x2,#0]
-                // A0-A1 <- AH + AL, T0 <- mask
-	adds	x3, x3, x5
-	adcs	x4, x4, x6
-	adc	x25, xzr, xzr
-
-        // C6, T1 <- BH + BL, C7 <- mask
-	adds	x23, x10, x12
-	adcs	x26, x11, x13
-	adc	x24, xzr, xzr
-
-        // C0-C1 <- masked (BH + BL)
-	sub	x19, xzr, x25
-	sub	x20, xzr, x24
-	and	x8, x23, x19
-	and	x9, x26, x19
-
-        // C4-C5 <- masked (AH + AL), T0 <- combined carry
-	and	x21, x3, x20
-	and	x22, x4, x20
-	mul	x19, x3, x23
-	mul	x20, x3, x26
-	and	x25, x25, x24
-
-        // C0-C1, T0 <- (AH+AL) x (BH+BL), part 1
-	adds	x8, x21, x8
-	umulh	x21, x3, x26
-	adcs	x9, x22, x9
-	umulh	x22, x3, x23
-	adc	x25, x25, xzr
-
-        // C2-C5 <- (AH+AL) x (BH+BL), low part
-	mul	x3, x4, x23
-	umulh	x23, x4, x23
-	adds	x20, x20, x22
-	adc	x21, x21, xzr
-
-	mul	x24, x4, x26
-	umulh	x26, x4, x26
-	adds	x20, x20, x3
-	adcs	x21, x21, x23
-	adc	x22, xzr, xzr
-
-	adds	x21, x21, x24
-	adc	x22, x22, x26
-
-	ldp	x3, x4, [x2,#0]
-
-        // C2-C5, T0 <- (AH+AL) x (BH+BL), final part
-	adds	x21, x8, x21
-	umulh	x24, x3, x10
-	umulh	x26, x3, x11
-	adcs	x22, x9, x22
-	mul	x8, x3, x10
-	mul	x9, x3, x11
-	adc	x25, x25, xzr
-
-        // C0-C1, T1, C7 <- AL x BL
-	mul	x3, x4, x10
-	umulh	x10, x4, x10
-	adds	x9, x9, x24
-	adc	x26, x26, xzr
-
-	mul	x23, x4, x11
-	umulh	x11, x4, x11
-	adds	x9, x9, x3
-	adcs	x26, x26, x10
-	adc	x24, xzr, xzr
-
-	adds	x26, x26, x23
-	adc	x24, x24, x11
-
-
-        // C2-C5, T0 <- (AH+AL) x (BH+BL) - ALxBL
-	mul	x3, x5, x12
-	umulh	x10, x5, x12
-	subs	x19, x19, x8
-	sbcs	x20, x20, x9
-	sbcs	x21, x21, x26
-	mul	x4, x5, x13
-	umulh	x23, x5, x13
-	sbcs	x22, x22, x24
-	sbc	x25, x25, xzr
-
-        // A0, A1, C6, B0 <- AH x BH
-	mul	x5, x6, x12
-	umulh	x12, x6, x12
-	adds	x4, x4, x10
-	adc	x23, x23, xzr
-
-	mul	x11, x6, x13
-	umulh	x13, x6, x13
-	adds	x4, x4, x5
-	adcs	x23, x23, x12
-	adc	x10, xzr, xzr
-
-	adds	x23, x23, x11
-	adc	x10, x10, x13
-
-
-        // C2-C5, T0 <- (AH+AL) x (BH+BL) - ALxBL - AHxBH
-	subs	x19, x19, x3
-	sbcs	x20, x20, x4
-	sbcs	x21, x21, x23
-	sbcs	x22, x22, x10
-	sbc	x25, x25, xzr
-
-	adds	x19, x19, x26
-	adcs	x20, x20, x24
-	adcs	x21, x21, x3
-	adcs	x22, x22, x4
-	adcs	x23, x25, x23
-	adc	x24, x10, xzr
-
-
-        // x15-x19, x7 <- (AH+AL) x (BH+BL), final step
-	adds	x14, x14, x21
-	adcs	x15, x15, x22
-	adcs	x16, x16, x23
-	adcs	x17, x17, x24
-	adc	x7, x7, xzr
-
-        // Load AL
-	ldp	x3, x4, [x0]
-	ldp	x5, x6, [x0,#16]
-        // Load BL
-	ldp	x10, x11, [x1,#0]
-	ldp	x12, x13, [x1,#16]
-
-        // Temporarily store x8 in x2
-	stp	x8, x9, [x2,#0]
-        // x21-x28 <- AL x BL
-                // A0-A1 <- AH + AL, T0 <- mask
-	adds	x3, x3, x5
-	adcs	x4, x4, x6
-	adc	x8, xzr, xzr
-
-        // C6, T1 <- BH + BL, C7 <- mask
-	adds	x27, x10, x12
-	adcs	x9, x11, x13
-	adc	x28, xzr, xzr
-
-        // C0-C1 <- masked (BH + BL)
-	sub	x23, xzr, x8
-	sub	x24, xzr, x28
-	and	x21, x27, x23
-	and	x22, x9, x23
-
-        // C4-C5 <- masked (AH + AL), T0 <- combined carry
-	and	x25, x3, x24
-	and	x26, x4, x24
-	mul	x23, x3, x27
-	mul	x24, x3, x9
-	and	x8, x8, x28
-
-        // C0-C1, T0 <- (AH+AL) x (BH+BL), part 1
-	adds	x21, x25, x21
-	umulh	x25, x3, x9
-	adcs	x22, x26, x22
-	umulh	x26, x3, x27
-	adc	x8, x8, xzr
-
-        // C2-C5 <- (AH+AL) x (BH+BL), low part
-	mul	x3, x4, x27
-	umulh	x27, x4, x27
-	adds	x24, x24, x26
-	adc	x25, x25, xzr
-
-	mul	x28, x4, x9
-	umulh	x9, x4, x9
-	adds	x24, x24, x3
-	adcs	x25, x25, x27
-	adc	x26, xzr, xzr
-
-	adds	x25, x25, x28
-	adc	x26, x26, x9
-
-	ldp	x3, x4, [x0,#0]
-
-        // C2-C5, T0 <- (AH+AL) x (BH+BL), final part
-	adds	x25, x21, x25
-	umulh	x28, x3, x10
-	umulh	x9, x3, x11
-	adcs	x26, x22, x26
-	mul	x21, x3, x10
-	mul	x22, x3, x11
-	adc	x8, x8, xzr
-
-        // C0-C1, T1, C7 <- AL x BL
-	mul	x3, x4, x10
-	umulh	x10, x4, x10
-	adds	x22, x22, x28
-	adc	x9, x9, xzr
-
-	mul	x27, x4, x11
-	umulh	x11, x4, x11
-	adds	x22, x22, x3
-	adcs	x9, x9, x10
-	adc	x28, xzr, xzr
-
-	adds	x9, x9, x27
-	adc	x28, x28, x11
-
-
-        // C2-C5, T0 <- (AH+AL) x (BH+BL) - ALxBL
-	mul	x3, x5, x12
-	umulh	x10, x5, x12
-	subs	x23, x23, x21
-	sbcs	x24, x24, x22
-	sbcs	x25, x25, x9
-	mul	x4, x5, x13
-	umulh	x27, x5, x13
-	sbcs	x26, x26, x28
-	sbc	x8, x8, xzr
-
-        // A0, A1, C6, B0 <- AH x BH
-	mul	x5, x6, x12
-	umulh	x12, x6, x12
-	adds	x4, x4, x10
-	adc	x27, x27, xzr
-
-	mul	x11, x6, x13
-	umulh	x13, x6, x13
-	adds	x4, x4, x5
-	adcs	x27, x27, x12
-	adc	x10, xzr, xzr
-
-	adds	x27, x27, x11
-	adc	x10, x10, x13
-
-
-        // C2-C5, T0 <- (AH+AL) x (BH+BL) - ALxBL - AHxBH
-	subs	x23, x23, x3
-	sbcs	x24, x24, x4
-	sbcs	x25, x25, x27
-	sbcs	x26, x26, x10
-	sbc	x8, x8, xzr
-
-	adds	x23, x23, x9
-	adcs	x24, x24, x28
-	adcs	x25, x25, x3
-	adcs	x26, x26, x4
-	adcs	x27, x8, x27
-	adc	x28, x10, xzr
-
-        // Restore x8
-	ldp	x8, x9, [x2,#0]
-
-        // x8-x10,x20,x15-x17,x19 <- maskd (AH+AL) x (BH+BL) - ALxBL
-	subs	x8, x8, x21
-	sbcs	x9, x9, x22
-	sbcs	x19, x19, x23
-	sbcs	x20, x20, x24
-	sbcs	x14, x14, x25
-	sbcs	x15, x15, x26
-	sbcs	x16, x16, x27
-	sbcs	x17, x17, x28
-	sbc	x7, x7, xzr
-
-        // Store ALxBL, low
-	stp	x21, x22, [x2]
-	stp	x23, x24, [x2,#16]
-
-        // Load AH
-	ldp	x3, x4, [x0,#32]
-	ldr	x5,     [x0,#48]
-        // Load BH
-	ldp	x10, x11, [x1,#32]
-	ldr	x12,      [x1,#48]
-
-	adds	x8,  x8, x25
-	adcs	x9,  x9, x26
-	adcs	x19, x19, x27
-	adcs	x20, x20, x28
-	adc	x1, xzr, xzr
-
-	add	x0, x0, #32
-        // Temporarily store x8,x9 in x2
-	stp	x8,x9, [x2,#32]
-        // x21-x28 <- AH x BH
-
-        // A0 * B0
-	mul	x21, x3, x10  // C0
-	umulh	x24, x3, x10
-
-        // A0 * B1
-	mul	x22, x3, x11
-	umulh	x23, x3, x11
-
-        // A1 * B0
-	mul	x8, x4, x10
-	umulh	x9, x4, x10
-	adds	x22, x22, x24
-	adc	x23, x23, xzr
-
-        // A0 * B2
-	mul	x27, x3, x12
-	umulh	x28, x3, x12
-	adds	x22, x22, x8  // C1
-	adcs	x23, x23, x9
-	adc	x24, xzr, xzr
-
-        // A2 * B0
-	mul	x8, x5, x10
-	umulh	x25, x5, x10
-	adds	x23, x23, x27
-	adcs	x24, x24, x25
-	adc	x25, xzr, xzr
-
-        // A1 * B1
-	mul	x27, x4, x11
-	umulh	x9, x4, x11
-	adds	x23, x23, x8
-	adcs	x24, x24, x28
-	adc	x25, x25, xzr
-
-        // A1 * B2
-	mul	x8, x4, x12
-	umulh	x28, x4, x12
-	adds	x23, x23, x27 // C2
-	adcs	x24, x24, x9
-	adc	x25, x25, xzr
-
-        // A2 * B1
-	mul	x27, x5, x11
-	umulh	x9, x5, x11
-	adds	x24, x24, x8
-	adcs	x25, x25, x28
-	adc	x26, xzr, xzr
-
-        // A2 * B2
-	mul	x8, x5, x12
-	umulh	x28, x5, x12
-	adds	x24, x24, x27 // C3
-	adcs	x25, x25, x9
-	adc	x26, x26, xzr
-
-	adds	x25, x25, x8 // C4
-	adc	x26, x26, x28 // C5
-
-        // Restore x8,x9
-	ldp	x8,x9, [x2,#32]
-
-	neg	x1, x1
-
-        // x8-x9,x19,x20,x14-x17 <- (AH+AL) x (BH+BL) - ALxBL - AHxBH
-	subs	x8, x8, x21
-	sbcs	x9, x9, x22
-	sbcs	x19, x19, x23
-	sbcs	x20, x20, x24
-	sbcs	x14, x14, x25
-	sbcs	x15, x15, x26
-	sbcs	x16, x16, xzr
-	sbcs	x17, x17, xzr
-	sbc	x7, x7, xzr
-
-        // Store (AH+AL) x (BH+BL) - ALxBL - AHxBH, low
-	stp	x8,  x9, [x2,#32]
-	stp	x19, x20, [x2,#48]
-
-	adds	x1,  x1, #1
-	adcs	x14, x14, x21
-	adcs	x15, x15, x22
-	adcs	x16, x16, x23
-	adcs	x17, x17, x24
-	adcs	x25,  x7, x25
-	adc	x26, x26, xzr
-
-	stp	x14, x15, [x2,#64]
-	stp	x16, x17, [x2,#80]
-	stp	x25, x26, [x2,#96]
-
-	ldp	x19, x20, [x29,#16]
-	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
-	ret
-.globl	_sike_fprdc
-.private_extern	_sike_fprdc
-.align	4
-_sike_fprdc:
-	stp	x29, x30, [sp, #-96]!
-	add	x29, sp, xzr
-	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]
-
-	ldp	x2, x3, [x0,#0]       // a[0-1]
-
-        // Load the prime constant
-	adrp	x26, Lp434p1@PAGE
-	add	x26, x26, Lp434p1@PAGEOFF
-	ldp	x23, x24, [x26, #0x0]
-	ldp	x25, x26, [x26,#0x10]
-
-        // a[0-1] * p434+1
-	mul	x4, x2, x23  // C0
-	umulh	x7, x2, x23
-
-	mul	x5, x2, x24
-	umulh	x6, x2, x24
-
-	mul	x10, x3, x23
-	umulh	x11, x3, x23
-	adds	x5, x5, x7
-	adc	x6, x6, xzr
-
-	mul	x27, x2, x25
-	umulh	x28, x2, x25
-	adds	x5, x5, x10  // C1
-	adcs	x6, x6, x11
-	adc	x7, xzr, xzr
-
-	mul	x10, x3, x24
-	umulh	x11, x3, x24
-	adds	x6, x6, x27
-	adcs	x7, x7, x28
-	adc	x8, xzr, xzr
-
-	mul	x27, x2, x26
-	umulh	x28, x2, x26
-	adds	x6, x6, x10  // C2
-	adcs	x7, x7, x11
-	adc	x8, x8, xzr
-
-	mul	x10, x3, x25
-	umulh	x11, x3, x25
-	adds	x7, x7, x27
-	adcs	x8, x8, x28
-	adc	x9, xzr, xzr
-
-	mul	x27, x3, x26
-	umulh	x28, x3, x26
-	adds	x7, x7, x10  // C3
-	adcs	x8, x8, x11
-	adc	x9, x9, xzr
-	adds	x8, x8, x27  // C4
-	adc	x9, x9, x28  // C5
-
-
-
-	ldp	x10, x11, [x0, #0x18]
-	ldp	x12, x13, [x0, #0x28]
-	ldp	x14, x15, [x0, #0x38]
-	ldp	x16, x17, [x0, #0x48]
-	ldp	x19, x20, [x0, #0x58]
-	ldr	x21,      [x0, #0x68]
-
-	adds	x10, x10, x4
-	adcs	x11, x11, x5
-	adcs	x12, x12, x6
-	adcs	x13, x13, x7
-	adcs	x14, x14, x8
-	adcs	x15, x15, x9
-	adcs	x22, x16, xzr
-	adcs	x17, x17, xzr
-	adcs	x19, x19, xzr
-	adcs	x20, x20, xzr
-	adc	x21, x21, xzr
-
-	ldr	x2,  [x0,#0x10]       // a[2]
-        // a[2-3] * p434+1
-	mul	x4, x2, x23  // C0
-	umulh	x7, x2, x23
-
-	mul	x5, x2, x24
-	umulh	x6, x2, x24
-
-	mul	x0, x10, x23
-	umulh	x3, x10, x23
-	adds	x5, x5, x7
-	adc	x6, x6, xzr
-
-	mul	x27, x2, x25
-	umulh	x28, x2, x25
-	adds	x5, x5, x0  // C1
-	adcs	x6, x6, x3
-	adc	x7, xzr, xzr
-
-	mul	x0, x10, x24
-	umulh	x3, x10, x24
-	adds	x6, x6, x27
-	adcs	x7, x7, x28
-	adc	x8, xzr, xzr
-
-	mul	x27, x2, x26
-	umulh	x28, x2, x26
-	adds	x6, x6, x0  // C2
-	adcs	x7, x7, x3
-	adc	x8, x8, xzr
-
-	mul	x0, x10, x25
-	umulh	x3, x10, x25
-	adds	x7, x7, x27
-	adcs	x8, x8, x28
-	adc	x9, xzr, xzr
-
-	mul	x27, x10, x26
-	umulh	x28, x10, x26
-	adds	x7, x7, x0  // C3
-	adcs	x8, x8, x3
-	adc	x9, x9, xzr
-	adds	x8, x8, x27  // C4
-	adc	x9, x9, x28  // C5
-
-
-
-	adds	x12, x12, x4
-	adcs	x13, x13, x5
-	adcs	x14, x14, x6
-	adcs	x15, x15, x7
-	adcs	x16, x22, x8
-	adcs	x17, x17, x9
-	adcs	x22, x19, xzr
-	adcs	x20, x20, xzr
-	adc	x21, x21, xzr
-
-	mul	x4, x11, x23  // C0
-	umulh	x7, x11, x23
-
-	mul	x5, x11, x24
-	umulh	x6, x11, x24
-
-	mul	x10, x12, x23
-	umulh	x3, x12, x23
-	adds	x5, x5, x7
-	adc	x6, x6, xzr
-
-	mul	x27, x11, x25
-	umulh	x28, x11, x25
-	adds	x5, x5, x10  // C1
-	adcs	x6, x6, x3
-	adc	x7, xzr, xzr
-
-	mul	x10, x12, x24
-	umulh	x3, x12, x24
-	adds	x6, x6, x27
-	adcs	x7, x7, x28
-	adc	x8, xzr, xzr
-
-	mul	x27, x11, x26
-	umulh	x28, x11, x26
-	adds	x6, x6, x10  // C2
-	adcs	x7, x7, x3
-	adc	x8, x8, xzr
-
-	mul	x10, x12, x25
-	umulh	x3, x12, x25
-	adds	x7, x7, x27
-	adcs	x8, x8, x28
-	adc	x9, xzr, xzr
-
-	mul	x27, x12, x26
-	umulh	x28, x12, x26
-	adds	x7, x7, x10  // C3
-	adcs	x8, x8, x3
-	adc	x9, x9, xzr
-	adds	x8, x8, x27  // C4
-	adc	x9, x9, x28  // C5
-
-
-	adds	x14, x14, x4
-	adcs	x15, x15, x5
-	adcs	x16, x16, x6
-	adcs	x17, x17, x7
-	adcs	x19, x22, x8
-	adcs	x20, x20, x9
-	adc	x22, x21, xzr
-
-	stp	x14, x15, [x1, #0x0]     // C0, C1
-
-	mul	x4, x13, x23    // C0
-	umulh	x10, x13, x23
-
-	mul	x5, x13, x24
-	umulh	x27, x13, x24
-	adds	x5, x5, x10    // C1
-	adc	x10, xzr, xzr
-
-	mul	x6, x13, x25
-	umulh	x28, x13, x25
-	adds	x27, x10, x27
-	adcs	x6, x6, x27    // C2
-	adc	x10, xzr, xzr
-
-	mul	x7, x13, x26
-	umulh	x8, x13, x26
-	adds	x28, x10, x28
-	adcs	x7, x7, x28    // C3
-	adc	x8, x8, xzr    // C4
-
-	adds	x16, x16, x4
-	adcs	x17, x17, x5
-	adcs	x19, x19, x6
-	adcs	x20, x20, x7
-	adc	x21, x22, x8
-
-	str	x16,       [x1, #0x10]
-	stp	x17, x19,  [x1, #0x18]
-	stp	x20, x21,  [x1, #0x28]
-
-	ldp	x19, x20, [x29,#16]
-	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
-	ret
-.globl	_sike_fpadd
-.private_extern	_sike_fpadd
-.align	4
-_sike_fpadd:
-	stp	x29,x30, [sp,#-16]!
-	add	x29, sp, #0
-
-	ldp	x3, x4,   [x0,#0]
-	ldp	x5, x6,   [x0,#16]
-	ldp	x7, x8,   [x0,#32]
-	ldr	x9,       [x0,#48]
-	ldp	x11, x12, [x1,#0]
-	ldp	x13, x14, [x1,#16]
-	ldp	x15, x16, [x1,#32]
-	ldr	x17,      [x1,#48]
-
-        // Add a + b
-	adds	x3, x3, x11
-	adcs	x4, x4, x12
-	adcs	x5, x5, x13
-	adcs	x6, x6, x14
-	adcs	x7, x7, x15
-	adcs	x8, x8, x16
-	adc	x9, x9, x17
-
-        //  Subtract 2xp434
-	adrp	x17, Lp434x2@PAGE
-	add	x17, x17, Lp434x2@PAGEOFF
-	ldp	x11, x12, [x17, #0]
-	ldp	x13, x14, [x17, #16]
-	ldp	x15, x16, [x17, #32]
-	subs	x3, x3, x11
-	sbcs	x4, x4, x12
-	sbcs	x5, x5, x12
-	sbcs	x6, x6, x13
-	sbcs	x7, x7, x14
-	sbcs	x8, x8, x15
-	sbcs	x9, x9, x16
-	sbc	x0, xzr, xzr    // x0 can be reused now
-
-        // Add 2xp434 anded with the mask in x0
-	and	x11, x11, x0
-	and	x12, x12, x0
-	and	x13, x13, x0
-	and	x14, x14, x0
-	and	x15, x15, x0
-	and	x16, x16, x0
-
-	adds	x3, x3, x11
-	adcs	x4, x4, x12
-	adcs	x5, x5, x12
-	adcs	x6, x6, x13
-	adcs	x7, x7, x14
-	adcs	x8, x8, x15
-	adc	x9, x9, x16
-
-	stp	x3, x4,  [x2,#0]
-	stp	x5, x6,  [x2,#16]
-	stp	x7, x8,  [x2,#32]
-	str	x9,      [x2,#48]
-
-	ldp	x29, x30, [sp],#16
-	ret
-.globl	_sike_fpsub
-.private_extern	_sike_fpsub
-.align	4
-_sike_fpsub:
-	stp	x29, x30, [sp,#-16]!
-	add	x29, sp, #0
-
-	ldp	x3, x4,   [x0,#0]
-	ldp	x5, x6,   [x0,#16]
-	ldp	x7, x8,   [x0,#32]
-	ldr	x9,       [x0,#48]
-	ldp	x11, x12, [x1,#0]
-	ldp	x13, x14, [x1,#16]
-	ldp	x15, x16, [x1,#32]
-	ldr	x17,      [x1,#48]
-
-        // Subtract a - b
-	subs	x3, x3, x11
-	sbcs	x4, x4, x12
-	sbcs	x5, x5, x13
-	sbcs	x6, x6, x14
-	sbcs	x7, x7, x15
-	sbcs	x8, x8, x16
-	sbcs	x9, x9, x17
-	sbc	x0, xzr, xzr
-
-        // Add 2xp434 anded with the mask in x0
-	adrp	x17, Lp434x2@PAGE
-	add	x17, x17, Lp434x2@PAGEOFF
-
-        // First half
-	ldp	x11, x12, [x17, #0]
-	ldp	x13, x14, [x17, #16]
-	ldp	x15, x16, [x17, #32]
-
-        // Add 2xp434 anded with the mask in x0
-	and	x11, x11, x0
-	and	x12, x12, x0
-	and	x13, x13, x0
-	and	x14, x14, x0
-	and	x15, x15, x0
-	and	x16, x16, x0
-
-	adds	x3, x3, x11
-	adcs	x4, x4, x12
-	adcs	x5, x5, x12
-	adcs	x6, x6, x13
-	adcs	x7, x7, x14
-	adcs	x8, x8, x15
-	adc	x9, x9, x16
-
-	stp	x3, x4,  [x2,#0]
-	stp	x5, x6,  [x2,#16]
-	stp	x7, x8,  [x2,#32]
-	str	x9,      [x2,#48]
-
-	ldp	x29, x30, [sp],#16
-	ret
-.globl	_sike_mpadd_asm
-.private_extern	_sike_mpadd_asm
-.align	4
-_sike_mpadd_asm:
-	stp	x29, x30, [sp,#-16]!
-	add	x29, sp, #0
-
-	ldp	x3, x4,   [x0,#0]
-	ldp	x5, x6,   [x0,#16]
-	ldp	x7, x8,   [x0,#32]
-	ldr	x9,       [x0,#48]
-	ldp	x11, x12, [x1,#0]
-	ldp	x13, x14, [x1,#16]
-	ldp	x15, x16, [x1,#32]
-	ldr	x17,      [x1,#48]
-
-	adds	x3, x3, x11
-	adcs	x4, x4, x12
-	adcs	x5, x5, x13
-	adcs	x6, x6, x14
-	adcs	x7, x7, x15
-	adcs	x8, x8, x16
-	adc	x9, x9, x17
-
-	stp	x3, x4,   [x2,#0]
-	stp	x5, x6,   [x2,#16]
-	stp	x7, x8,   [x2,#32]
-	str	x9,       [x2,#48]
-
-	ldp	x29, x30, [sp],#16
-	ret
-.globl	_sike_mpsubx2_asm
-.private_extern	_sike_mpsubx2_asm
-.align	4
-_sike_mpsubx2_asm:
-	stp	x29, x30, [sp,#-16]!
-	add	x29, sp, #0
-
-	ldp	x3, x4,   [x0,#0]
-	ldp	x5, x6,   [x0,#16]
-	ldp	x11, x12, [x1,#0]
-	ldp	x13, x14, [x1,#16]
-	subs	x3, x3, x11
-	sbcs	x4, x4, x12
-	sbcs	x5, x5, x13
-	sbcs	x6, x6, x14
-	ldp	x7, x8,   [x0,#32]
-	ldp	x9, x10,  [x0,#48]
-	ldp	x11, x12, [x1,#32]
-	ldp	x13, x14, [x1,#48]
-	sbcs	x7, x7, x11
-	sbcs	x8, x8, x12
-	sbcs	x9, x9, x13
-	sbcs	x10, x10, x14
-
-	stp	x3, x4,   [x2,#0]
-	stp	x5, x6,   [x2,#16]
-	stp	x7, x8,   [x2,#32]
-	stp	x9, x10,  [x2,#48]
-
-	ldp	x3, x4,   [x0,#64]
-	ldp	x5, x6,   [x0,#80]
-	ldp	x11, x12, [x1,#64]
-	ldp	x13, x14, [x1,#80]
-	sbcs	x3, x3, x11
-	sbcs	x4, x4, x12
-	sbcs	x5, x5, x13
-	sbcs	x6, x6, x14
-	ldp	x7, x8,   [x0,#96]
-	ldp	x11, x12, [x1,#96]
-	sbcs	x7, x7, x11
-	sbcs	x8, x8, x12
-	sbc	x0, xzr, xzr
-
-	stp	x3, x4,   [x2,#64]
-	stp	x5, x6,   [x2,#80]
-	stp	x7, x8,   [x2,#96]
-
-	ldp	x29, x30, [sp],#16
-	ret
-.globl	_sike_mpdblsubx2_asm
-.private_extern	_sike_mpdblsubx2_asm
-.align	4
-_sike_mpdblsubx2_asm:
-	stp	x29, x30, [sp, #-16]!
-	add	x29, sp, #0
-
-	ldp	x3, x4,   [x2, #0]
-	ldp	x5, x6,   [x2,#16]
-	ldp	x7, x8,   [x2,#32]
-
-	ldp	x11, x12, [x0, #0]
-	ldp	x13, x14, [x0,#16]
-	ldp	x15, x16, [x0,#32]
-
-	subs	x3, x3, x11
-	sbcs	x4, x4, x12
-	sbcs	x5, x5, x13
-	sbcs	x6, x6, x14
-	sbcs	x7, x7, x15
-	sbcs	x8, x8, x16
-
-        // x9 stores carry
-	adc	x9, xzr, xzr
-
-	ldp	x11, x12, [x1, #0]
-	ldp	x13, x14, [x1,#16]
-	ldp	x15, x16, [x1,#32]
-	subs	x3, x3, x11
-	sbcs	x4, x4, x12
-	sbcs	x5, x5, x13
-	sbcs	x6, x6, x14
-	sbcs	x7, x7, x15
-	sbcs	x8, x8, x16
-	adc	x9, x9, xzr
-
-	stp	x3, x4,   [x2, #0]
-	stp	x5, x6,   [x2,#16]
-	stp	x7, x8,   [x2,#32]
-
-	ldp	x3, x4,   [x2,#48]
-	ldp	x5, x6,   [x2,#64]
-	ldp	x7, x8,   [x2,#80]
-
-	ldp	x11, x12, [x0,#48]
-	ldp	x13, x14, [x0,#64]
-	ldp	x15, x16, [x0,#80]
-
-        // x9 = 2 - x9
-	neg	x9, x9
-	add	x9, x9, #2
-
-	subs	x3, x3, x9
-	sbcs	x3, x3, x11
-	sbcs	x4, x4, x12
-	sbcs	x5, x5, x13
-	sbcs	x6, x6, x14
-	sbcs	x7, x7, x15
-	sbcs	x8, x8, x16
-	adc	x9, xzr, xzr
-
-	ldp	x11, x12, [x1,#48]
-	ldp	x13, x14, [x1,#64]
-	ldp	x15, x16, [x1,#80]
-	subs	x3, x3, x11
-	sbcs	x4, x4, x12
-	sbcs	x5, x5, x13
-	sbcs	x6, x6, x14
-	sbcs	x7, x7, x15
-	sbcs	x8, x8, x16
-	adc	x9, x9, xzr
-
-	stp	x3, x4,   [x2,#48]
-	stp	x5, x6,   [x2,#64]
-	stp	x7, x8,   [x2,#80]
-
-	ldp	x3,  x4, [x2,#96]
-	ldp	x11, x12, [x0,#96]
-	ldp	x13, x14, [x1,#96]
-
-        // x9 = 2 - x9
-	neg	x9, x9
-	add	x9, x9, #2
-
-	subs	x3, x3, x9
-	sbcs	x3, x3, x11
-	sbcs	x4, x4, x12
-	subs	x3, x3, x13
-	sbc	x4, x4, x14
-	stp	x3, x4,   [x2,#96]
-
-	ldp	x29, x30, [sp],#16
-	ret
-#endif  // !OPENSSL_NO_ASM
diff --git a/linux-aarch64/crypto/third_party/sike/asm/fp-armv8.S b/linux-aarch64/crypto/third_party/sike/asm/fp-armv8.S
deleted file mode 100644
index 5676d75..0000000
--- a/linux-aarch64/crypto/third_party/sike/asm/fp-armv8.S
+++ /dev/null
@@ -1,997 +0,0 @@
-// This file is generated from a similarly-named Perl script in the BoringSSL
-// source tree. Do not edit by hand.
-
-#if defined(__has_feature)
-#if __has_feature(memory_sanitizer) && !defined(OPENSSL_NO_ASM)
-#define OPENSSL_NO_ASM
-#endif
-#endif
-
-#if !defined(OPENSSL_NO_ASM)
-#if defined(__aarch64__)
-#if defined(BORINGSSL_PREFIX)
-#include <boringssl_prefix_symbols_asm.h>
-#endif
-.section	.rodata
-
-# p434 x 2
-.Lp434x2:
-.quad	0xFFFFFFFFFFFFFFFE, 0xFFFFFFFFFFFFFFFF
-.quad	0xFB82ECF5C5FFFFFF, 0xF78CB8F062B15D47
-.quad	0xD9F8BFAD038A40AC, 0x0004683E4E2EE688
-
-# p434 + 1
-.Lp434p1:
-.quad	0xFDC1767AE3000000, 0x7BC65C783158AEA3
-.quad	0x6CFC5FD681C52056, 0x0002341F27177344
-
-.text
-.globl	sike_mpmul
-.hidden	sike_mpmul
-.align	4
-sike_mpmul:
-	stp	x29, x30, [sp,#-96]!
-	add	x29, sp, #0
-	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]
-
-	ldp	x3,  x4, [x0]
-	ldp	x5,  x6, [x0,#16]
-	ldp	x7,  x8, [x0,#32]
-	ldr	x9,      [x0,#48]
-	ldp	x10, x11, [x1,#0]
-	ldp	x12, x13, [x1,#16]
-	ldp	x14, x15, [x1,#32]
-	ldr	x16,      [x1,#48]
-
-        // x3-x7 <- AH + AL, x7 <- carry
-	adds	x3, x3, x7
-	adcs	x4, x4, x8
-	adcs	x5, x5, x9
-	adcs	x6, x6, xzr
-	adc	x7, xzr, xzr
-
-        // x10-x13 <- BH + BL, x8 <- carry
-	adds	x10, x10, x14
-	adcs	x11, x11, x15
-	adcs	x12, x12, x16
-	adcs	x13, x13, xzr
-	adc	x8, xzr, xzr
-
-        // x9 <- combined carry
-	and	x9, x7, x8
-        // x7-x8 <- mask
-	sub	x7, xzr, x7
-	sub	x8, xzr, x8
-
-        // x15-x19 <- masked (BH + BL)
-	and	x14, x10, x7
-	and	x15, x11, x7
-	and	x16, x12, x7
-	and	x17, x13, x7
-
-        // x20-x23 <- masked (AH + AL)
-	and	x20, x3, x8
-	and	x21, x4, x8
-	and	x22, x5, x8
-	and	x23, x6, x8
-
-        // x15-x19, x7 <- masked (AH+AL) + masked (BH+BL), step 1
-	adds	x14, x14, x20
-	adcs	x15, x15, x21
-	adcs	x16, x16, x22
-	adcs	x17, x17, x23
-	adc	x7, x9, xzr
-
-        // x8-x9,x19,x20-x24 <- (AH+AL) x (BH+BL), low part
-	stp	x3, x4, [x2,#0]
-                // A0-A1 <- AH + AL, T0 <- mask
-	adds	x3, x3, x5
-	adcs	x4, x4, x6
-	adc	x25, xzr, xzr
-
-        // C6, T1 <- BH + BL, C7 <- mask
-	adds	x23, x10, x12
-	adcs	x26, x11, x13
-	adc	x24, xzr, xzr
-
-        // C0-C1 <- masked (BH + BL)
-	sub	x19, xzr, x25
-	sub	x20, xzr, x24
-	and	x8, x23, x19
-	and	x9, x26, x19
-
-        // C4-C5 <- masked (AH + AL), T0 <- combined carry
-	and	x21, x3, x20
-	and	x22, x4, x20
-	mul	x19, x3, x23
-	mul	x20, x3, x26
-	and	x25, x25, x24
-
-        // C0-C1, T0 <- (AH+AL) x (BH+BL), part 1
-	adds	x8, x21, x8
-	umulh	x21, x3, x26
-	adcs	x9, x22, x9
-	umulh	x22, x3, x23
-	adc	x25, x25, xzr
-
-        // C2-C5 <- (AH+AL) x (BH+BL), low part
-	mul	x3, x4, x23
-	umulh	x23, x4, x23
-	adds	x20, x20, x22
-	adc	x21, x21, xzr
-
-	mul	x24, x4, x26
-	umulh	x26, x4, x26
-	adds	x20, x20, x3
-	adcs	x21, x21, x23
-	adc	x22, xzr, xzr
-
-	adds	x21, x21, x24
-	adc	x22, x22, x26
-
-	ldp	x3, x4, [x2,#0]
-
-        // C2-C5, T0 <- (AH+AL) x (BH+BL), final part
-	adds	x21, x8, x21
-	umulh	x24, x3, x10
-	umulh	x26, x3, x11
-	adcs	x22, x9, x22
-	mul	x8, x3, x10
-	mul	x9, x3, x11
-	adc	x25, x25, xzr
-
-        // C0-C1, T1, C7 <- AL x BL
-	mul	x3, x4, x10
-	umulh	x10, x4, x10
-	adds	x9, x9, x24
-	adc	x26, x26, xzr
-
-	mul	x23, x4, x11
-	umulh	x11, x4, x11
-	adds	x9, x9, x3
-	adcs	x26, x26, x10
-	adc	x24, xzr, xzr
-
-	adds	x26, x26, x23
-	adc	x24, x24, x11
-
-
-        // C2-C5, T0 <- (AH+AL) x (BH+BL) - ALxBL
-	mul	x3, x5, x12
-	umulh	x10, x5, x12
-	subs	x19, x19, x8
-	sbcs	x20, x20, x9
-	sbcs	x21, x21, x26
-	mul	x4, x5, x13
-	umulh	x23, x5, x13
-	sbcs	x22, x22, x24
-	sbc	x25, x25, xzr
-
-        // A0, A1, C6, B0 <- AH x BH
-	mul	x5, x6, x12
-	umulh	x12, x6, x12
-	adds	x4, x4, x10
-	adc	x23, x23, xzr
-
-	mul	x11, x6, x13
-	umulh	x13, x6, x13
-	adds	x4, x4, x5
-	adcs	x23, x23, x12
-	adc	x10, xzr, xzr
-
-	adds	x23, x23, x11
-	adc	x10, x10, x13
-
-
-        // C2-C5, T0 <- (AH+AL) x (BH+BL) - ALxBL - AHxBH
-	subs	x19, x19, x3
-	sbcs	x20, x20, x4
-	sbcs	x21, x21, x23
-	sbcs	x22, x22, x10
-	sbc	x25, x25, xzr
-
-	adds	x19, x19, x26
-	adcs	x20, x20, x24
-	adcs	x21, x21, x3
-	adcs	x22, x22, x4
-	adcs	x23, x25, x23
-	adc	x24, x10, xzr
-
-
-        // x15-x19, x7 <- (AH+AL) x (BH+BL), final step
-	adds	x14, x14, x21
-	adcs	x15, x15, x22
-	adcs	x16, x16, x23
-	adcs	x17, x17, x24
-	adc	x7, x7, xzr
-
-        // Load AL
-	ldp	x3, x4, [x0]
-	ldp	x5, x6, [x0,#16]
-        // Load BL
-	ldp	x10, x11, [x1,#0]
-	ldp	x12, x13, [x1,#16]
-
-        // Temporarily store x8 in x2
-	stp	x8, x9, [x2,#0]
-        // x21-x28 <- AL x BL
-                // A0-A1 <- AH + AL, T0 <- mask
-	adds	x3, x3, x5
-	adcs	x4, x4, x6
-	adc	x8, xzr, xzr
-
-        // C6, T1 <- BH + BL, C7 <- mask
-	adds	x27, x10, x12
-	adcs	x9, x11, x13
-	adc	x28, xzr, xzr
-
-        // C0-C1 <- masked (BH + BL)
-	sub	x23, xzr, x8
-	sub	x24, xzr, x28
-	and	x21, x27, x23
-	and	x22, x9, x23
-
-        // C4-C5 <- masked (AH + AL), T0 <- combined carry
-	and	x25, x3, x24
-	and	x26, x4, x24
-	mul	x23, x3, x27
-	mul	x24, x3, x9
-	and	x8, x8, x28
-
-        // C0-C1, T0 <- (AH+AL) x (BH+BL), part 1
-	adds	x21, x25, x21
-	umulh	x25, x3, x9
-	adcs	x22, x26, x22
-	umulh	x26, x3, x27
-	adc	x8, x8, xzr
-
-        // C2-C5 <- (AH+AL) x (BH+BL), low part
-	mul	x3, x4, x27
-	umulh	x27, x4, x27
-	adds	x24, x24, x26
-	adc	x25, x25, xzr
-
-	mul	x28, x4, x9
-	umulh	x9, x4, x9
-	adds	x24, x24, x3
-	adcs	x25, x25, x27
-	adc	x26, xzr, xzr
-
-	adds	x25, x25, x28
-	adc	x26, x26, x9
-
-	ldp	x3, x4, [x0,#0]
-
-        // C2-C5, T0 <- (AH+AL) x (BH+BL), final part
-	adds	x25, x21, x25
-	umulh	x28, x3, x10
-	umulh	x9, x3, x11
-	adcs	x26, x22, x26
-	mul	x21, x3, x10
-	mul	x22, x3, x11
-	adc	x8, x8, xzr
-
-        // C0-C1, T1, C7 <- AL x BL
-	mul	x3, x4, x10
-	umulh	x10, x4, x10
-	adds	x22, x22, x28
-	adc	x9, x9, xzr
-
-	mul	x27, x4, x11
-	umulh	x11, x4, x11
-	adds	x22, x22, x3
-	adcs	x9, x9, x10
-	adc	x28, xzr, xzr
-
-	adds	x9, x9, x27
-	adc	x28, x28, x11
-
-
-        // C2-C5, T0 <- (AH+AL) x (BH+BL) - ALxBL
-	mul	x3, x5, x12
-	umulh	x10, x5, x12
-	subs	x23, x23, x21
-	sbcs	x24, x24, x22
-	sbcs	x25, x25, x9
-	mul	x4, x5, x13
-	umulh	x27, x5, x13
-	sbcs	x26, x26, x28
-	sbc	x8, x8, xzr
-
-        // A0, A1, C6, B0 <- AH x BH
-	mul	x5, x6, x12
-	umulh	x12, x6, x12
-	adds	x4, x4, x10
-	adc	x27, x27, xzr
-
-	mul	x11, x6, x13
-	umulh	x13, x6, x13
-	adds	x4, x4, x5
-	adcs	x27, x27, x12
-	adc	x10, xzr, xzr
-
-	adds	x27, x27, x11
-	adc	x10, x10, x13
-
-
-        // C2-C5, T0 <- (AH+AL) x (BH+BL) - ALxBL - AHxBH
-	subs	x23, x23, x3
-	sbcs	x24, x24, x4
-	sbcs	x25, x25, x27
-	sbcs	x26, x26, x10
-	sbc	x8, x8, xzr
-
-	adds	x23, x23, x9
-	adcs	x24, x24, x28
-	adcs	x25, x25, x3
-	adcs	x26, x26, x4
-	adcs	x27, x8, x27
-	adc	x28, x10, xzr
-
-        // Restore x8
-	ldp	x8, x9, [x2,#0]
-
-        // x8-x10,x20,x15-x17,x19 <- maskd (AH+AL) x (BH+BL) - ALxBL
-	subs	x8, x8, x21
-	sbcs	x9, x9, x22
-	sbcs	x19, x19, x23
-	sbcs	x20, x20, x24
-	sbcs	x14, x14, x25
-	sbcs	x15, x15, x26
-	sbcs	x16, x16, x27
-	sbcs	x17, x17, x28
-	sbc	x7, x7, xzr
-
-        // Store ALxBL, low
-	stp	x21, x22, [x2]
-	stp	x23, x24, [x2,#16]
-
-        // Load AH
-	ldp	x3, x4, [x0,#32]
-	ldr	x5,     [x0,#48]
-        // Load BH
-	ldp	x10, x11, [x1,#32]
-	ldr	x12,      [x1,#48]
-
-	adds	x8,  x8, x25
-	adcs	x9,  x9, x26
-	adcs	x19, x19, x27
-	adcs	x20, x20, x28
-	adc	x1, xzr, xzr
-
-	add	x0, x0, #32
-        // Temporarily store x8,x9 in x2
-	stp	x8,x9, [x2,#32]
-        // x21-x28 <- AH x BH
-
-        // A0 * B0
-	mul	x21, x3, x10  // C0
-	umulh	x24, x3, x10
-
-        // A0 * B1
-	mul	x22, x3, x11
-	umulh	x23, x3, x11
-
-        // A1 * B0
-	mul	x8, x4, x10
-	umulh	x9, x4, x10
-	adds	x22, x22, x24
-	adc	x23, x23, xzr
-
-        // A0 * B2
-	mul	x27, x3, x12
-	umulh	x28, x3, x12
-	adds	x22, x22, x8  // C1
-	adcs	x23, x23, x9
-	adc	x24, xzr, xzr
-
-        // A2 * B0
-	mul	x8, x5, x10
-	umulh	x25, x5, x10
-	adds	x23, x23, x27
-	adcs	x24, x24, x25
-	adc	x25, xzr, xzr
-
-        // A1 * B1
-	mul	x27, x4, x11
-	umulh	x9, x4, x11
-	adds	x23, x23, x8
-	adcs	x24, x24, x28
-	adc	x25, x25, xzr
-
-        // A1 * B2
-	mul	x8, x4, x12
-	umulh	x28, x4, x12
-	adds	x23, x23, x27 // C2
-	adcs	x24, x24, x9
-	adc	x25, x25, xzr
-
-        // A2 * B1
-	mul	x27, x5, x11
-	umulh	x9, x5, x11
-	adds	x24, x24, x8
-	adcs	x25, x25, x28
-	adc	x26, xzr, xzr
-
-        // A2 * B2
-	mul	x8, x5, x12
-	umulh	x28, x5, x12
-	adds	x24, x24, x27 // C3
-	adcs	x25, x25, x9
-	adc	x26, x26, xzr
-
-	adds	x25, x25, x8 // C4
-	adc	x26, x26, x28 // C5
-
-        // Restore x8,x9
-	ldp	x8,x9, [x2,#32]
-
-	neg	x1, x1
-
-        // x8-x9,x19,x20,x14-x17 <- (AH+AL) x (BH+BL) - ALxBL - AHxBH
-	subs	x8, x8, x21
-	sbcs	x9, x9, x22
-	sbcs	x19, x19, x23
-	sbcs	x20, x20, x24
-	sbcs	x14, x14, x25
-	sbcs	x15, x15, x26
-	sbcs	x16, x16, xzr
-	sbcs	x17, x17, xzr
-	sbc	x7, x7, xzr
-
-        // Store (AH+AL) x (BH+BL) - ALxBL - AHxBH, low
-	stp	x8,  x9, [x2,#32]
-	stp	x19, x20, [x2,#48]
-
-	adds	x1,  x1, #1
-	adcs	x14, x14, x21
-	adcs	x15, x15, x22
-	adcs	x16, x16, x23
-	adcs	x17, x17, x24
-	adcs	x25,  x7, x25
-	adc	x26, x26, xzr
-
-	stp	x14, x15, [x2,#64]
-	stp	x16, x17, [x2,#80]
-	stp	x25, x26, [x2,#96]
-
-	ldp	x19, x20, [x29,#16]
-	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
-	ret
-.globl	sike_fprdc
-.hidden	sike_fprdc
-.align	4
-sike_fprdc:
-	stp	x29, x30, [sp, #-96]!
-	add	x29, sp, xzr
-	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]
-
-	ldp	x2, x3, [x0,#0]       // a[0-1]
-
-        // Load the prime constant
-	adrp	x26, .Lp434p1
-	add	x26, x26, :lo12:.Lp434p1
-	ldp	x23, x24, [x26, #0x0]
-	ldp	x25, x26, [x26,#0x10]
-
-        // a[0-1] * p434+1
-	mul	x4, x2, x23  // C0
-	umulh	x7, x2, x23
-
-	mul	x5, x2, x24
-	umulh	x6, x2, x24
-
-	mul	x10, x3, x23
-	umulh	x11, x3, x23
-	adds	x5, x5, x7
-	adc	x6, x6, xzr
-
-	mul	x27, x2, x25
-	umulh	x28, x2, x25
-	adds	x5, x5, x10  // C1
-	adcs	x6, x6, x11
-	adc	x7, xzr, xzr
-
-	mul	x10, x3, x24
-	umulh	x11, x3, x24
-	adds	x6, x6, x27
-	adcs	x7, x7, x28
-	adc	x8, xzr, xzr
-
-	mul	x27, x2, x26
-	umulh	x28, x2, x26
-	adds	x6, x6, x10  // C2
-	adcs	x7, x7, x11
-	adc	x8, x8, xzr
-
-	mul	x10, x3, x25
-	umulh	x11, x3, x25
-	adds	x7, x7, x27
-	adcs	x8, x8, x28
-	adc	x9, xzr, xzr
-
-	mul	x27, x3, x26
-	umulh	x28, x3, x26
-	adds	x7, x7, x10  // C3
-	adcs	x8, x8, x11
-	adc	x9, x9, xzr
-	adds	x8, x8, x27  // C4
-	adc	x9, x9, x28  // C5
-
-
-
-	ldp	x10, x11, [x0, #0x18]
-	ldp	x12, x13, [x0, #0x28]
-	ldp	x14, x15, [x0, #0x38]
-	ldp	x16, x17, [x0, #0x48]
-	ldp	x19, x20, [x0, #0x58]
-	ldr	x21,      [x0, #0x68]
-
-	adds	x10, x10, x4
-	adcs	x11, x11, x5
-	adcs	x12, x12, x6
-	adcs	x13, x13, x7
-	adcs	x14, x14, x8
-	adcs	x15, x15, x9
-	adcs	x22, x16, xzr
-	adcs	x17, x17, xzr
-	adcs	x19, x19, xzr
-	adcs	x20, x20, xzr
-	adc	x21, x21, xzr
-
-	ldr	x2,  [x0,#0x10]       // a[2]
-        // a[2-3] * p434+1
-	mul	x4, x2, x23  // C0
-	umulh	x7, x2, x23
-
-	mul	x5, x2, x24
-	umulh	x6, x2, x24
-
-	mul	x0, x10, x23
-	umulh	x3, x10, x23
-	adds	x5, x5, x7
-	adc	x6, x6, xzr
-
-	mul	x27, x2, x25
-	umulh	x28, x2, x25
-	adds	x5, x5, x0  // C1
-	adcs	x6, x6, x3
-	adc	x7, xzr, xzr
-
-	mul	x0, x10, x24
-	umulh	x3, x10, x24
-	adds	x6, x6, x27
-	adcs	x7, x7, x28
-	adc	x8, xzr, xzr
-
-	mul	x27, x2, x26
-	umulh	x28, x2, x26
-	adds	x6, x6, x0  // C2
-	adcs	x7, x7, x3
-	adc	x8, x8, xzr
-
-	mul	x0, x10, x25
-	umulh	x3, x10, x25
-	adds	x7, x7, x27
-	adcs	x8, x8, x28
-	adc	x9, xzr, xzr
-
-	mul	x27, x10, x26
-	umulh	x28, x10, x26
-	adds	x7, x7, x0  // C3
-	adcs	x8, x8, x3
-	adc	x9, x9, xzr
-	adds	x8, x8, x27  // C4
-	adc	x9, x9, x28  // C5
-
-
-
-	adds	x12, x12, x4
-	adcs	x13, x13, x5
-	adcs	x14, x14, x6
-	adcs	x15, x15, x7
-	adcs	x16, x22, x8
-	adcs	x17, x17, x9
-	adcs	x22, x19, xzr
-	adcs	x20, x20, xzr
-	adc	x21, x21, xzr
-
-	mul	x4, x11, x23  // C0
-	umulh	x7, x11, x23
-
-	mul	x5, x11, x24
-	umulh	x6, x11, x24
-
-	mul	x10, x12, x23
-	umulh	x3, x12, x23
-	adds	x5, x5, x7
-	adc	x6, x6, xzr
-
-	mul	x27, x11, x25
-	umulh	x28, x11, x25
-	adds	x5, x5, x10  // C1
-	adcs	x6, x6, x3
-	adc	x7, xzr, xzr
-
-	mul	x10, x12, x24
-	umulh	x3, x12, x24
-	adds	x6, x6, x27
-	adcs	x7, x7, x28
-	adc	x8, xzr, xzr
-
-	mul	x27, x11, x26
-	umulh	x28, x11, x26
-	adds	x6, x6, x10  // C2
-	adcs	x7, x7, x3
-	adc	x8, x8, xzr
-
-	mul	x10, x12, x25
-	umulh	x3, x12, x25
-	adds	x7, x7, x27
-	adcs	x8, x8, x28
-	adc	x9, xzr, xzr
-
-	mul	x27, x12, x26
-	umulh	x28, x12, x26
-	adds	x7, x7, x10  // C3
-	adcs	x8, x8, x3
-	adc	x9, x9, xzr
-	adds	x8, x8, x27  // C4
-	adc	x9, x9, x28  // C5
-
-
-	adds	x14, x14, x4
-	adcs	x15, x15, x5
-	adcs	x16, x16, x6
-	adcs	x17, x17, x7
-	adcs	x19, x22, x8
-	adcs	x20, x20, x9
-	adc	x22, x21, xzr
-
-	stp	x14, x15, [x1, #0x0]     // C0, C1
-
-	mul	x4, x13, x23    // C0
-	umulh	x10, x13, x23
-
-	mul	x5, x13, x24
-	umulh	x27, x13, x24
-	adds	x5, x5, x10    // C1
-	adc	x10, xzr, xzr
-
-	mul	x6, x13, x25
-	umulh	x28, x13, x25
-	adds	x27, x10, x27
-	adcs	x6, x6, x27    // C2
-	adc	x10, xzr, xzr
-
-	mul	x7, x13, x26
-	umulh	x8, x13, x26
-	adds	x28, x10, x28
-	adcs	x7, x7, x28    // C3
-	adc	x8, x8, xzr    // C4
-
-	adds	x16, x16, x4
-	adcs	x17, x17, x5
-	adcs	x19, x19, x6
-	adcs	x20, x20, x7
-	adc	x21, x22, x8
-
-	str	x16,       [x1, #0x10]
-	stp	x17, x19,  [x1, #0x18]
-	stp	x20, x21,  [x1, #0x28]
-
-	ldp	x19, x20, [x29,#16]
-	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
-	ret
-.globl	sike_fpadd
-.hidden	sike_fpadd
-.align	4
-sike_fpadd:
-	stp	x29,x30, [sp,#-16]!
-	add	x29, sp, #0
-
-	ldp	x3, x4,   [x0,#0]
-	ldp	x5, x6,   [x0,#16]
-	ldp	x7, x8,   [x0,#32]
-	ldr	x9,       [x0,#48]
-	ldp	x11, x12, [x1,#0]
-	ldp	x13, x14, [x1,#16]
-	ldp	x15, x16, [x1,#32]
-	ldr	x17,      [x1,#48]
-
-        // Add a + b
-	adds	x3, x3, x11
-	adcs	x4, x4, x12
-	adcs	x5, x5, x13
-	adcs	x6, x6, x14
-	adcs	x7, x7, x15
-	adcs	x8, x8, x16
-	adc	x9, x9, x17
-
-        //  Subtract 2xp434
-	adrp	x17, .Lp434x2
-	add	x17, x17, :lo12:.Lp434x2
-	ldp	x11, x12, [x17, #0]
-	ldp	x13, x14, [x17, #16]
-	ldp	x15, x16, [x17, #32]
-	subs	x3, x3, x11
-	sbcs	x4, x4, x12
-	sbcs	x5, x5, x12
-	sbcs	x6, x6, x13
-	sbcs	x7, x7, x14
-	sbcs	x8, x8, x15
-	sbcs	x9, x9, x16
-	sbc	x0, xzr, xzr    // x0 can be reused now
-
-        // Add 2xp434 anded with the mask in x0
-	and	x11, x11, x0
-	and	x12, x12, x0
-	and	x13, x13, x0
-	and	x14, x14, x0
-	and	x15, x15, x0
-	and	x16, x16, x0
-
-	adds	x3, x3, x11
-	adcs	x4, x4, x12
-	adcs	x5, x5, x12
-	adcs	x6, x6, x13
-	adcs	x7, x7, x14
-	adcs	x8, x8, x15
-	adc	x9, x9, x16
-
-	stp	x3, x4,  [x2,#0]
-	stp	x5, x6,  [x2,#16]
-	stp	x7, x8,  [x2,#32]
-	str	x9,      [x2,#48]
-
-	ldp	x29, x30, [sp],#16
-	ret
-.globl	sike_fpsub
-.hidden	sike_fpsub
-.align	4
-sike_fpsub:
-	stp	x29, x30, [sp,#-16]!
-	add	x29, sp, #0
-
-	ldp	x3, x4,   [x0,#0]
-	ldp	x5, x6,   [x0,#16]
-	ldp	x7, x8,   [x0,#32]
-	ldr	x9,       [x0,#48]
-	ldp	x11, x12, [x1,#0]
-	ldp	x13, x14, [x1,#16]
-	ldp	x15, x16, [x1,#32]
-	ldr	x17,      [x1,#48]
-
-        // Subtract a - b
-	subs	x3, x3, x11
-	sbcs	x4, x4, x12
-	sbcs	x5, x5, x13
-	sbcs	x6, x6, x14
-	sbcs	x7, x7, x15
-	sbcs	x8, x8, x16
-	sbcs	x9, x9, x17
-	sbc	x0, xzr, xzr
-
-        // Add 2xp434 anded with the mask in x0
-	adrp	x17, .Lp434x2
-	add	x17, x17, :lo12:.Lp434x2
-
-        // First half
-	ldp	x11, x12, [x17, #0]
-	ldp	x13, x14, [x17, #16]
-	ldp	x15, x16, [x17, #32]
-
-        // Add 2xp434 anded with the mask in x0
-	and	x11, x11, x0
-	and	x12, x12, x0
-	and	x13, x13, x0
-	and	x14, x14, x0
-	and	x15, x15, x0
-	and	x16, x16, x0
-
-	adds	x3, x3, x11
-	adcs	x4, x4, x12
-	adcs	x5, x5, x12
-	adcs	x6, x6, x13
-	adcs	x7, x7, x14
-	adcs	x8, x8, x15
-	adc	x9, x9, x16
-
-	stp	x3, x4,  [x2,#0]
-	stp	x5, x6,  [x2,#16]
-	stp	x7, x8,  [x2,#32]
-	str	x9,      [x2,#48]
-
-	ldp	x29, x30, [sp],#16
-	ret
-.globl	sike_mpadd_asm
-.hidden	sike_mpadd_asm
-.align	4
-sike_mpadd_asm:
-	stp	x29, x30, [sp,#-16]!
-	add	x29, sp, #0
-
-	ldp	x3, x4,   [x0,#0]
-	ldp	x5, x6,   [x0,#16]
-	ldp	x7, x8,   [x0,#32]
-	ldr	x9,       [x0,#48]
-	ldp	x11, x12, [x1,#0]
-	ldp	x13, x14, [x1,#16]
-	ldp	x15, x16, [x1,#32]
-	ldr	x17,      [x1,#48]
-
-	adds	x3, x3, x11
-	adcs	x4, x4, x12
-	adcs	x5, x5, x13
-	adcs	x6, x6, x14
-	adcs	x7, x7, x15
-	adcs	x8, x8, x16
-	adc	x9, x9, x17
-
-	stp	x3, x4,   [x2,#0]
-	stp	x5, x6,   [x2,#16]
-	stp	x7, x8,   [x2,#32]
-	str	x9,       [x2,#48]
-
-	ldp	x29, x30, [sp],#16
-	ret
-.globl	sike_mpsubx2_asm
-.hidden	sike_mpsubx2_asm
-.align	4
-sike_mpsubx2_asm:
-	stp	x29, x30, [sp,#-16]!
-	add	x29, sp, #0
-
-	ldp	x3, x4,   [x0,#0]
-	ldp	x5, x6,   [x0,#16]
-	ldp	x11, x12, [x1,#0]
-	ldp	x13, x14, [x1,#16]
-	subs	x3, x3, x11
-	sbcs	x4, x4, x12
-	sbcs	x5, x5, x13
-	sbcs	x6, x6, x14
-	ldp	x7, x8,   [x0,#32]
-	ldp	x9, x10,  [x0,#48]
-	ldp	x11, x12, [x1,#32]
-	ldp	x13, x14, [x1,#48]
-	sbcs	x7, x7, x11
-	sbcs	x8, x8, x12
-	sbcs	x9, x9, x13
-	sbcs	x10, x10, x14
-
-	stp	x3, x4,   [x2,#0]
-	stp	x5, x6,   [x2,#16]
-	stp	x7, x8,   [x2,#32]
-	stp	x9, x10,  [x2,#48]
-
-	ldp	x3, x4,   [x0,#64]
-	ldp	x5, x6,   [x0,#80]
-	ldp	x11, x12, [x1,#64]
-	ldp	x13, x14, [x1,#80]
-	sbcs	x3, x3, x11
-	sbcs	x4, x4, x12
-	sbcs	x5, x5, x13
-	sbcs	x6, x6, x14
-	ldp	x7, x8,   [x0,#96]
-	ldp	x11, x12, [x1,#96]
-	sbcs	x7, x7, x11
-	sbcs	x8, x8, x12
-	sbc	x0, xzr, xzr
-
-	stp	x3, x4,   [x2,#64]
-	stp	x5, x6,   [x2,#80]
-	stp	x7, x8,   [x2,#96]
-
-	ldp	x29, x30, [sp],#16
-	ret
-.globl	sike_mpdblsubx2_asm
-.hidden	sike_mpdblsubx2_asm
-.align	4
-sike_mpdblsubx2_asm:
-	stp	x29, x30, [sp, #-16]!
-	add	x29, sp, #0
-
-	ldp	x3, x4,   [x2, #0]
-	ldp	x5, x6,   [x2,#16]
-	ldp	x7, x8,   [x2,#32]
-
-	ldp	x11, x12, [x0, #0]
-	ldp	x13, x14, [x0,#16]
-	ldp	x15, x16, [x0,#32]
-
-	subs	x3, x3, x11
-	sbcs	x4, x4, x12
-	sbcs	x5, x5, x13
-	sbcs	x6, x6, x14
-	sbcs	x7, x7, x15
-	sbcs	x8, x8, x16
-
-        // x9 stores carry
-	adc	x9, xzr, xzr
-
-	ldp	x11, x12, [x1, #0]
-	ldp	x13, x14, [x1,#16]
-	ldp	x15, x16, [x1,#32]
-	subs	x3, x3, x11
-	sbcs	x4, x4, x12
-	sbcs	x5, x5, x13
-	sbcs	x6, x6, x14
-	sbcs	x7, x7, x15
-	sbcs	x8, x8, x16
-	adc	x9, x9, xzr
-
-	stp	x3, x4,   [x2, #0]
-	stp	x5, x6,   [x2,#16]
-	stp	x7, x8,   [x2,#32]
-
-	ldp	x3, x4,   [x2,#48]
-	ldp	x5, x6,   [x2,#64]
-	ldp	x7, x8,   [x2,#80]
-
-	ldp	x11, x12, [x0,#48]
-	ldp	x13, x14, [x0,#64]
-	ldp	x15, x16, [x0,#80]
-
-        // x9 = 2 - x9
-	neg	x9, x9
-	add	x9, x9, #2
-
-	subs	x3, x3, x9
-	sbcs	x3, x3, x11
-	sbcs	x4, x4, x12
-	sbcs	x5, x5, x13
-	sbcs	x6, x6, x14
-	sbcs	x7, x7, x15
-	sbcs	x8, x8, x16
-	adc	x9, xzr, xzr
-
-	ldp	x11, x12, [x1,#48]
-	ldp	x13, x14, [x1,#64]
-	ldp	x15, x16, [x1,#80]
-	subs	x3, x3, x11
-	sbcs	x4, x4, x12
-	sbcs	x5, x5, x13
-	sbcs	x6, x6, x14
-	sbcs	x7, x7, x15
-	sbcs	x8, x8, x16
-	adc	x9, x9, xzr
-
-	stp	x3, x4,   [x2,#48]
-	stp	x5, x6,   [x2,#64]
-	stp	x7, x8,   [x2,#80]
-
-	ldp	x3,  x4, [x2,#96]
-	ldp	x11, x12, [x0,#96]
-	ldp	x13, x14, [x1,#96]
-
-        // x9 = 2 - x9
-	neg	x9, x9
-	add	x9, x9, #2
-
-	subs	x3, x3, x9
-	sbcs	x3, x3, x11
-	sbcs	x4, x4, x12
-	subs	x3, x3, x13
-	sbc	x4, x4, x14
-	stp	x3, x4,   [x2,#96]
-
-	ldp	x29, x30, [sp],#16
-	ret
-#endif
-#endif  // !OPENSSL_NO_ASM
diff --git a/linux-ppc64le/crypto/fipsmodule/aesp8-ppc.S b/linux-ppc64le/crypto/fipsmodule/aesp8-ppc.S
index 911d638..42b69c1 100644
--- a/linux-ppc64le/crypto/fipsmodule/aesp8-ppc.S
+++ b/linux-ppc64le/crypto/fipsmodule/aesp8-ppc.S
@@ -1778,7 +1778,7 @@
 	.long	0x7E082799
 	.long	0x7E3A2799
 	addi	4,4,0x30
-	b	.Lctr32_enc8x_done
+	b	.Lcbc_dec8x_done
 
 .align	5
 .Lctr32_enc8x_two:
@@ -1790,7 +1790,7 @@
 	.long	0x7DE02799
 	.long	0x7E082799
 	addi	4,4,0x20
-	b	.Lctr32_enc8x_done
+	b	.Lcbc_dec8x_done
 
 .align	5
 .Lctr32_enc8x_one:
diff --git a/linux-x86_64/crypto/fipsmodule/p256-x86_64-asm.S b/linux-x86_64/crypto/fipsmodule/p256-x86_64-asm.S
index 067575e..3a57522 100644
--- a/linux-x86_64/crypto/fipsmodule/p256-x86_64-asm.S
+++ b/linux-x86_64/crypto/fipsmodule/p256-x86_64-asm.S
@@ -2823,22 +2823,15 @@
 	orq	%r8,%r12
 	orq	%r9,%r12
 
-.byte	102,73,15,126,208
-.byte	102,73,15,126,217
-	orq	%r8,%r12
 .byte	0x3e
 	jnz	.Ladd_proceedq
-
-
-
+.byte	102,73,15,126,208
+.byte	102,73,15,126,217
+	testq	%r8,%r8
+	jnz	.Ladd_proceedq
 	testq	%r9,%r9
 	jz	.Ladd_doubleq
 
-
-
-
-
-
 .byte	102,72,15,126,199
 	pxor	%xmm0,%xmm0
 	movdqu	%xmm0,0(%rdi)
@@ -3951,22 +3944,15 @@
 	orq	%r8,%r12
 	orq	%r9,%r12
 
-.byte	102,73,15,126,208
-.byte	102,73,15,126,217
-	orq	%r8,%r12
 .byte	0x3e
 	jnz	.Ladd_proceedx
-
-
-
+.byte	102,73,15,126,208
+.byte	102,73,15,126,217
+	testq	%r8,%r8
+	jnz	.Ladd_proceedx
 	testq	%r9,%r9
 	jz	.Ladd_doublex
 
-
-
-
-
-
 .byte	102,72,15,126,199
 	pxor	%xmm0,%xmm0
 	movdqu	%xmm0,0(%rdi)
diff --git a/linux-x86_64/crypto/third_party/sike/asm/fp-x86_64.S b/linux-x86_64/crypto/third_party/sike/asm/fp-x86_64.S
deleted file mode 100644
index 4b3c925..0000000
--- a/linux-x86_64/crypto/third_party/sike/asm/fp-x86_64.S
+++ /dev/null
@@ -1,1870 +0,0 @@
-# This file is generated from a similarly-named Perl script in the BoringSSL
-# source tree. Do not edit by hand.
-
-#if defined(__has_feature)
-#if __has_feature(memory_sanitizer) && !defined(OPENSSL_NO_ASM)
-#define OPENSSL_NO_ASM
-#endif
-#endif
-
-#if defined(__x86_64__) && !defined(OPENSSL_NO_ASM)
-#if defined(BORINGSSL_PREFIX)
-#include <boringssl_prefix_symbols_asm.h>
-#endif
-.text	
-
-
-.Lp434x2:
-.quad	0xFFFFFFFFFFFFFFFE
-.quad	0xFFFFFFFFFFFFFFFF
-.quad	0xFB82ECF5C5FFFFFF
-.quad	0xF78CB8F062B15D47
-.quad	0xD9F8BFAD038A40AC
-.quad	0x0004683E4E2EE688
-
-
-.Lp434p1:
-.quad	0xFDC1767AE3000000
-.quad	0x7BC65C783158AEA3
-.quad	0x6CFC5FD681C52056
-.quad	0x0002341F27177344
-
-.extern	OPENSSL_ia32cap_P
-.hidden OPENSSL_ia32cap_P
-.hidden	OPENSSL_ia32cap_P
-.globl	sike_fpadd
-.hidden sike_fpadd
-.type	sike_fpadd,@function
-sike_fpadd:
-.cfi_startproc	
-	pushq	%r12
-.cfi_adjust_cfa_offset	8
-.cfi_offset	r12, -16
-	pushq	%r13
-.cfi_adjust_cfa_offset	8
-.cfi_offset	r13, -24
-	pushq	%r14
-.cfi_adjust_cfa_offset	8
-.cfi_offset	r14, -32
-
-	xorq	%rax,%rax
-
-	movq	0(%rdi),%r8
-	addq	0(%rsi),%r8
-	movq	8(%rdi),%r9
-	adcq	8(%rsi),%r9
-	movq	16(%rdi),%r10
-	adcq	16(%rsi),%r10
-	movq	24(%rdi),%r11
-	adcq	24(%rsi),%r11
-	movq	32(%rdi),%r12
-	adcq	32(%rsi),%r12
-	movq	40(%rdi),%r13
-	adcq	40(%rsi),%r13
-	movq	48(%rdi),%r14
-	adcq	48(%rsi),%r14
-
-	movq	.Lp434x2(%rip),%rcx
-	subq	%rcx,%r8
-	movq	8+.Lp434x2(%rip),%rcx
-	sbbq	%rcx,%r9
-	sbbq	%rcx,%r10
-	movq	16+.Lp434x2(%rip),%rcx
-	sbbq	%rcx,%r11
-	movq	24+.Lp434x2(%rip),%rcx
-	sbbq	%rcx,%r12
-	movq	32+.Lp434x2(%rip),%rcx
-	sbbq	%rcx,%r13
-	movq	40+.Lp434x2(%rip),%rcx
-	sbbq	%rcx,%r14
-
-	sbbq	$0,%rax
-
-	movq	.Lp434x2(%rip),%rdi
-	andq	%rax,%rdi
-	movq	8+.Lp434x2(%rip),%rsi
-	andq	%rax,%rsi
-	movq	16+.Lp434x2(%rip),%rcx
-	andq	%rax,%rcx
-
-	addq	%rdi,%r8
-	movq	%r8,0(%rdx)
-	adcq	%rsi,%r9
-	movq	%r9,8(%rdx)
-	adcq	%rsi,%r10
-	movq	%r10,16(%rdx)
-	adcq	%rcx,%r11
-	movq	%r11,24(%rdx)
-
-	setc	%cl
-	movq	24+.Lp434x2(%rip),%r8
-	andq	%rax,%r8
-	movq	32+.Lp434x2(%rip),%r9
-	andq	%rax,%r9
-	movq	40+.Lp434x2(%rip),%r10
-	andq	%rax,%r10
-	btq	$0,%rcx
-
-	adcq	%r8,%r12
-	movq	%r12,32(%rdx)
-	adcq	%r9,%r13
-	movq	%r13,40(%rdx)
-	adcq	%r10,%r14
-	movq	%r14,48(%rdx)
-
-	popq	%r14
-.cfi_adjust_cfa_offset	-8
-	popq	%r13
-.cfi_adjust_cfa_offset	-8
-	popq	%r12
-.cfi_adjust_cfa_offset	-8
-	.byte	0xf3,0xc3
-.cfi_endproc	
-.globl	sike_cswap_asm
-.hidden sike_cswap_asm
-.type	sike_cswap_asm,@function
-sike_cswap_asm:
-
-
-	movq	%rdx,%xmm3
-
-
-
-
-
-	pshufd	$68,%xmm3,%xmm3
-
-	movdqu	0(%rdi),%xmm0
-	movdqu	0(%rsi),%xmm1
-	movdqa	%xmm1,%xmm2
-	pxor	%xmm0,%xmm2
-	pand	%xmm3,%xmm2
-	pxor	%xmm2,%xmm0
-	pxor	%xmm2,%xmm1
-	movdqu	%xmm0,0(%rdi)
-	movdqu	%xmm1,0(%rsi)
-
-	movdqu	16(%rdi),%xmm0
-	movdqu	16(%rsi),%xmm1
-	movdqa	%xmm1,%xmm2
-	pxor	%xmm0,%xmm2
-	pand	%xmm3,%xmm2
-	pxor	%xmm2,%xmm0
-	pxor	%xmm2,%xmm1
-	movdqu	%xmm0,16(%rdi)
-	movdqu	%xmm1,16(%rsi)
-
-	movdqu	32(%rdi),%xmm0
-	movdqu	32(%rsi),%xmm1
-	movdqa	%xmm1,%xmm2
-	pxor	%xmm0,%xmm2
-	pand	%xmm3,%xmm2
-	pxor	%xmm2,%xmm0
-	pxor	%xmm2,%xmm1
-	movdqu	%xmm0,32(%rdi)
-	movdqu	%xmm1,32(%rsi)
-
-	movdqu	48(%rdi),%xmm0
-	movdqu	48(%rsi),%xmm1
-	movdqa	%xmm1,%xmm2
-	pxor	%xmm0,%xmm2
-	pand	%xmm3,%xmm2
-	pxor	%xmm2,%xmm0
-	pxor	%xmm2,%xmm1
-	movdqu	%xmm0,48(%rdi)
-	movdqu	%xmm1,48(%rsi)
-
-	movdqu	64(%rdi),%xmm0
-	movdqu	64(%rsi),%xmm1
-	movdqa	%xmm1,%xmm2
-	pxor	%xmm0,%xmm2
-	pand	%xmm3,%xmm2
-	pxor	%xmm2,%xmm0
-	pxor	%xmm2,%xmm1
-	movdqu	%xmm0,64(%rdi)
-	movdqu	%xmm1,64(%rsi)
-
-	movdqu	80(%rdi),%xmm0
-	movdqu	80(%rsi),%xmm1
-	movdqa	%xmm1,%xmm2
-	pxor	%xmm0,%xmm2
-	pand	%xmm3,%xmm2
-	pxor	%xmm2,%xmm0
-	pxor	%xmm2,%xmm1
-	movdqu	%xmm0,80(%rdi)
-	movdqu	%xmm1,80(%rsi)
-
-	movdqu	96(%rdi),%xmm0
-	movdqu	96(%rsi),%xmm1
-	movdqa	%xmm1,%xmm2
-	pxor	%xmm0,%xmm2
-	pand	%xmm3,%xmm2
-	pxor	%xmm2,%xmm0
-	pxor	%xmm2,%xmm1
-	movdqu	%xmm0,96(%rdi)
-	movdqu	%xmm1,96(%rsi)
-
-	movdqu	112(%rdi),%xmm0
-	movdqu	112(%rsi),%xmm1
-	movdqa	%xmm1,%xmm2
-	pxor	%xmm0,%xmm2
-	pand	%xmm3,%xmm2
-	pxor	%xmm2,%xmm0
-	pxor	%xmm2,%xmm1
-	movdqu	%xmm0,112(%rdi)
-	movdqu	%xmm1,112(%rsi)
-
-	movdqu	128(%rdi),%xmm0
-	movdqu	128(%rsi),%xmm1
-	movdqa	%xmm1,%xmm2
-	pxor	%xmm0,%xmm2
-	pand	%xmm3,%xmm2
-	pxor	%xmm2,%xmm0
-	pxor	%xmm2,%xmm1
-	movdqu	%xmm0,128(%rdi)
-	movdqu	%xmm1,128(%rsi)
-
-	movdqu	144(%rdi),%xmm0
-	movdqu	144(%rsi),%xmm1
-	movdqa	%xmm1,%xmm2
-	pxor	%xmm0,%xmm2
-	pand	%xmm3,%xmm2
-	pxor	%xmm2,%xmm0
-	pxor	%xmm2,%xmm1
-	movdqu	%xmm0,144(%rdi)
-	movdqu	%xmm1,144(%rsi)
-
-	movdqu	160(%rdi),%xmm0
-	movdqu	160(%rsi),%xmm1
-	movdqa	%xmm1,%xmm2
-	pxor	%xmm0,%xmm2
-	pand	%xmm3,%xmm2
-	pxor	%xmm2,%xmm0
-	pxor	%xmm2,%xmm1
-	movdqu	%xmm0,160(%rdi)
-	movdqu	%xmm1,160(%rsi)
-
-	movdqu	176(%rdi),%xmm0
-	movdqu	176(%rsi),%xmm1
-	movdqa	%xmm1,%xmm2
-	pxor	%xmm0,%xmm2
-	pand	%xmm3,%xmm2
-	pxor	%xmm2,%xmm0
-	pxor	%xmm2,%xmm1
-	movdqu	%xmm0,176(%rdi)
-	movdqu	%xmm1,176(%rsi)
-
-	movdqu	192(%rdi),%xmm0
-	movdqu	192(%rsi),%xmm1
-	movdqa	%xmm1,%xmm2
-	pxor	%xmm0,%xmm2
-	pand	%xmm3,%xmm2
-	pxor	%xmm2,%xmm0
-	pxor	%xmm2,%xmm1
-	movdqu	%xmm0,192(%rdi)
-	movdqu	%xmm1,192(%rsi)
-
-	movdqu	208(%rdi),%xmm0
-	movdqu	208(%rsi),%xmm1
-	movdqa	%xmm1,%xmm2
-	pxor	%xmm0,%xmm2
-	pand	%xmm3,%xmm2
-	pxor	%xmm2,%xmm0
-	pxor	%xmm2,%xmm1
-	movdqu	%xmm0,208(%rdi)
-	movdqu	%xmm1,208(%rsi)
-
-	.byte	0xf3,0xc3
-.globl	sike_fpsub
-.hidden sike_fpsub
-.type	sike_fpsub,@function
-sike_fpsub:
-.cfi_startproc	
-	pushq	%r12
-.cfi_adjust_cfa_offset	8
-.cfi_offset	r12, -16
-	pushq	%r13
-.cfi_adjust_cfa_offset	8
-.cfi_offset	r13, -24
-	pushq	%r14
-.cfi_adjust_cfa_offset	8
-.cfi_offset	r14, -32
-
-	xorq	%rax,%rax
-
-	movq	0(%rdi),%r8
-	subq	0(%rsi),%r8
-	movq	8(%rdi),%r9
-	sbbq	8(%rsi),%r9
-	movq	16(%rdi),%r10
-	sbbq	16(%rsi),%r10
-	movq	24(%rdi),%r11
-	sbbq	24(%rsi),%r11
-	movq	32(%rdi),%r12
-	sbbq	32(%rsi),%r12
-	movq	40(%rdi),%r13
-	sbbq	40(%rsi),%r13
-	movq	48(%rdi),%r14
-	sbbq	48(%rsi),%r14
-
-	sbbq	$0x0,%rax
-
-	movq	.Lp434x2(%rip),%rdi
-	andq	%rax,%rdi
-	movq	8+.Lp434x2(%rip),%rsi
-	andq	%rax,%rsi
-	movq	16+.Lp434x2(%rip),%rcx
-	andq	%rax,%rcx
-
-	addq	%rdi,%r8
-	movq	%r8,0(%rdx)
-	adcq	%rsi,%r9
-	movq	%r9,8(%rdx)
-	adcq	%rsi,%r10
-	movq	%r10,16(%rdx)
-	adcq	%rcx,%r11
-	movq	%r11,24(%rdx)
-
-	setc	%cl
-	movq	24+.Lp434x2(%rip),%r8
-	andq	%rax,%r8
-	movq	32+.Lp434x2(%rip),%r9
-	andq	%rax,%r9
-	movq	40+.Lp434x2(%rip),%r10
-	andq	%rax,%r10
-	btq	$0x0,%rcx
-
-	adcq	%r8,%r12
-	adcq	%r9,%r13
-	adcq	%r10,%r14
-	movq	%r12,32(%rdx)
-	movq	%r13,40(%rdx)
-	movq	%r14,48(%rdx)
-
-	popq	%r14
-.cfi_adjust_cfa_offset	-8
-	popq	%r13
-.cfi_adjust_cfa_offset	-8
-	popq	%r12
-.cfi_adjust_cfa_offset	-8
-	.byte	0xf3,0xc3
-.cfi_endproc	
-.globl	sike_mpadd_asm
-.hidden sike_mpadd_asm
-.type	sike_mpadd_asm,@function
-sike_mpadd_asm:
-.cfi_startproc	
-	movq	0(%rdi),%r8;
-	movq	8(%rdi),%r9
-	movq	16(%rdi),%r10
-	movq	24(%rdi),%r11
-	movq	32(%rdi),%rcx
-	addq	0(%rsi),%r8
-	adcq	8(%rsi),%r9
-	adcq	16(%rsi),%r10
-	adcq	24(%rsi),%r11
-	adcq	32(%rsi),%rcx
-	movq	%r8,0(%rdx)
-	movq	%r9,8(%rdx)
-	movq	%r10,16(%rdx)
-	movq	%r11,24(%rdx)
-	movq	%rcx,32(%rdx)
-
-	movq	40(%rdi),%r8
-	movq	48(%rdi),%r9
-	adcq	40(%rsi),%r8
-	adcq	48(%rsi),%r9
-	movq	%r8,40(%rdx)
-	movq	%r9,48(%rdx)
-	.byte	0xf3,0xc3
-.cfi_endproc	
-.globl	sike_mpsubx2_asm
-.hidden sike_mpsubx2_asm
-.type	sike_mpsubx2_asm,@function
-sike_mpsubx2_asm:
-.cfi_startproc	
-	xorq	%rax,%rax
-
-	movq	0(%rdi),%r8
-	movq	8(%rdi),%r9
-	movq	16(%rdi),%r10
-	movq	24(%rdi),%r11
-	movq	32(%rdi),%rcx
-	subq	0(%rsi),%r8
-	sbbq	8(%rsi),%r9
-	sbbq	16(%rsi),%r10
-	sbbq	24(%rsi),%r11
-	sbbq	32(%rsi),%rcx
-	movq	%r8,0(%rdx)
-	movq	%r9,8(%rdx)
-	movq	%r10,16(%rdx)
-	movq	%r11,24(%rdx)
-	movq	%rcx,32(%rdx)
-
-	movq	40(%rdi),%r8
-	movq	48(%rdi),%r9
-	movq	56(%rdi),%r10
-	movq	64(%rdi),%r11
-	movq	72(%rdi),%rcx
-	sbbq	40(%rsi),%r8
-	sbbq	48(%rsi),%r9
-	sbbq	56(%rsi),%r10
-	sbbq	64(%rsi),%r11
-	sbbq	72(%rsi),%rcx
-	movq	%r8,40(%rdx)
-	movq	%r9,48(%rdx)
-	movq	%r10,56(%rdx)
-	movq	%r11,64(%rdx)
-	movq	%rcx,72(%rdx)
-
-	movq	80(%rdi),%r8
-	movq	88(%rdi),%r9
-	movq	96(%rdi),%r10
-	movq	104(%rdi),%r11
-	sbbq	80(%rsi),%r8
-	sbbq	88(%rsi),%r9
-	sbbq	96(%rsi),%r10
-	sbbq	104(%rsi),%r11
-	sbbq	$0x0,%rax
-	movq	%r8,80(%rdx)
-	movq	%r9,88(%rdx)
-	movq	%r10,96(%rdx)
-	movq	%r11,104(%rdx)
-	.byte	0xf3,0xc3
-.cfi_endproc	
-.globl	sike_mpdblsubx2_asm
-.hidden sike_mpdblsubx2_asm
-.type	sike_mpdblsubx2_asm,@function
-sike_mpdblsubx2_asm:
-.cfi_startproc	
-	pushq	%r12
-.cfi_adjust_cfa_offset	8
-.cfi_offset	r12, -16
-	pushq	%r13
-.cfi_adjust_cfa_offset	8
-.cfi_offset	r13, -24
-
-	xorq	%rax,%rax
-
-
-	movq	0(%rdx),%r8
-	movq	8(%rdx),%r9
-	movq	16(%rdx),%r10
-	movq	24(%rdx),%r11
-	movq	32(%rdx),%r12
-	movq	40(%rdx),%r13
-	movq	48(%rdx),%rcx
-	subq	0(%rdi),%r8
-	sbbq	8(%rdi),%r9
-	sbbq	16(%rdi),%r10
-	sbbq	24(%rdi),%r11
-	sbbq	32(%rdi),%r12
-	sbbq	40(%rdi),%r13
-	sbbq	48(%rdi),%rcx
-	adcq	$0x0,%rax
-
-
-	subq	0(%rsi),%r8
-	sbbq	8(%rsi),%r9
-	sbbq	16(%rsi),%r10
-	sbbq	24(%rsi),%r11
-	sbbq	32(%rsi),%r12
-	sbbq	40(%rsi),%r13
-	sbbq	48(%rsi),%rcx
-	adcq	$0x0,%rax
-
-
-	movq	%r8,0(%rdx)
-	movq	%r9,8(%rdx)
-	movq	%r10,16(%rdx)
-	movq	%r11,24(%rdx)
-	movq	%r12,32(%rdx)
-	movq	%r13,40(%rdx)
-	movq	%rcx,48(%rdx)
-
-
-	movq	56(%rdx),%r8
-	movq	64(%rdx),%r9
-	movq	72(%rdx),%r10
-	movq	80(%rdx),%r11
-	movq	88(%rdx),%r12
-	movq	96(%rdx),%r13
-	movq	104(%rdx),%rcx
-
-	subq	%rax,%r8
-	sbbq	56(%rdi),%r8
-	sbbq	64(%rdi),%r9
-	sbbq	72(%rdi),%r10
-	sbbq	80(%rdi),%r11
-	sbbq	88(%rdi),%r12
-	sbbq	96(%rdi),%r13
-	sbbq	104(%rdi),%rcx
-
-
-	subq	56(%rsi),%r8
-	sbbq	64(%rsi),%r9
-	sbbq	72(%rsi),%r10
-	sbbq	80(%rsi),%r11
-	sbbq	88(%rsi),%r12
-	sbbq	96(%rsi),%r13
-	sbbq	104(%rsi),%rcx
-
-
-	movq	%r8,56(%rdx)
-	movq	%r9,64(%rdx)
-	movq	%r10,72(%rdx)
-	movq	%r11,80(%rdx)
-	movq	%r12,88(%rdx)
-	movq	%r13,96(%rdx)
-	movq	%rcx,104(%rdx)
-
-	popq	%r13
-.cfi_adjust_cfa_offset	-8
-	popq	%r12
-.cfi_adjust_cfa_offset	-8
-	.byte	0xf3,0xc3
-.cfi_endproc	
-
-.Lrdc_bdw:
-.cfi_startproc	
-
-.cfi_adjust_cfa_offset	32
-.cfi_offset	r12, -16
-.cfi_offset	r13, -24
-.cfi_offset	r14, -32
-.cfi_offset	r15, -40
-
-	xorq	%rax,%rax
-	movq	0+0(%rdi),%rdx
-	mulxq	0+.Lp434p1(%rip),%r8,%r9
-	mulxq	8+.Lp434p1(%rip),%r12,%r10
-	mulxq	16+.Lp434p1(%rip),%r13,%r11
-
-	adoxq	%r12,%r9
-	adoxq	%r13,%r10
-
-	mulxq	24+.Lp434p1(%rip),%r13,%r12
-	adoxq	%r13,%r11
-	adoxq	%rax,%r12
-
-	xorq	%rax,%rax
-	movq	0+8(%rdi),%rdx
-	mulxq	0+.Lp434p1(%rip),%r13,%rcx
-	adcxq	%r13,%r9
-	adcxq	%rcx,%r10
-
-	mulxq	8+.Lp434p1(%rip),%rcx,%r13
-	adcxq	%r13,%r11
-	adoxq	%rcx,%r10
-
-	mulxq	16+.Lp434p1(%rip),%rcx,%r13
-	adcxq	%r13,%r12
-	adoxq	%rcx,%r11
-
-	mulxq	24+.Lp434p1(%rip),%rcx,%r13
-	adcxq	%rax,%r13
-	adoxq	%rcx,%r12
-	adoxq	%rax,%r13
-
-	xorq	%rcx,%rcx
-	addq	24(%rdi),%r8
-	adcq	32(%rdi),%r9
-	adcq	40(%rdi),%r10
-	adcq	48(%rdi),%r11
-	adcq	56(%rdi),%r12
-	adcq	64(%rdi),%r13
-	adcq	72(%rdi),%rcx
-	movq	%r8,24(%rdi)
-	movq	%r9,32(%rdi)
-	movq	%r10,40(%rdi)
-	movq	%r11,48(%rdi)
-	movq	%r12,56(%rdi)
-	movq	%r13,64(%rdi)
-	movq	%rcx,72(%rdi)
-	movq	80(%rdi),%r8
-	movq	88(%rdi),%r9
-	movq	96(%rdi),%r10
-	movq	104(%rdi),%r11
-	adcq	$0x0,%r8
-	adcq	$0x0,%r9
-	adcq	$0x0,%r10
-	adcq	$0x0,%r11
-	movq	%r8,80(%rdi)
-	movq	%r9,88(%rdi)
-	movq	%r10,96(%rdi)
-	movq	%r11,104(%rdi)
-
-	xorq	%rax,%rax
-	movq	16+0(%rdi),%rdx
-	mulxq	0+.Lp434p1(%rip),%r8,%r9
-	mulxq	8+.Lp434p1(%rip),%r12,%r10
-	mulxq	16+.Lp434p1(%rip),%r13,%r11
-
-	adoxq	%r12,%r9
-	adoxq	%r13,%r10
-
-	mulxq	24+.Lp434p1(%rip),%r13,%r12
-	adoxq	%r13,%r11
-	adoxq	%rax,%r12
-
-	xorq	%rax,%rax
-	movq	16+8(%rdi),%rdx
-	mulxq	0+.Lp434p1(%rip),%r13,%rcx
-	adcxq	%r13,%r9
-	adcxq	%rcx,%r10
-
-	mulxq	8+.Lp434p1(%rip),%rcx,%r13
-	adcxq	%r13,%r11
-	adoxq	%rcx,%r10
-
-	mulxq	16+.Lp434p1(%rip),%rcx,%r13
-	adcxq	%r13,%r12
-	adoxq	%rcx,%r11
-
-	mulxq	24+.Lp434p1(%rip),%rcx,%r13
-	adcxq	%rax,%r13
-	adoxq	%rcx,%r12
-	adoxq	%rax,%r13
-
-	xorq	%rcx,%rcx
-	addq	40(%rdi),%r8
-	adcq	48(%rdi),%r9
-	adcq	56(%rdi),%r10
-	adcq	64(%rdi),%r11
-	adcq	72(%rdi),%r12
-	adcq	80(%rdi),%r13
-	adcq	88(%rdi),%rcx
-	movq	%r8,40(%rdi)
-	movq	%r9,48(%rdi)
-	movq	%r10,56(%rdi)
-	movq	%r11,64(%rdi)
-	movq	%r12,72(%rdi)
-	movq	%r13,80(%rdi)
-	movq	%rcx,88(%rdi)
-	movq	96(%rdi),%r8
-	movq	104(%rdi),%r9
-	adcq	$0x0,%r8
-	adcq	$0x0,%r9
-	movq	%r8,96(%rdi)
-	movq	%r9,104(%rdi)
-
-	xorq	%rax,%rax
-	movq	32+0(%rdi),%rdx
-	mulxq	0+.Lp434p1(%rip),%r8,%r9
-	mulxq	8+.Lp434p1(%rip),%r12,%r10
-	mulxq	16+.Lp434p1(%rip),%r13,%r11
-
-	adoxq	%r12,%r9
-	adoxq	%r13,%r10
-
-	mulxq	24+.Lp434p1(%rip),%r13,%r12
-	adoxq	%r13,%r11
-	adoxq	%rax,%r12
-
-	xorq	%rax,%rax
-	movq	32+8(%rdi),%rdx
-	mulxq	0+.Lp434p1(%rip),%r13,%rcx
-	adcxq	%r13,%r9
-	adcxq	%rcx,%r10
-
-	mulxq	8+.Lp434p1(%rip),%rcx,%r13
-	adcxq	%r13,%r11
-	adoxq	%rcx,%r10
-
-	mulxq	16+.Lp434p1(%rip),%rcx,%r13
-	adcxq	%r13,%r12
-	adoxq	%rcx,%r11
-
-	mulxq	24+.Lp434p1(%rip),%rcx,%r13
-	adcxq	%rax,%r13
-	adoxq	%rcx,%r12
-	adoxq	%rax,%r13
-
-	xorq	%rcx,%rcx
-	addq	56(%rdi),%r8
-	adcq	64(%rdi),%r9
-	adcq	72(%rdi),%r10
-	adcq	80(%rdi),%r11
-	adcq	88(%rdi),%r12
-	adcq	96(%rdi),%r13
-	adcq	104(%rdi),%rcx
-	movq	%r8,0(%rsi)
-	movq	%r9,8(%rsi)
-	movq	%r10,72(%rdi)
-	movq	%r11,80(%rdi)
-	movq	%r12,88(%rdi)
-	movq	%r13,96(%rdi)
-	movq	%rcx,104(%rdi)
-
-	xorq	%rax,%rax
-	movq	48(%rdi),%rdx
-	mulxq	0+.Lp434p1(%rip),%r8,%r9
-	mulxq	8+.Lp434p1(%rip),%r12,%r10
-	mulxq	16+.Lp434p1(%rip),%r13,%r11
-
-	adoxq	%r12,%r9
-	adoxq	%r13,%r10
-
-	mulxq	24+.Lp434p1(%rip),%r13,%r12
-	adoxq	%r13,%r11
-	adoxq	%rax,%r12
-
-	addq	72(%rdi),%r8
-	adcq	80(%rdi),%r9
-	adcq	88(%rdi),%r10
-	adcq	96(%rdi),%r11
-	adcq	104(%rdi),%r12
-	movq	%r8,16(%rsi)
-	movq	%r9,24(%rsi)
-	movq	%r10,32(%rsi)
-	movq	%r11,40(%rsi)
-	movq	%r12,48(%rsi)
-
-
-	popq	%r15
-.cfi_adjust_cfa_offset	-8
-.cfi_same_value	r15
-	popq	%r14
-.cfi_adjust_cfa_offset	-8
-.cfi_same_value	r14
-	popq	%r13
-.cfi_adjust_cfa_offset	-8
-.cfi_same_value	r13
-	popq	%r12
-.cfi_adjust_cfa_offset	-8
-.cfi_same_value	r12
-	.byte	0xf3,0xc3
-.cfi_endproc	
-.globl	sike_fprdc
-.hidden sike_fprdc
-.type	sike_fprdc,@function
-sike_fprdc:
-.cfi_startproc	
-	pushq	%r12
-.cfi_adjust_cfa_offset	8
-.cfi_offset	r12, -16
-	pushq	%r13
-.cfi_adjust_cfa_offset	8
-.cfi_offset	r13, -24
-	pushq	%r14
-.cfi_adjust_cfa_offset	8
-.cfi_offset	r14, -32
-	pushq	%r15
-.cfi_adjust_cfa_offset	8
-.cfi_offset	r15, -40
-
-
-
-	leaq	OPENSSL_ia32cap_P(%rip),%rcx
-	movq	8(%rcx),%rcx
-	andl	$0x80100,%ecx
-	cmpl	$0x80100,%ecx
-	je	.Lrdc_bdw
-
-
-
-
-	movq	0+0(%rdi),%r14
-	movq	0+.Lp434p1(%rip),%rax
-	mulq	%r14
-	xorq	%r10,%r10
-	movq	%rax,%r8
-	movq	%rdx,%r9
-
-
-	movq	8+.Lp434p1(%rip),%rax
-	mulq	%r14
-	xorq	%r11,%r11
-	addq	%rax,%r9
-	adcq	%rdx,%r10
-
-
-	movq	0+8(%rdi),%rcx
-	movq	0+.Lp434p1(%rip),%rax
-	mulq	%rcx
-	addq	%rax,%r9
-	adcq	%rdx,%r10
-	adcq	$0x0,%r11
-
-
-	xorq	%r12,%r12
-	movq	16+.Lp434p1(%rip),%rax
-	mulq	%r14
-	addq	%rax,%r10
-	adcq	%rdx,%r11
-	adcq	$0x0,%r12
-
-
-	movq	8+.Lp434p1(%rip),%rax
-	mulq	%rcx
-	addq	%rax,%r10
-	adcq	%rdx,%r11
-	adcq	$0x0,%r12
-
-
-	movq	24+.Lp434p1(%rip),%rax
-	mulq	%r14
-	xorq	%r13,%r13
-	addq	%rax,%r11
-	adcq	%rdx,%r12
-	adcq	$0x0,%r13
-
-
-	movq	16+.Lp434p1(%rip),%rax
-	mulq	%rcx
-	addq	%rax,%r11
-	adcq	%rdx,%r12
-	adcq	$0x0,%r13
-
-
-	movq	24+.Lp434p1(%rip),%rax
-	mulq	%rcx
-	addq	%rax,%r12
-	adcq	%rdx,%r13
-
-
-	xorq	%rcx,%rcx
-	addq	24(%rdi),%r8
-	adcq	32(%rdi),%r9
-	adcq	40(%rdi),%r10
-	adcq	48(%rdi),%r11
-	adcq	56(%rdi),%r12
-	adcq	64(%rdi),%r13
-	adcq	72(%rdi),%rcx
-	movq	%r8,24(%rdi)
-	movq	%r9,32(%rdi)
-	movq	%r10,40(%rdi)
-	movq	%r11,48(%rdi)
-	movq	%r12,56(%rdi)
-	movq	%r13,64(%rdi)
-	movq	%rcx,72(%rdi)
-	movq	80(%rdi),%r8
-	movq	88(%rdi),%r9
-	movq	96(%rdi),%r10
-	movq	104(%rdi),%r11
-	adcq	$0x0,%r8
-	adcq	$0x0,%r9
-	adcq	$0x0,%r10
-	adcq	$0x0,%r11
-	movq	%r8,80(%rdi)
-	movq	%r9,88(%rdi)
-	movq	%r10,96(%rdi)
-	movq	%r11,104(%rdi)
-
-
-	movq	16+0(%rdi),%r14
-	movq	0+.Lp434p1(%rip),%rax
-	mulq	%r14
-	xorq	%r10,%r10
-	movq	%rax,%r8
-	movq	%rdx,%r9
-
-
-	movq	8+.Lp434p1(%rip),%rax
-	mulq	%r14
-	xorq	%r11,%r11
-	addq	%rax,%r9
-	adcq	%rdx,%r10
-
-
-	movq	16+8(%rdi),%rcx
-	movq	0+.Lp434p1(%rip),%rax
-	mulq	%rcx
-	addq	%rax,%r9
-	adcq	%rdx,%r10
-	adcq	$0x0,%r11
-
-
-	xorq	%r12,%r12
-	movq	16+.Lp434p1(%rip),%rax
-	mulq	%r14
-	addq	%rax,%r10
-	adcq	%rdx,%r11
-	adcq	$0x0,%r12
-
-
-	movq	8+.Lp434p1(%rip),%rax
-	mulq	%rcx
-	addq	%rax,%r10
-	adcq	%rdx,%r11
-	adcq	$0x0,%r12
-
-
-	movq	24+.Lp434p1(%rip),%rax
-	mulq	%r14
-	xorq	%r13,%r13
-	addq	%rax,%r11
-	adcq	%rdx,%r12
-	adcq	$0x0,%r13
-
-
-	movq	16+.Lp434p1(%rip),%rax
-	mulq	%rcx
-	addq	%rax,%r11
-	adcq	%rdx,%r12
-	adcq	$0x0,%r13
-
-
-	movq	24+.Lp434p1(%rip),%rax
-	mulq	%rcx
-	addq	%rax,%r12
-	adcq	%rdx,%r13
-
-
-	xorq	%rcx,%rcx
-	addq	40(%rdi),%r8
-	adcq	48(%rdi),%r9
-	adcq	56(%rdi),%r10
-	adcq	64(%rdi),%r11
-	adcq	72(%rdi),%r12
-	adcq	80(%rdi),%r13
-	adcq	88(%rdi),%rcx
-	movq	%r8,40(%rdi)
-	movq	%r9,48(%rdi)
-	movq	%r10,56(%rdi)
-	movq	%r11,64(%rdi)
-	movq	%r12,72(%rdi)
-	movq	%r13,80(%rdi)
-	movq	%rcx,88(%rdi)
-	movq	96(%rdi),%r8
-	movq	104(%rdi),%r9
-	adcq	$0x0,%r8
-	adcq	$0x0,%r9
-	movq	%r8,96(%rdi)
-	movq	%r9,104(%rdi)
-
-
-	movq	32+0(%rdi),%r14
-	movq	0+.Lp434p1(%rip),%rax
-	mulq	%r14
-	xorq	%r10,%r10
-	movq	%rax,%r8
-	movq	%rdx,%r9
-
-
-	movq	8+.Lp434p1(%rip),%rax
-	mulq	%r14
-	xorq	%r11,%r11
-	addq	%rax,%r9
-	adcq	%rdx,%r10
-
-
-	movq	32+8(%rdi),%rcx
-	movq	0+.Lp434p1(%rip),%rax
-	mulq	%rcx
-	addq	%rax,%r9
-	adcq	%rdx,%r10
-	adcq	$0x0,%r11
-
-
-	xorq	%r12,%r12
-	movq	16+.Lp434p1(%rip),%rax
-	mulq	%r14
-	addq	%rax,%r10
-	adcq	%rdx,%r11
-	adcq	$0x0,%r12
-
-
-	movq	8+.Lp434p1(%rip),%rax
-	mulq	%rcx
-	addq	%rax,%r10
-	adcq	%rdx,%r11
-	adcq	$0x0,%r12
-
-
-	movq	24+.Lp434p1(%rip),%rax
-	mulq	%r14
-	xorq	%r13,%r13
-	addq	%rax,%r11
-	adcq	%rdx,%r12
-	adcq	$0x0,%r13
-
-
-	movq	16+.Lp434p1(%rip),%rax
-	mulq	%rcx
-	addq	%rax,%r11
-	adcq	%rdx,%r12
-	adcq	$0x0,%r13
-
-
-	movq	24+.Lp434p1(%rip),%rax
-	mulq	%rcx
-	addq	%rax,%r12
-	adcq	%rdx,%r13
-
-
-	xorq	%rcx,%rcx
-	addq	56(%rdi),%r8
-	adcq	64(%rdi),%r9
-	adcq	72(%rdi),%r10
-	adcq	80(%rdi),%r11
-	adcq	88(%rdi),%r12
-	adcq	96(%rdi),%r13
-	adcq	104(%rdi),%rcx
-	movq	%r8,0(%rsi)
-	movq	%r9,8(%rsi)
-	movq	%r10,72(%rdi)
-	movq	%r11,80(%rdi)
-	movq	%r12,88(%rdi)
-	movq	%r13,96(%rdi)
-	movq	%rcx,104(%rdi)
-
-	movq	48(%rdi),%r13
-
-	xorq	%r10,%r10
-	movq	0+.Lp434p1(%rip),%rax
-	mulq	%r13
-	movq	%rax,%r8
-	movq	%rdx,%r9
-
-	xorq	%r11,%r11
-	movq	8+.Lp434p1(%rip),%rax
-	mulq	%r13
-	addq	%rax,%r9
-	adcq	%rdx,%r10
-
-	xorq	%r12,%r12
-	movq	16+.Lp434p1(%rip),%rax
-	mulq	%r13
-	addq	%rax,%r10
-	adcq	%rdx,%r11
-
-	movq	24+.Lp434p1(%rip),%rax
-	mulq	%r13
-	addq	%rax,%r11
-	adcq	%rdx,%r12
-
-	addq	72(%rdi),%r8
-	adcq	80(%rdi),%r9
-	adcq	88(%rdi),%r10
-	adcq	96(%rdi),%r11
-	adcq	104(%rdi),%r12
-	movq	%r8,16(%rsi)
-	movq	%r9,24(%rsi)
-	movq	%r10,32(%rsi)
-	movq	%r11,40(%rsi)
-	movq	%r12,48(%rsi)
-
-
-	popq	%r15
-.cfi_adjust_cfa_offset	-8
-	popq	%r14
-.cfi_adjust_cfa_offset	-8
-	popq	%r13
-.cfi_adjust_cfa_offset	-8
-	popq	%r12
-.cfi_adjust_cfa_offset	-8
-	.byte	0xf3,0xc3
-.cfi_endproc	
-.Lmul_bdw:
-.cfi_startproc	
-
-.cfi_adjust_cfa_offset	32
-.cfi_offset	r12, -16
-.cfi_offset	r13, -24
-.cfi_offset	r14, -32
-.cfi_offset	r15, -40
-
-
-	movq	%rdx,%rcx
-	xorq	%rax,%rax
-
-
-	movq	0(%rdi),%r8
-	movq	8(%rdi),%r9
-	movq	16(%rdi),%r10
-	movq	24(%rdi),%r11
-
-	pushq	%rbx
-.cfi_adjust_cfa_offset	8
-.cfi_offset	rbx, -48
-	pushq	%rbp
-.cfi_offset	rbp, -56
-.cfi_adjust_cfa_offset	8
-	subq	$96,%rsp
-.cfi_adjust_cfa_offset	96
-
-	addq	32(%rdi),%r8
-	adcq	40(%rdi),%r9
-	adcq	48(%rdi),%r10
-	adcq	$0x0,%r11
-	sbbq	$0x0,%rax
-	movq	%r8,0(%rsp)
-	movq	%r9,8(%rsp)
-	movq	%r10,16(%rsp)
-	movq	%r11,24(%rsp)
-
-
-	xorq	%rbx,%rbx
-	movq	0(%rsi),%r12
-	movq	8(%rsi),%r13
-	movq	16(%rsi),%r14
-	movq	24(%rsi),%r15
-	addq	32(%rsi),%r12
-	adcq	40(%rsi),%r13
-	adcq	48(%rsi),%r14
-	adcq	$0x0,%r15
-	sbbq	$0x0,%rbx
-	movq	%r12,32(%rsp)
-	movq	%r13,40(%rsp)
-	movq	%r14,48(%rsp)
-	movq	%r15,56(%rsp)
-
-
-	andq	%rax,%r12
-	andq	%rax,%r13
-	andq	%rax,%r14
-	andq	%rax,%r15
-
-
-	andq	%rbx,%r8
-	andq	%rbx,%r9
-	andq	%rbx,%r10
-	andq	%rbx,%r11
-
-
-	addq	%r12,%r8
-	adcq	%r13,%r9
-	adcq	%r14,%r10
-	adcq	%r15,%r11
-	movq	%r8,64(%rsp)
-	movq	%r9,72(%rsp)
-	movq	%r10,80(%rsp)
-	movq	%r11,88(%rsp)
-
-
-	movq	0+0(%rsp),%rdx
-	mulxq	32+0(%rsp),%r9,%r8
-	movq	%r9,0+0(%rsp)
-	mulxq	32+8(%rsp),%r10,%r9
-	xorq	%rax,%rax
-	adoxq	%r10,%r8
-	mulxq	32+16(%rsp),%r11,%r10
-	adoxq	%r11,%r9
-	mulxq	32+24(%rsp),%r12,%r11
-	adoxq	%r12,%r10
-
-	movq	0+8(%rsp),%rdx
-	mulxq	32+0(%rsp),%r12,%r13
-	adoxq	%rax,%r11
-	xorq	%rax,%rax
-	mulxq	32+8(%rsp),%r15,%r14
-	adoxq	%r8,%r12
-	movq	%r12,0+8(%rsp)
-	adcxq	%r15,%r13
-	mulxq	32+16(%rsp),%rbx,%r15
-	adcxq	%rbx,%r14
-	adoxq	%r9,%r13
-	mulxq	32+24(%rsp),%rbp,%rbx
-	adcxq	%rbp,%r15
-	adcxq	%rax,%rbx
-	adoxq	%r10,%r14
-
-	movq	0+16(%rsp),%rdx
-	mulxq	32+0(%rsp),%r8,%r9
-	adoxq	%r11,%r15
-	adoxq	%rax,%rbx
-	xorq	%rax,%rax
-	mulxq	32+8(%rsp),%r11,%r10
-	adoxq	%r13,%r8
-	movq	%r8,0+16(%rsp)
-	adcxq	%r11,%r9
-	mulxq	32+16(%rsp),%r12,%r11
-	adcxq	%r12,%r10
-	adoxq	%r14,%r9
-	mulxq	32+24(%rsp),%rbp,%r12
-	adcxq	%rbp,%r11
-	adcxq	%rax,%r12
-
-	adoxq	%r15,%r10
-	adoxq	%rbx,%r11
-	adoxq	%rax,%r12
-
-	movq	0+24(%rsp),%rdx
-	mulxq	32+0(%rsp),%r8,%r13
-	xorq	%rax,%rax
-	mulxq	32+8(%rsp),%r15,%r14
-	adcxq	%r15,%r13
-	adoxq	%r8,%r9
-	mulxq	32+16(%rsp),%rbx,%r15
-	adcxq	%rbx,%r14
-	adoxq	%r13,%r10
-	mulxq	32+24(%rsp),%rbp,%rbx
-	adcxq	%rbp,%r15
-	adcxq	%rax,%rbx
-	adoxq	%r14,%r11
-	adoxq	%r15,%r12
-	adoxq	%rax,%rbx
-	movq	%r9,0+24(%rsp)
-	movq	%r10,0+32(%rsp)
-	movq	%r11,0+40(%rsp)
-	movq	%r12,0+48(%rsp)
-	movq	%rbx,0+56(%rsp)
-
-
-
-	movq	0+0(%rdi),%rdx
-	mulxq	0+0(%rsi),%r9,%r8
-	movq	%r9,0+0(%rcx)
-	mulxq	0+8(%rsi),%r10,%r9
-	xorq	%rax,%rax
-	adoxq	%r10,%r8
-	mulxq	0+16(%rsi),%r11,%r10
-	adoxq	%r11,%r9
-	mulxq	0+24(%rsi),%r12,%r11
-	adoxq	%r12,%r10
-
-	movq	0+8(%rdi),%rdx
-	mulxq	0+0(%rsi),%r12,%r13
-	adoxq	%rax,%r11
-	xorq	%rax,%rax
-	mulxq	0+8(%rsi),%r15,%r14
-	adoxq	%r8,%r12
-	movq	%r12,0+8(%rcx)
-	adcxq	%r15,%r13
-	mulxq	0+16(%rsi),%rbx,%r15
-	adcxq	%rbx,%r14
-	adoxq	%r9,%r13
-	mulxq	0+24(%rsi),%rbp,%rbx
-	adcxq	%rbp,%r15
-	adcxq	%rax,%rbx
-	adoxq	%r10,%r14
-
-	movq	0+16(%rdi),%rdx
-	mulxq	0+0(%rsi),%r8,%r9
-	adoxq	%r11,%r15
-	adoxq	%rax,%rbx
-	xorq	%rax,%rax
-	mulxq	0+8(%rsi),%r11,%r10
-	adoxq	%r13,%r8
-	movq	%r8,0+16(%rcx)
-	adcxq	%r11,%r9
-	mulxq	0+16(%rsi),%r12,%r11
-	adcxq	%r12,%r10
-	adoxq	%r14,%r9
-	mulxq	0+24(%rsi),%rbp,%r12
-	adcxq	%rbp,%r11
-	adcxq	%rax,%r12
-
-	adoxq	%r15,%r10
-	adoxq	%rbx,%r11
-	adoxq	%rax,%r12
-
-	movq	0+24(%rdi),%rdx
-	mulxq	0+0(%rsi),%r8,%r13
-	xorq	%rax,%rax
-	mulxq	0+8(%rsi),%r15,%r14
-	adcxq	%r15,%r13
-	adoxq	%r8,%r9
-	mulxq	0+16(%rsi),%rbx,%r15
-	adcxq	%rbx,%r14
-	adoxq	%r13,%r10
-	mulxq	0+24(%rsi),%rbp,%rbx
-	adcxq	%rbp,%r15
-	adcxq	%rax,%rbx
-	adoxq	%r14,%r11
-	adoxq	%r15,%r12
-	adoxq	%rax,%rbx
-	movq	%r9,0+24(%rcx)
-	movq	%r10,0+32(%rcx)
-	movq	%r11,0+40(%rcx)
-	movq	%r12,0+48(%rcx)
-	movq	%rbx,0+56(%rcx)
-
-
-
-	movq	32+0(%rdi),%rdx
-	mulxq	32+0(%rsi),%r9,%r8
-	movq	%r9,64+0(%rcx)
-	mulxq	32+8(%rsi),%r10,%r9
-	xorq	%rax,%rax
-	adoxq	%r10,%r8
-	mulxq	32+16(%rsi),%r11,%r10
-	adoxq	%r11,%r9
-
-	movq	32+8(%rdi),%rdx
-	mulxq	32+0(%rsi),%r12,%r11
-	adoxq	%rax,%r10
-	xorq	%rax,%rax
-
-	mulxq	32+8(%rsi),%r14,%r13
-	adoxq	%r8,%r12
-	movq	%r12,64+8(%rcx)
-	adcxq	%r14,%r11
-
-	mulxq	32+16(%rsi),%r8,%r14
-	adoxq	%r9,%r11
-	adcxq	%r8,%r13
-	adcxq	%rax,%r14
-	adoxq	%r10,%r13
-
-	movq	32+16(%rdi),%rdx
-	mulxq	32+0(%rsi),%r8,%r9
-	adoxq	%rax,%r14
-	xorq	%rax,%rax
-
-	mulxq	32+8(%rsi),%r10,%r12
-	adoxq	%r11,%r8
-	movq	%r8,64+16(%rcx)
-	adcxq	%r13,%r9
-
-	mulxq	32+16(%rsi),%r11,%r8
-	adcxq	%r14,%r12
-	adcxq	%rax,%r8
-	adoxq	%r10,%r9
-	adoxq	%r12,%r11
-	adoxq	%rax,%r8
-	movq	%r9,64+24(%rcx)
-	movq	%r11,64+32(%rcx)
-	movq	%r8,64+40(%rcx)
-
-
-
-
-	movq	64(%rsp),%r8
-	movq	72(%rsp),%r9
-	movq	80(%rsp),%r10
-	movq	88(%rsp),%r11
-
-	movq	32(%rsp),%rax
-	addq	%rax,%r8
-	movq	40(%rsp),%rax
-	adcq	%rax,%r9
-	movq	48(%rsp),%rax
-	adcq	%rax,%r10
-	movq	56(%rsp),%rax
-	adcq	%rax,%r11
-
-
-	movq	0(%rsp),%r12
-	movq	8(%rsp),%r13
-	movq	16(%rsp),%r14
-	movq	24(%rsp),%r15
-	subq	0(%rcx),%r12
-	sbbq	8(%rcx),%r13
-	sbbq	16(%rcx),%r14
-	sbbq	24(%rcx),%r15
-	sbbq	32(%rcx),%r8
-	sbbq	40(%rcx),%r9
-	sbbq	48(%rcx),%r10
-	sbbq	56(%rcx),%r11
-
-
-	subq	64(%rcx),%r12
-	sbbq	72(%rcx),%r13
-	sbbq	80(%rcx),%r14
-	sbbq	88(%rcx),%r15
-	sbbq	96(%rcx),%r8
-	sbbq	104(%rcx),%r9
-	sbbq	$0x0,%r10
-	sbbq	$0x0,%r11
-
-	addq	32(%rcx),%r12
-	movq	%r12,32(%rcx)
-	adcq	40(%rcx),%r13
-	movq	%r13,40(%rcx)
-	adcq	48(%rcx),%r14
-	movq	%r14,48(%rcx)
-	adcq	56(%rcx),%r15
-	movq	%r15,56(%rcx)
-	adcq	64(%rcx),%r8
-	movq	%r8,64(%rcx)
-	adcq	72(%rcx),%r9
-	movq	%r9,72(%rcx)
-	adcq	80(%rcx),%r10
-	movq	%r10,80(%rcx)
-	adcq	88(%rcx),%r11
-	movq	%r11,88(%rcx)
-	movq	96(%rcx),%r12
-	adcq	$0x0,%r12
-	movq	%r12,96(%rcx)
-	movq	104(%rcx),%r13
-	adcq	$0x0,%r13
-	movq	%r13,104(%rcx)
-
-	addq	$96,%rsp
-.cfi_adjust_cfa_offset	-96
-	popq	%rbp
-.cfi_adjust_cfa_offset	-8
-.cfi_same_value	rbp
-	popq	%rbx
-.cfi_adjust_cfa_offset	-8
-.cfi_same_value	rbx
-
-
-	popq	%r15
-.cfi_adjust_cfa_offset	-8
-.cfi_same_value	r15
-	popq	%r14
-.cfi_adjust_cfa_offset	-8
-.cfi_same_value	r14
-	popq	%r13
-.cfi_adjust_cfa_offset	-8
-.cfi_same_value	r13
-	popq	%r12
-.cfi_adjust_cfa_offset	-8
-.cfi_same_value	r12
-	.byte	0xf3,0xc3
-.cfi_endproc	
-
-.globl	sike_mpmul
-.hidden sike_mpmul
-.type	sike_mpmul,@function
-sike_mpmul:
-.cfi_startproc	
-	pushq	%r12
-.cfi_adjust_cfa_offset	8
-.cfi_offset	r12, -16
-	pushq	%r13
-.cfi_adjust_cfa_offset	8
-.cfi_offset	r13, -24
-	pushq	%r14
-.cfi_adjust_cfa_offset	8
-.cfi_offset	r14, -32
-	pushq	%r15
-.cfi_adjust_cfa_offset	8
-.cfi_offset	r15, -40
-
-
-
-	leaq	OPENSSL_ia32cap_P(%rip),%rcx
-	movq	8(%rcx),%rcx
-	andl	$0x80100,%ecx
-	cmpl	$0x80100,%ecx
-	je	.Lmul_bdw
-
-
-
-	movq	%rdx,%rcx
-
-	subq	$112,%rsp
-.cfi_adjust_cfa_offset	112
-
-
-	xorq	%rax,%rax
-	movq	32(%rdi),%r8
-	movq	40(%rdi),%r9
-	movq	48(%rdi),%r10
-	xorq	%r11,%r11
-	addq	0(%rdi),%r8
-	adcq	8(%rdi),%r9
-	adcq	16(%rdi),%r10
-	adcq	24(%rdi),%r11
-
-	sbbq	$0,%rax
-	movq	%rax,64(%rsp)
-
-	movq	%r8,0(%rcx)
-	movq	%r9,8(%rcx)
-	movq	%r10,16(%rcx)
-	movq	%r11,24(%rcx)
-
-
-	xorq	%rdx,%rdx
-	movq	32(%rsi),%r12
-	movq	40(%rsi),%r13
-	movq	48(%rsi),%r14
-	xorq	%r15,%r15
-	addq	0(%rsi),%r12
-	adcq	8(%rsi),%r13
-	adcq	16(%rsi),%r14
-	adcq	24(%rsi),%r15
-	sbbq	$0x0,%rdx
-
-	movq	%rdx,72(%rsp)
-
-
-	movq	(%rcx),%rax
-	mulq	%r12
-	movq	%rax,(%rsp)
-	movq	%rdx,%r8
-
-	xorq	%r9,%r9
-	movq	(%rcx),%rax
-	mulq	%r13
-	addq	%rax,%r8
-	adcq	%rdx,%r9
-
-	xorq	%r10,%r10
-	movq	8(%rcx),%rax
-	mulq	%r12
-	addq	%rax,%r8
-	movq	%r8,8(%rsp)
-	adcq	%rdx,%r9
-	adcq	$0x0,%r10
-
-	xorq	%r8,%r8
-	movq	(%rcx),%rax
-	mulq	%r14
-	addq	%rax,%r9
-	adcq	%rdx,%r10
-	adcq	$0x0,%r8
-
-	movq	16(%rcx),%rax
-	mulq	%r12
-	addq	%rax,%r9
-	adcq	%rdx,%r10
-	adcq	$0x0,%r8
-
-	movq	8(%rcx),%rax
-	mulq	%r13
-	addq	%rax,%r9
-	movq	%r9,16(%rsp)
-	adcq	%rdx,%r10
-	adcq	$0x0,%r8
-
-	xorq	%r9,%r9
-	movq	(%rcx),%rax
-	mulq	%r15
-	addq	%rax,%r10
-	adcq	%rdx,%r8
-	adcq	$0x0,%r9
-
-	movq	24(%rcx),%rax
-	mulq	%r12
-	addq	%rax,%r10
-	adcq	%rdx,%r8
-	adcq	$0x0,%r9
-
-	movq	8(%rcx),%rax
-	mulq	%r14
-	addq	%rax,%r10
-	adcq	%rdx,%r8
-	adcq	$0x0,%r9
-
-	movq	16(%rcx),%rax
-	mulq	%r13
-	addq	%rax,%r10
-	movq	%r10,24(%rsp)
-	adcq	%rdx,%r8
-	adcq	$0x0,%r9
-
-	xorq	%r10,%r10
-	movq	8(%rcx),%rax
-	mulq	%r15
-	addq	%rax,%r8
-	adcq	%rdx,%r9
-	adcq	$0x0,%r10
-
-	movq	24(%rcx),%rax
-	mulq	%r13
-	addq	%rax,%r8
-	adcq	%rdx,%r9
-	adcq	$0x0,%r10
-
-	movq	16(%rcx),%rax
-	mulq	%r14
-	addq	%rax,%r8
-	movq	%r8,32(%rsp)
-	adcq	%rdx,%r9
-	adcq	$0x0,%r10
-
-	xorq	%r11,%r11
-	movq	16(%rcx),%rax
-	mulq	%r15
-	addq	%rax,%r9
-	adcq	%rdx,%r10
-	adcq	$0x0,%r11
-
-	movq	24(%rcx),%rax
-	mulq	%r14
-	addq	%rax,%r9
-	movq	%r9,40(%rsp)
-	adcq	%rdx,%r10
-	adcq	$0x0,%r11
-
-	movq	24(%rcx),%rax
-	mulq	%r15
-	addq	%rax,%r10
-	movq	%r10,48(%rsp)
-	adcq	%rdx,%r11
-	movq	%r11,56(%rsp)
-
-
-	movq	64(%rsp),%rax
-	andq	%rax,%r12
-	andq	%rax,%r13
-	andq	%rax,%r14
-	andq	%rax,%r15
-
-
-	movq	72(%rsp),%rax
-	movq	0(%rcx),%r8
-	andq	%rax,%r8
-	movq	8(%rcx),%r9
-	andq	%rax,%r9
-	movq	16(%rcx),%r10
-	andq	%rax,%r10
-	movq	24(%rcx),%r11
-	andq	%rax,%r11
-
-
-	addq	%r8,%r12
-	adcq	%r9,%r13
-	adcq	%r10,%r14
-	adcq	%r11,%r15
-
-
-	movq	32(%rsp),%rax
-	addq	%rax,%r12
-	movq	40(%rsp),%rax
-	adcq	%rax,%r13
-	movq	48(%rsp),%rax
-	adcq	%rax,%r14
-	movq	56(%rsp),%rax
-	adcq	%rax,%r15
-	movq	%r12,80(%rsp)
-	movq	%r13,88(%rsp)
-	movq	%r14,96(%rsp)
-	movq	%r15,104(%rsp)
-
-
-	movq	(%rdi),%r11
-	movq	(%rsi),%rax
-	mulq	%r11
-	xorq	%r9,%r9
-	movq	%rax,(%rcx)
-	movq	%rdx,%r8
-
-	movq	16(%rdi),%r14
-	movq	8(%rsi),%rax
-	mulq	%r11
-	xorq	%r10,%r10
-	addq	%rax,%r8
-	adcq	%rdx,%r9
-
-	movq	8(%rdi),%r12
-	movq	(%rsi),%rax
-	mulq	%r12
-	addq	%rax,%r8
-	movq	%r8,8(%rcx)
-	adcq	%rdx,%r9
-	adcq	$0x0,%r10
-
-	xorq	%r8,%r8
-	movq	16(%rsi),%rax
-	mulq	%r11
-	addq	%rax,%r9
-	adcq	%rdx,%r10
-	adcq	$0x0,%r8
-
-	movq	(%rsi),%r13
-	movq	%r14,%rax
-	mulq	%r13
-	addq	%rax,%r9
-	adcq	%rdx,%r10
-	adcq	$0x0,%r8
-
-	movq	8(%rsi),%rax
-	mulq	%r12
-	addq	%rax,%r9
-	movq	%r9,16(%rcx)
-	adcq	%rdx,%r10
-	adcq	$0x0,%r8
-
-	xorq	%r9,%r9
-	movq	24(%rsi),%rax
-	mulq	%r11
-	movq	24(%rdi),%r15
-	addq	%rax,%r10
-	adcq	%rdx,%r8
-	adcq	$0x0,%r9
-
-	movq	%r15,%rax
-	mulq	%r13
-	addq	%rax,%r10
-	adcq	%rdx,%r8
-	adcq	$0x0,%r9
-
-	movq	16(%rsi),%rax
-	mulq	%r12
-	addq	%rax,%r10
-	adcq	%rdx,%r8
-	adcq	$0x0,%r9
-
-	movq	8(%rsi),%rax
-	mulq	%r14
-	addq	%rax,%r10
-	movq	%r10,24(%rcx)
-	adcq	%rdx,%r8
-	adcq	$0x0,%r9
-
-	xorq	%r10,%r10
-	movq	24(%rsi),%rax
-	mulq	%r12
-	addq	%rax,%r8
-	adcq	%rdx,%r9
-	adcq	$0x0,%r10
-
-	movq	8(%rsi),%rax
-	mulq	%r15
-	addq	%rax,%r8
-	adcq	%rdx,%r9
-	adcq	$0x0,%r10
-
-	movq	16(%rsi),%rax
-	mulq	%r14
-	addq	%rax,%r8
-	movq	%r8,32(%rcx)
-	adcq	%rdx,%r9
-	adcq	$0x0,%r10
-
-	xorq	%r8,%r8
-	movq	24(%rsi),%rax
-	mulq	%r14
-	addq	%rax,%r9
-	adcq	%rdx,%r10
-	adcq	$0x0,%r8
-
-	movq	16(%rsi),%rax
-	mulq	%r15
-	addq	%rax,%r9
-	movq	%r9,40(%rcx)
-	adcq	%rdx,%r10
-	adcq	$0x0,%r8
-
-	movq	24(%rsi),%rax
-	mulq	%r15
-	addq	%rax,%r10
-	movq	%r10,48(%rcx)
-	adcq	%rdx,%r8
-	movq	%r8,56(%rcx)
-
-
-
-	movq	32(%rdi),%r11
-	movq	32(%rsi),%rax
-	mulq	%r11
-	xorq	%r9,%r9
-	movq	%rax,64(%rcx)
-	movq	%rdx,%r8
-
-	movq	48(%rdi),%r14
-	movq	40(%rsi),%rax
-	mulq	%r11
-	xorq	%r10,%r10
-	addq	%rax,%r8
-	adcq	%rdx,%r9
-
-	movq	40(%rdi),%r12
-	movq	32(%rsi),%rax
-	mulq	%r12
-	addq	%rax,%r8
-	movq	%r8,72(%rcx)
-	adcq	%rdx,%r9
-	adcq	$0x0,%r10
-
-	xorq	%r8,%r8
-	movq	48(%rsi),%rax
-	mulq	%r11
-	addq	%rax,%r9
-	adcq	%rdx,%r10
-	adcq	$0x0,%r8
-
-	movq	32(%rsi),%r13
-	movq	%r14,%rax
-	mulq	%r13
-	addq	%rax,%r9
-	adcq	%rdx,%r10
-	adcq	$0x0,%r8
-
-	movq	40(%rsi),%rax
-	mulq	%r12
-	addq	%rax,%r9
-	movq	%r9,80(%rcx)
-	adcq	%rdx,%r10
-	adcq	$0x0,%r8
-
-	movq	48(%rsi),%rax
-	mulq	%r12
-	xorq	%r12,%r12
-	addq	%rax,%r10
-	adcq	%rdx,%r8
-	adcq	$0x0,%r12
-
-	movq	40(%rsi),%rax
-	mulq	%r14
-	addq	%rax,%r10
-	adcq	%rdx,%r8
-	adcq	$0x0,%r12
-	movq	%r10,88(%rcx)
-
-	movq	48(%rsi),%rax
-	mulq	%r14
-	addq	%rax,%r8
-	adcq	$0x0,%r12
-	movq	%r8,96(%rcx)
-
-	addq	%r12,%rdx
-
-
-	movq	0(%rsp),%r8
-	subq	0(%rcx),%r8
-	movq	8(%rsp),%r9
-	sbbq	8(%rcx),%r9
-	movq	16(%rsp),%r10
-	sbbq	16(%rcx),%r10
-	movq	24(%rsp),%r11
-	sbbq	24(%rcx),%r11
-	movq	80(%rsp),%r12
-	sbbq	32(%rcx),%r12
-	movq	88(%rsp),%r13
-	sbbq	40(%rcx),%r13
-	movq	96(%rsp),%r14
-	sbbq	48(%rcx),%r14
-	movq	104(%rsp),%r15
-	sbbq	56(%rcx),%r15
-
-
-	movq	64(%rcx),%rax
-	subq	%rax,%r8
-	movq	72(%rcx),%rax
-	sbbq	%rax,%r9
-	movq	80(%rcx),%rax
-	sbbq	%rax,%r10
-	movq	88(%rcx),%rax
-	sbbq	%rax,%r11
-	movq	96(%rcx),%rax
-	sbbq	%rax,%r12
-	sbbq	%rdx,%r13
-	sbbq	$0x0,%r14
-	sbbq	$0x0,%r15
-
-
-	addq	32(%rcx),%r8
-	movq	%r8,32(%rcx)
-	adcq	40(%rcx),%r9
-	movq	%r9,40(%rcx)
-	adcq	48(%rcx),%r10
-	movq	%r10,48(%rcx)
-	adcq	56(%rcx),%r11
-	movq	%r11,56(%rcx)
-	adcq	64(%rcx),%r12
-	movq	%r12,64(%rcx)
-	adcq	72(%rcx),%r13
-	movq	%r13,72(%rcx)
-	adcq	80(%rcx),%r14
-	movq	%r14,80(%rcx)
-	adcq	88(%rcx),%r15
-	movq	%r15,88(%rcx)
-	movq	96(%rcx),%r12
-	adcq	$0x0,%r12
-	movq	%r12,96(%rcx)
-	adcq	$0x0,%rdx
-	movq	%rdx,104(%rcx)
-
-	addq	$112,%rsp
-.cfi_adjust_cfa_offset	-112
-
-
-	popq	%r15
-.cfi_adjust_cfa_offset	-8
-	popq	%r14
-.cfi_adjust_cfa_offset	-8
-	popq	%r13
-.cfi_adjust_cfa_offset	-8
-	popq	%r12
-.cfi_adjust_cfa_offset	-8
-	.byte	0xf3,0xc3
-.cfi_endproc	
-#endif
diff --git a/mac-x86_64/crypto/fipsmodule/p256-x86_64-asm.S b/mac-x86_64/crypto/fipsmodule/p256-x86_64-asm.S
index 1f4a931..237c0a3 100644
--- a/mac-x86_64/crypto/fipsmodule/p256-x86_64-asm.S
+++ b/mac-x86_64/crypto/fipsmodule/p256-x86_64-asm.S
@@ -2772,22 +2772,15 @@
 	orq	%r8,%r12
 	orq	%r9,%r12
 
-.byte	102,73,15,126,208
-.byte	102,73,15,126,217
-	orq	%r8,%r12
 .byte	0x3e
 	jnz	L$add_proceedq
-
-
-
+.byte	102,73,15,126,208
+.byte	102,73,15,126,217
+	testq	%r8,%r8
+	jnz	L$add_proceedq
 	testq	%r9,%r9
 	jz	L$add_doubleq
 
-
-
-
-
-
 .byte	102,72,15,126,199
 	pxor	%xmm0,%xmm0
 	movdqu	%xmm0,0(%rdi)
@@ -3882,22 +3875,15 @@
 	orq	%r8,%r12
 	orq	%r9,%r12
 
-.byte	102,73,15,126,208
-.byte	102,73,15,126,217
-	orq	%r8,%r12
 .byte	0x3e
 	jnz	L$add_proceedx
-
-
-
+.byte	102,73,15,126,208
+.byte	102,73,15,126,217
+	testq	%r8,%r8
+	jnz	L$add_proceedx
 	testq	%r9,%r9
 	jz	L$add_doublex
 
-
-
-
-
-
 .byte	102,72,15,126,199
 	pxor	%xmm0,%xmm0
 	movdqu	%xmm0,0(%rdi)
diff --git a/mac-x86_64/crypto/third_party/sike/asm/fp-x86_64.S b/mac-x86_64/crypto/third_party/sike/asm/fp-x86_64.S
deleted file mode 100644
index f1e7ea4..0000000
--- a/mac-x86_64/crypto/third_party/sike/asm/fp-x86_64.S
+++ /dev/null
@@ -1,1869 +0,0 @@
-# This file is generated from a similarly-named Perl script in the BoringSSL
-# source tree. Do not edit by hand.
-
-#if defined(__has_feature)
-#if __has_feature(memory_sanitizer) && !defined(OPENSSL_NO_ASM)
-#define OPENSSL_NO_ASM
-#endif
-#endif
-
-#if defined(__x86_64__) && !defined(OPENSSL_NO_ASM)
-#if defined(BORINGSSL_PREFIX)
-#include <boringssl_prefix_symbols_asm.h>
-#endif
-.text	
-
-
-L$p434x2:
-.quad	0xFFFFFFFFFFFFFFFE
-.quad	0xFFFFFFFFFFFFFFFF
-.quad	0xFB82ECF5C5FFFFFF
-.quad	0xF78CB8F062B15D47
-.quad	0xD9F8BFAD038A40AC
-.quad	0x0004683E4E2EE688
-
-
-L$p434p1:
-.quad	0xFDC1767AE3000000
-.quad	0x7BC65C783158AEA3
-.quad	0x6CFC5FD681C52056
-.quad	0x0002341F27177344
-
-
-.private_extern	_OPENSSL_ia32cap_P
-.globl	_sike_fpadd
-.private_extern _sike_fpadd
-
-_sike_fpadd:
-
-	pushq	%r12
-
-
-	pushq	%r13
-
-
-	pushq	%r14
-
-
-
-	xorq	%rax,%rax
-
-	movq	0(%rdi),%r8
-	addq	0(%rsi),%r8
-	movq	8(%rdi),%r9
-	adcq	8(%rsi),%r9
-	movq	16(%rdi),%r10
-	adcq	16(%rsi),%r10
-	movq	24(%rdi),%r11
-	adcq	24(%rsi),%r11
-	movq	32(%rdi),%r12
-	adcq	32(%rsi),%r12
-	movq	40(%rdi),%r13
-	adcq	40(%rsi),%r13
-	movq	48(%rdi),%r14
-	adcq	48(%rsi),%r14
-
-	movq	L$p434x2(%rip),%rcx
-	subq	%rcx,%r8
-	movq	8+L$p434x2(%rip),%rcx
-	sbbq	%rcx,%r9
-	sbbq	%rcx,%r10
-	movq	16+L$p434x2(%rip),%rcx
-	sbbq	%rcx,%r11
-	movq	24+L$p434x2(%rip),%rcx
-	sbbq	%rcx,%r12
-	movq	32+L$p434x2(%rip),%rcx
-	sbbq	%rcx,%r13
-	movq	40+L$p434x2(%rip),%rcx
-	sbbq	%rcx,%r14
-
-	sbbq	$0,%rax
-
-	movq	L$p434x2(%rip),%rdi
-	andq	%rax,%rdi
-	movq	8+L$p434x2(%rip),%rsi
-	andq	%rax,%rsi
-	movq	16+L$p434x2(%rip),%rcx
-	andq	%rax,%rcx
-
-	addq	%rdi,%r8
-	movq	%r8,0(%rdx)
-	adcq	%rsi,%r9
-	movq	%r9,8(%rdx)
-	adcq	%rsi,%r10
-	movq	%r10,16(%rdx)
-	adcq	%rcx,%r11
-	movq	%r11,24(%rdx)
-
-	setc	%cl
-	movq	24+L$p434x2(%rip),%r8
-	andq	%rax,%r8
-	movq	32+L$p434x2(%rip),%r9
-	andq	%rax,%r9
-	movq	40+L$p434x2(%rip),%r10
-	andq	%rax,%r10
-	btq	$0,%rcx
-
-	adcq	%r8,%r12
-	movq	%r12,32(%rdx)
-	adcq	%r9,%r13
-	movq	%r13,40(%rdx)
-	adcq	%r10,%r14
-	movq	%r14,48(%rdx)
-
-	popq	%r14
-
-	popq	%r13
-
-	popq	%r12
-
-	.byte	0xf3,0xc3
-
-.globl	_sike_cswap_asm
-.private_extern _sike_cswap_asm
-
-_sike_cswap_asm:
-
-
-	movq	%rdx,%xmm3
-
-
-
-
-
-	pshufd	$68,%xmm3,%xmm3
-
-	movdqu	0(%rdi),%xmm0
-	movdqu	0(%rsi),%xmm1
-	movdqa	%xmm1,%xmm2
-	pxor	%xmm0,%xmm2
-	pand	%xmm3,%xmm2
-	pxor	%xmm2,%xmm0
-	pxor	%xmm2,%xmm1
-	movdqu	%xmm0,0(%rdi)
-	movdqu	%xmm1,0(%rsi)
-
-	movdqu	16(%rdi),%xmm0
-	movdqu	16(%rsi),%xmm1
-	movdqa	%xmm1,%xmm2
-	pxor	%xmm0,%xmm2
-	pand	%xmm3,%xmm2
-	pxor	%xmm2,%xmm0
-	pxor	%xmm2,%xmm1
-	movdqu	%xmm0,16(%rdi)
-	movdqu	%xmm1,16(%rsi)
-
-	movdqu	32(%rdi),%xmm0
-	movdqu	32(%rsi),%xmm1
-	movdqa	%xmm1,%xmm2
-	pxor	%xmm0,%xmm2
-	pand	%xmm3,%xmm2
-	pxor	%xmm2,%xmm0
-	pxor	%xmm2,%xmm1
-	movdqu	%xmm0,32(%rdi)
-	movdqu	%xmm1,32(%rsi)
-
-	movdqu	48(%rdi),%xmm0
-	movdqu	48(%rsi),%xmm1
-	movdqa	%xmm1,%xmm2
-	pxor	%xmm0,%xmm2
-	pand	%xmm3,%xmm2
-	pxor	%xmm2,%xmm0
-	pxor	%xmm2,%xmm1
-	movdqu	%xmm0,48(%rdi)
-	movdqu	%xmm1,48(%rsi)
-
-	movdqu	64(%rdi),%xmm0
-	movdqu	64(%rsi),%xmm1
-	movdqa	%xmm1,%xmm2
-	pxor	%xmm0,%xmm2
-	pand	%xmm3,%xmm2
-	pxor	%xmm2,%xmm0
-	pxor	%xmm2,%xmm1
-	movdqu	%xmm0,64(%rdi)
-	movdqu	%xmm1,64(%rsi)
-
-	movdqu	80(%rdi),%xmm0
-	movdqu	80(%rsi),%xmm1
-	movdqa	%xmm1,%xmm2
-	pxor	%xmm0,%xmm2
-	pand	%xmm3,%xmm2
-	pxor	%xmm2,%xmm0
-	pxor	%xmm2,%xmm1
-	movdqu	%xmm0,80(%rdi)
-	movdqu	%xmm1,80(%rsi)
-
-	movdqu	96(%rdi),%xmm0
-	movdqu	96(%rsi),%xmm1
-	movdqa	%xmm1,%xmm2
-	pxor	%xmm0,%xmm2
-	pand	%xmm3,%xmm2
-	pxor	%xmm2,%xmm0
-	pxor	%xmm2,%xmm1
-	movdqu	%xmm0,96(%rdi)
-	movdqu	%xmm1,96(%rsi)
-
-	movdqu	112(%rdi),%xmm0
-	movdqu	112(%rsi),%xmm1
-	movdqa	%xmm1,%xmm2
-	pxor	%xmm0,%xmm2
-	pand	%xmm3,%xmm2
-	pxor	%xmm2,%xmm0
-	pxor	%xmm2,%xmm1
-	movdqu	%xmm0,112(%rdi)
-	movdqu	%xmm1,112(%rsi)
-
-	movdqu	128(%rdi),%xmm0
-	movdqu	128(%rsi),%xmm1
-	movdqa	%xmm1,%xmm2
-	pxor	%xmm0,%xmm2
-	pand	%xmm3,%xmm2
-	pxor	%xmm2,%xmm0
-	pxor	%xmm2,%xmm1
-	movdqu	%xmm0,128(%rdi)
-	movdqu	%xmm1,128(%rsi)
-
-	movdqu	144(%rdi),%xmm0
-	movdqu	144(%rsi),%xmm1
-	movdqa	%xmm1,%xmm2
-	pxor	%xmm0,%xmm2
-	pand	%xmm3,%xmm2
-	pxor	%xmm2,%xmm0
-	pxor	%xmm2,%xmm1
-	movdqu	%xmm0,144(%rdi)
-	movdqu	%xmm1,144(%rsi)
-
-	movdqu	160(%rdi),%xmm0
-	movdqu	160(%rsi),%xmm1
-	movdqa	%xmm1,%xmm2
-	pxor	%xmm0,%xmm2
-	pand	%xmm3,%xmm2
-	pxor	%xmm2,%xmm0
-	pxor	%xmm2,%xmm1
-	movdqu	%xmm0,160(%rdi)
-	movdqu	%xmm1,160(%rsi)
-
-	movdqu	176(%rdi),%xmm0
-	movdqu	176(%rsi),%xmm1
-	movdqa	%xmm1,%xmm2
-	pxor	%xmm0,%xmm2
-	pand	%xmm3,%xmm2
-	pxor	%xmm2,%xmm0
-	pxor	%xmm2,%xmm1
-	movdqu	%xmm0,176(%rdi)
-	movdqu	%xmm1,176(%rsi)
-
-	movdqu	192(%rdi),%xmm0
-	movdqu	192(%rsi),%xmm1
-	movdqa	%xmm1,%xmm2
-	pxor	%xmm0,%xmm2
-	pand	%xmm3,%xmm2
-	pxor	%xmm2,%xmm0
-	pxor	%xmm2,%xmm1
-	movdqu	%xmm0,192(%rdi)
-	movdqu	%xmm1,192(%rsi)
-
-	movdqu	208(%rdi),%xmm0
-	movdqu	208(%rsi),%xmm1
-	movdqa	%xmm1,%xmm2
-	pxor	%xmm0,%xmm2
-	pand	%xmm3,%xmm2
-	pxor	%xmm2,%xmm0
-	pxor	%xmm2,%xmm1
-	movdqu	%xmm0,208(%rdi)
-	movdqu	%xmm1,208(%rsi)
-
-	.byte	0xf3,0xc3
-.globl	_sike_fpsub
-.private_extern _sike_fpsub
-
-_sike_fpsub:
-
-	pushq	%r12
-
-
-	pushq	%r13
-
-
-	pushq	%r14
-
-
-
-	xorq	%rax,%rax
-
-	movq	0(%rdi),%r8
-	subq	0(%rsi),%r8
-	movq	8(%rdi),%r9
-	sbbq	8(%rsi),%r9
-	movq	16(%rdi),%r10
-	sbbq	16(%rsi),%r10
-	movq	24(%rdi),%r11
-	sbbq	24(%rsi),%r11
-	movq	32(%rdi),%r12
-	sbbq	32(%rsi),%r12
-	movq	40(%rdi),%r13
-	sbbq	40(%rsi),%r13
-	movq	48(%rdi),%r14
-	sbbq	48(%rsi),%r14
-
-	sbbq	$0x0,%rax
-
-	movq	L$p434x2(%rip),%rdi
-	andq	%rax,%rdi
-	movq	8+L$p434x2(%rip),%rsi
-	andq	%rax,%rsi
-	movq	16+L$p434x2(%rip),%rcx
-	andq	%rax,%rcx
-
-	addq	%rdi,%r8
-	movq	%r8,0(%rdx)
-	adcq	%rsi,%r9
-	movq	%r9,8(%rdx)
-	adcq	%rsi,%r10
-	movq	%r10,16(%rdx)
-	adcq	%rcx,%r11
-	movq	%r11,24(%rdx)
-
-	setc	%cl
-	movq	24+L$p434x2(%rip),%r8
-	andq	%rax,%r8
-	movq	32+L$p434x2(%rip),%r9
-	andq	%rax,%r9
-	movq	40+L$p434x2(%rip),%r10
-	andq	%rax,%r10
-	btq	$0x0,%rcx
-
-	adcq	%r8,%r12
-	adcq	%r9,%r13
-	adcq	%r10,%r14
-	movq	%r12,32(%rdx)
-	movq	%r13,40(%rdx)
-	movq	%r14,48(%rdx)
-
-	popq	%r14
-
-	popq	%r13
-
-	popq	%r12
-
-	.byte	0xf3,0xc3
-
-.globl	_sike_mpadd_asm
-.private_extern _sike_mpadd_asm
-
-_sike_mpadd_asm:
-
-	movq	0(%rdi),%r8;
-	movq	8(%rdi),%r9
-	movq	16(%rdi),%r10
-	movq	24(%rdi),%r11
-	movq	32(%rdi),%rcx
-	addq	0(%rsi),%r8
-	adcq	8(%rsi),%r9
-	adcq	16(%rsi),%r10
-	adcq	24(%rsi),%r11
-	adcq	32(%rsi),%rcx
-	movq	%r8,0(%rdx)
-	movq	%r9,8(%rdx)
-	movq	%r10,16(%rdx)
-	movq	%r11,24(%rdx)
-	movq	%rcx,32(%rdx)
-
-	movq	40(%rdi),%r8
-	movq	48(%rdi),%r9
-	adcq	40(%rsi),%r8
-	adcq	48(%rsi),%r9
-	movq	%r8,40(%rdx)
-	movq	%r9,48(%rdx)
-	.byte	0xf3,0xc3
-
-.globl	_sike_mpsubx2_asm
-.private_extern _sike_mpsubx2_asm
-
-_sike_mpsubx2_asm:
-
-	xorq	%rax,%rax
-
-	movq	0(%rdi),%r8
-	movq	8(%rdi),%r9
-	movq	16(%rdi),%r10
-	movq	24(%rdi),%r11
-	movq	32(%rdi),%rcx
-	subq	0(%rsi),%r8
-	sbbq	8(%rsi),%r9
-	sbbq	16(%rsi),%r10
-	sbbq	24(%rsi),%r11
-	sbbq	32(%rsi),%rcx
-	movq	%r8,0(%rdx)
-	movq	%r9,8(%rdx)
-	movq	%r10,16(%rdx)
-	movq	%r11,24(%rdx)
-	movq	%rcx,32(%rdx)
-
-	movq	40(%rdi),%r8
-	movq	48(%rdi),%r9
-	movq	56(%rdi),%r10
-	movq	64(%rdi),%r11
-	movq	72(%rdi),%rcx
-	sbbq	40(%rsi),%r8
-	sbbq	48(%rsi),%r9
-	sbbq	56(%rsi),%r10
-	sbbq	64(%rsi),%r11
-	sbbq	72(%rsi),%rcx
-	movq	%r8,40(%rdx)
-	movq	%r9,48(%rdx)
-	movq	%r10,56(%rdx)
-	movq	%r11,64(%rdx)
-	movq	%rcx,72(%rdx)
-
-	movq	80(%rdi),%r8
-	movq	88(%rdi),%r9
-	movq	96(%rdi),%r10
-	movq	104(%rdi),%r11
-	sbbq	80(%rsi),%r8
-	sbbq	88(%rsi),%r9
-	sbbq	96(%rsi),%r10
-	sbbq	104(%rsi),%r11
-	sbbq	$0x0,%rax
-	movq	%r8,80(%rdx)
-	movq	%r9,88(%rdx)
-	movq	%r10,96(%rdx)
-	movq	%r11,104(%rdx)
-	.byte	0xf3,0xc3
-
-.globl	_sike_mpdblsubx2_asm
-.private_extern _sike_mpdblsubx2_asm
-
-_sike_mpdblsubx2_asm:
-
-	pushq	%r12
-
-
-	pushq	%r13
-
-
-
-	xorq	%rax,%rax
-
-
-	movq	0(%rdx),%r8
-	movq	8(%rdx),%r9
-	movq	16(%rdx),%r10
-	movq	24(%rdx),%r11
-	movq	32(%rdx),%r12
-	movq	40(%rdx),%r13
-	movq	48(%rdx),%rcx
-	subq	0(%rdi),%r8
-	sbbq	8(%rdi),%r9
-	sbbq	16(%rdi),%r10
-	sbbq	24(%rdi),%r11
-	sbbq	32(%rdi),%r12
-	sbbq	40(%rdi),%r13
-	sbbq	48(%rdi),%rcx
-	adcq	$0x0,%rax
-
-
-	subq	0(%rsi),%r8
-	sbbq	8(%rsi),%r9
-	sbbq	16(%rsi),%r10
-	sbbq	24(%rsi),%r11
-	sbbq	32(%rsi),%r12
-	sbbq	40(%rsi),%r13
-	sbbq	48(%rsi),%rcx
-	adcq	$0x0,%rax
-
-
-	movq	%r8,0(%rdx)
-	movq	%r9,8(%rdx)
-	movq	%r10,16(%rdx)
-	movq	%r11,24(%rdx)
-	movq	%r12,32(%rdx)
-	movq	%r13,40(%rdx)
-	movq	%rcx,48(%rdx)
-
-
-	movq	56(%rdx),%r8
-	movq	64(%rdx),%r9
-	movq	72(%rdx),%r10
-	movq	80(%rdx),%r11
-	movq	88(%rdx),%r12
-	movq	96(%rdx),%r13
-	movq	104(%rdx),%rcx
-
-	subq	%rax,%r8
-	sbbq	56(%rdi),%r8
-	sbbq	64(%rdi),%r9
-	sbbq	72(%rdi),%r10
-	sbbq	80(%rdi),%r11
-	sbbq	88(%rdi),%r12
-	sbbq	96(%rdi),%r13
-	sbbq	104(%rdi),%rcx
-
-
-	subq	56(%rsi),%r8
-	sbbq	64(%rsi),%r9
-	sbbq	72(%rsi),%r10
-	sbbq	80(%rsi),%r11
-	sbbq	88(%rsi),%r12
-	sbbq	96(%rsi),%r13
-	sbbq	104(%rsi),%rcx
-
-
-	movq	%r8,56(%rdx)
-	movq	%r9,64(%rdx)
-	movq	%r10,72(%rdx)
-	movq	%r11,80(%rdx)
-	movq	%r12,88(%rdx)
-	movq	%r13,96(%rdx)
-	movq	%rcx,104(%rdx)
-
-	popq	%r13
-
-	popq	%r12
-
-	.byte	0xf3,0xc3
-
-
-L$rdc_bdw:
-
-
-
-
-
-
-
-
-	xorq	%rax,%rax
-	movq	0+0(%rdi),%rdx
-	mulxq	0+L$p434p1(%rip),%r8,%r9
-	mulxq	8+L$p434p1(%rip),%r12,%r10
-	mulxq	16+L$p434p1(%rip),%r13,%r11
-
-	adoxq	%r12,%r9
-	adoxq	%r13,%r10
-
-	mulxq	24+L$p434p1(%rip),%r13,%r12
-	adoxq	%r13,%r11
-	adoxq	%rax,%r12
-
-	xorq	%rax,%rax
-	movq	0+8(%rdi),%rdx
-	mulxq	0+L$p434p1(%rip),%r13,%rcx
-	adcxq	%r13,%r9
-	adcxq	%rcx,%r10
-
-	mulxq	8+L$p434p1(%rip),%rcx,%r13
-	adcxq	%r13,%r11
-	adoxq	%rcx,%r10
-
-	mulxq	16+L$p434p1(%rip),%rcx,%r13
-	adcxq	%r13,%r12
-	adoxq	%rcx,%r11
-
-	mulxq	24+L$p434p1(%rip),%rcx,%r13
-	adcxq	%rax,%r13
-	adoxq	%rcx,%r12
-	adoxq	%rax,%r13
-
-	xorq	%rcx,%rcx
-	addq	24(%rdi),%r8
-	adcq	32(%rdi),%r9
-	adcq	40(%rdi),%r10
-	adcq	48(%rdi),%r11
-	adcq	56(%rdi),%r12
-	adcq	64(%rdi),%r13
-	adcq	72(%rdi),%rcx
-	movq	%r8,24(%rdi)
-	movq	%r9,32(%rdi)
-	movq	%r10,40(%rdi)
-	movq	%r11,48(%rdi)
-	movq	%r12,56(%rdi)
-	movq	%r13,64(%rdi)
-	movq	%rcx,72(%rdi)
-	movq	80(%rdi),%r8
-	movq	88(%rdi),%r9
-	movq	96(%rdi),%r10
-	movq	104(%rdi),%r11
-	adcq	$0x0,%r8
-	adcq	$0x0,%r9
-	adcq	$0x0,%r10
-	adcq	$0x0,%r11
-	movq	%r8,80(%rdi)
-	movq	%r9,88(%rdi)
-	movq	%r10,96(%rdi)
-	movq	%r11,104(%rdi)
-
-	xorq	%rax,%rax
-	movq	16+0(%rdi),%rdx
-	mulxq	0+L$p434p1(%rip),%r8,%r9
-	mulxq	8+L$p434p1(%rip),%r12,%r10
-	mulxq	16+L$p434p1(%rip),%r13,%r11
-
-	adoxq	%r12,%r9
-	adoxq	%r13,%r10
-
-	mulxq	24+L$p434p1(%rip),%r13,%r12
-	adoxq	%r13,%r11
-	adoxq	%rax,%r12
-
-	xorq	%rax,%rax
-	movq	16+8(%rdi),%rdx
-	mulxq	0+L$p434p1(%rip),%r13,%rcx
-	adcxq	%r13,%r9
-	adcxq	%rcx,%r10
-
-	mulxq	8+L$p434p1(%rip),%rcx,%r13
-	adcxq	%r13,%r11
-	adoxq	%rcx,%r10
-
-	mulxq	16+L$p434p1(%rip),%rcx,%r13
-	adcxq	%r13,%r12
-	adoxq	%rcx,%r11
-
-	mulxq	24+L$p434p1(%rip),%rcx,%r13
-	adcxq	%rax,%r13
-	adoxq	%rcx,%r12
-	adoxq	%rax,%r13
-
-	xorq	%rcx,%rcx
-	addq	40(%rdi),%r8
-	adcq	48(%rdi),%r9
-	adcq	56(%rdi),%r10
-	adcq	64(%rdi),%r11
-	adcq	72(%rdi),%r12
-	adcq	80(%rdi),%r13
-	adcq	88(%rdi),%rcx
-	movq	%r8,40(%rdi)
-	movq	%r9,48(%rdi)
-	movq	%r10,56(%rdi)
-	movq	%r11,64(%rdi)
-	movq	%r12,72(%rdi)
-	movq	%r13,80(%rdi)
-	movq	%rcx,88(%rdi)
-	movq	96(%rdi),%r8
-	movq	104(%rdi),%r9
-	adcq	$0x0,%r8
-	adcq	$0x0,%r9
-	movq	%r8,96(%rdi)
-	movq	%r9,104(%rdi)
-
-	xorq	%rax,%rax
-	movq	32+0(%rdi),%rdx
-	mulxq	0+L$p434p1(%rip),%r8,%r9
-	mulxq	8+L$p434p1(%rip),%r12,%r10
-	mulxq	16+L$p434p1(%rip),%r13,%r11
-
-	adoxq	%r12,%r9
-	adoxq	%r13,%r10
-
-	mulxq	24+L$p434p1(%rip),%r13,%r12
-	adoxq	%r13,%r11
-	adoxq	%rax,%r12
-
-	xorq	%rax,%rax
-	movq	32+8(%rdi),%rdx
-	mulxq	0+L$p434p1(%rip),%r13,%rcx
-	adcxq	%r13,%r9
-	adcxq	%rcx,%r10
-
-	mulxq	8+L$p434p1(%rip),%rcx,%r13
-	adcxq	%r13,%r11
-	adoxq	%rcx,%r10
-
-	mulxq	16+L$p434p1(%rip),%rcx,%r13
-	adcxq	%r13,%r12
-	adoxq	%rcx,%r11
-
-	mulxq	24+L$p434p1(%rip),%rcx,%r13
-	adcxq	%rax,%r13
-	adoxq	%rcx,%r12
-	adoxq	%rax,%r13
-
-	xorq	%rcx,%rcx
-	addq	56(%rdi),%r8
-	adcq	64(%rdi),%r9
-	adcq	72(%rdi),%r10
-	adcq	80(%rdi),%r11
-	adcq	88(%rdi),%r12
-	adcq	96(%rdi),%r13
-	adcq	104(%rdi),%rcx
-	movq	%r8,0(%rsi)
-	movq	%r9,8(%rsi)
-	movq	%r10,72(%rdi)
-	movq	%r11,80(%rdi)
-	movq	%r12,88(%rdi)
-	movq	%r13,96(%rdi)
-	movq	%rcx,104(%rdi)
-
-	xorq	%rax,%rax
-	movq	48(%rdi),%rdx
-	mulxq	0+L$p434p1(%rip),%r8,%r9
-	mulxq	8+L$p434p1(%rip),%r12,%r10
-	mulxq	16+L$p434p1(%rip),%r13,%r11
-
-	adoxq	%r12,%r9
-	adoxq	%r13,%r10
-
-	mulxq	24+L$p434p1(%rip),%r13,%r12
-	adoxq	%r13,%r11
-	adoxq	%rax,%r12
-
-	addq	72(%rdi),%r8
-	adcq	80(%rdi),%r9
-	adcq	88(%rdi),%r10
-	adcq	96(%rdi),%r11
-	adcq	104(%rdi),%r12
-	movq	%r8,16(%rsi)
-	movq	%r9,24(%rsi)
-	movq	%r10,32(%rsi)
-	movq	%r11,40(%rsi)
-	movq	%r12,48(%rsi)
-
-
-	popq	%r15
-
-
-	popq	%r14
-
-
-	popq	%r13
-
-
-	popq	%r12
-
-
-	.byte	0xf3,0xc3
-
-.globl	_sike_fprdc
-.private_extern _sike_fprdc
-
-_sike_fprdc:
-
-	pushq	%r12
-
-
-	pushq	%r13
-
-
-	pushq	%r14
-
-
-	pushq	%r15
-
-
-
-
-
-	leaq	_OPENSSL_ia32cap_P(%rip),%rcx
-	movq	8(%rcx),%rcx
-	andl	$0x80100,%ecx
-	cmpl	$0x80100,%ecx
-	je	L$rdc_bdw
-
-
-
-
-	movq	0+0(%rdi),%r14
-	movq	0+L$p434p1(%rip),%rax
-	mulq	%r14
-	xorq	%r10,%r10
-	movq	%rax,%r8
-	movq	%rdx,%r9
-
-
-	movq	8+L$p434p1(%rip),%rax
-	mulq	%r14
-	xorq	%r11,%r11
-	addq	%rax,%r9
-	adcq	%rdx,%r10
-
-
-	movq	0+8(%rdi),%rcx
-	movq	0+L$p434p1(%rip),%rax
-	mulq	%rcx
-	addq	%rax,%r9
-	adcq	%rdx,%r10
-	adcq	$0x0,%r11
-
-
-	xorq	%r12,%r12
-	movq	16+L$p434p1(%rip),%rax
-	mulq	%r14
-	addq	%rax,%r10
-	adcq	%rdx,%r11
-	adcq	$0x0,%r12
-
-
-	movq	8+L$p434p1(%rip),%rax
-	mulq	%rcx
-	addq	%rax,%r10
-	adcq	%rdx,%r11
-	adcq	$0x0,%r12
-
-
-	movq	24+L$p434p1(%rip),%rax
-	mulq	%r14
-	xorq	%r13,%r13
-	addq	%rax,%r11
-	adcq	%rdx,%r12
-	adcq	$0x0,%r13
-
-
-	movq	16+L$p434p1(%rip),%rax
-	mulq	%rcx
-	addq	%rax,%r11
-	adcq	%rdx,%r12
-	adcq	$0x0,%r13
-
-
-	movq	24+L$p434p1(%rip),%rax
-	mulq	%rcx
-	addq	%rax,%r12
-	adcq	%rdx,%r13
-
-
-	xorq	%rcx,%rcx
-	addq	24(%rdi),%r8
-	adcq	32(%rdi),%r9
-	adcq	40(%rdi),%r10
-	adcq	48(%rdi),%r11
-	adcq	56(%rdi),%r12
-	adcq	64(%rdi),%r13
-	adcq	72(%rdi),%rcx
-	movq	%r8,24(%rdi)
-	movq	%r9,32(%rdi)
-	movq	%r10,40(%rdi)
-	movq	%r11,48(%rdi)
-	movq	%r12,56(%rdi)
-	movq	%r13,64(%rdi)
-	movq	%rcx,72(%rdi)
-	movq	80(%rdi),%r8
-	movq	88(%rdi),%r9
-	movq	96(%rdi),%r10
-	movq	104(%rdi),%r11
-	adcq	$0x0,%r8
-	adcq	$0x0,%r9
-	adcq	$0x0,%r10
-	adcq	$0x0,%r11
-	movq	%r8,80(%rdi)
-	movq	%r9,88(%rdi)
-	movq	%r10,96(%rdi)
-	movq	%r11,104(%rdi)
-
-
-	movq	16+0(%rdi),%r14
-	movq	0+L$p434p1(%rip),%rax
-	mulq	%r14
-	xorq	%r10,%r10
-	movq	%rax,%r8
-	movq	%rdx,%r9
-
-
-	movq	8+L$p434p1(%rip),%rax
-	mulq	%r14
-	xorq	%r11,%r11
-	addq	%rax,%r9
-	adcq	%rdx,%r10
-
-
-	movq	16+8(%rdi),%rcx
-	movq	0+L$p434p1(%rip),%rax
-	mulq	%rcx
-	addq	%rax,%r9
-	adcq	%rdx,%r10
-	adcq	$0x0,%r11
-
-
-	xorq	%r12,%r12
-	movq	16+L$p434p1(%rip),%rax
-	mulq	%r14
-	addq	%rax,%r10
-	adcq	%rdx,%r11
-	adcq	$0x0,%r12
-
-
-	movq	8+L$p434p1(%rip),%rax
-	mulq	%rcx
-	addq	%rax,%r10
-	adcq	%rdx,%r11
-	adcq	$0x0,%r12
-
-
-	movq	24+L$p434p1(%rip),%rax
-	mulq	%r14
-	xorq	%r13,%r13
-	addq	%rax,%r11
-	adcq	%rdx,%r12
-	adcq	$0x0,%r13
-
-
-	movq	16+L$p434p1(%rip),%rax
-	mulq	%rcx
-	addq	%rax,%r11
-	adcq	%rdx,%r12
-	adcq	$0x0,%r13
-
-
-	movq	24+L$p434p1(%rip),%rax
-	mulq	%rcx
-	addq	%rax,%r12
-	adcq	%rdx,%r13
-
-
-	xorq	%rcx,%rcx
-	addq	40(%rdi),%r8
-	adcq	48(%rdi),%r9
-	adcq	56(%rdi),%r10
-	adcq	64(%rdi),%r11
-	adcq	72(%rdi),%r12
-	adcq	80(%rdi),%r13
-	adcq	88(%rdi),%rcx
-	movq	%r8,40(%rdi)
-	movq	%r9,48(%rdi)
-	movq	%r10,56(%rdi)
-	movq	%r11,64(%rdi)
-	movq	%r12,72(%rdi)
-	movq	%r13,80(%rdi)
-	movq	%rcx,88(%rdi)
-	movq	96(%rdi),%r8
-	movq	104(%rdi),%r9
-	adcq	$0x0,%r8
-	adcq	$0x0,%r9
-	movq	%r8,96(%rdi)
-	movq	%r9,104(%rdi)
-
-
-	movq	32+0(%rdi),%r14
-	movq	0+L$p434p1(%rip),%rax
-	mulq	%r14
-	xorq	%r10,%r10
-	movq	%rax,%r8
-	movq	%rdx,%r9
-
-
-	movq	8+L$p434p1(%rip),%rax
-	mulq	%r14
-	xorq	%r11,%r11
-	addq	%rax,%r9
-	adcq	%rdx,%r10
-
-
-	movq	32+8(%rdi),%rcx
-	movq	0+L$p434p1(%rip),%rax
-	mulq	%rcx
-	addq	%rax,%r9
-	adcq	%rdx,%r10
-	adcq	$0x0,%r11
-
-
-	xorq	%r12,%r12
-	movq	16+L$p434p1(%rip),%rax
-	mulq	%r14
-	addq	%rax,%r10
-	adcq	%rdx,%r11
-	adcq	$0x0,%r12
-
-
-	movq	8+L$p434p1(%rip),%rax
-	mulq	%rcx
-	addq	%rax,%r10
-	adcq	%rdx,%r11
-	adcq	$0x0,%r12
-
-
-	movq	24+L$p434p1(%rip),%rax
-	mulq	%r14
-	xorq	%r13,%r13
-	addq	%rax,%r11
-	adcq	%rdx,%r12
-	adcq	$0x0,%r13
-
-
-	movq	16+L$p434p1(%rip),%rax
-	mulq	%rcx
-	addq	%rax,%r11
-	adcq	%rdx,%r12
-	adcq	$0x0,%r13
-
-
-	movq	24+L$p434p1(%rip),%rax
-	mulq	%rcx
-	addq	%rax,%r12
-	adcq	%rdx,%r13
-
-
-	xorq	%rcx,%rcx
-	addq	56(%rdi),%r8
-	adcq	64(%rdi),%r9
-	adcq	72(%rdi),%r10
-	adcq	80(%rdi),%r11
-	adcq	88(%rdi),%r12
-	adcq	96(%rdi),%r13
-	adcq	104(%rdi),%rcx
-	movq	%r8,0(%rsi)
-	movq	%r9,8(%rsi)
-	movq	%r10,72(%rdi)
-	movq	%r11,80(%rdi)
-	movq	%r12,88(%rdi)
-	movq	%r13,96(%rdi)
-	movq	%rcx,104(%rdi)
-
-	movq	48(%rdi),%r13
-
-	xorq	%r10,%r10
-	movq	0+L$p434p1(%rip),%rax
-	mulq	%r13
-	movq	%rax,%r8
-	movq	%rdx,%r9
-
-	xorq	%r11,%r11
-	movq	8+L$p434p1(%rip),%rax
-	mulq	%r13
-	addq	%rax,%r9
-	adcq	%rdx,%r10
-
-	xorq	%r12,%r12
-	movq	16+L$p434p1(%rip),%rax
-	mulq	%r13
-	addq	%rax,%r10
-	adcq	%rdx,%r11
-
-	movq	24+L$p434p1(%rip),%rax
-	mulq	%r13
-	addq	%rax,%r11
-	adcq	%rdx,%r12
-
-	addq	72(%rdi),%r8
-	adcq	80(%rdi),%r9
-	adcq	88(%rdi),%r10
-	adcq	96(%rdi),%r11
-	adcq	104(%rdi),%r12
-	movq	%r8,16(%rsi)
-	movq	%r9,24(%rsi)
-	movq	%r10,32(%rsi)
-	movq	%r11,40(%rsi)
-	movq	%r12,48(%rsi)
-
-
-	popq	%r15
-
-	popq	%r14
-
-	popq	%r13
-
-	popq	%r12
-
-	.byte	0xf3,0xc3
-
-L$mul_bdw:
-
-
-
-
-
-
-
-
-
-	movq	%rdx,%rcx
-	xorq	%rax,%rax
-
-
-	movq	0(%rdi),%r8
-	movq	8(%rdi),%r9
-	movq	16(%rdi),%r10
-	movq	24(%rdi),%r11
-
-	pushq	%rbx
-
-
-	pushq	%rbp
-
-
-	subq	$96,%rsp
-
-
-	addq	32(%rdi),%r8
-	adcq	40(%rdi),%r9
-	adcq	48(%rdi),%r10
-	adcq	$0x0,%r11
-	sbbq	$0x0,%rax
-	movq	%r8,0(%rsp)
-	movq	%r9,8(%rsp)
-	movq	%r10,16(%rsp)
-	movq	%r11,24(%rsp)
-
-
-	xorq	%rbx,%rbx
-	movq	0(%rsi),%r12
-	movq	8(%rsi),%r13
-	movq	16(%rsi),%r14
-	movq	24(%rsi),%r15
-	addq	32(%rsi),%r12
-	adcq	40(%rsi),%r13
-	adcq	48(%rsi),%r14
-	adcq	$0x0,%r15
-	sbbq	$0x0,%rbx
-	movq	%r12,32(%rsp)
-	movq	%r13,40(%rsp)
-	movq	%r14,48(%rsp)
-	movq	%r15,56(%rsp)
-
-
-	andq	%rax,%r12
-	andq	%rax,%r13
-	andq	%rax,%r14
-	andq	%rax,%r15
-
-
-	andq	%rbx,%r8
-	andq	%rbx,%r9
-	andq	%rbx,%r10
-	andq	%rbx,%r11
-
-
-	addq	%r12,%r8
-	adcq	%r13,%r9
-	adcq	%r14,%r10
-	adcq	%r15,%r11
-	movq	%r8,64(%rsp)
-	movq	%r9,72(%rsp)
-	movq	%r10,80(%rsp)
-	movq	%r11,88(%rsp)
-
-
-	movq	0+0(%rsp),%rdx
-	mulxq	32+0(%rsp),%r9,%r8
-	movq	%r9,0+0(%rsp)
-	mulxq	32+8(%rsp),%r10,%r9
-	xorq	%rax,%rax
-	adoxq	%r10,%r8
-	mulxq	32+16(%rsp),%r11,%r10
-	adoxq	%r11,%r9
-	mulxq	32+24(%rsp),%r12,%r11
-	adoxq	%r12,%r10
-
-	movq	0+8(%rsp),%rdx
-	mulxq	32+0(%rsp),%r12,%r13
-	adoxq	%rax,%r11
-	xorq	%rax,%rax
-	mulxq	32+8(%rsp),%r15,%r14
-	adoxq	%r8,%r12
-	movq	%r12,0+8(%rsp)
-	adcxq	%r15,%r13
-	mulxq	32+16(%rsp),%rbx,%r15
-	adcxq	%rbx,%r14
-	adoxq	%r9,%r13
-	mulxq	32+24(%rsp),%rbp,%rbx
-	adcxq	%rbp,%r15
-	adcxq	%rax,%rbx
-	adoxq	%r10,%r14
-
-	movq	0+16(%rsp),%rdx
-	mulxq	32+0(%rsp),%r8,%r9
-	adoxq	%r11,%r15
-	adoxq	%rax,%rbx
-	xorq	%rax,%rax
-	mulxq	32+8(%rsp),%r11,%r10
-	adoxq	%r13,%r8
-	movq	%r8,0+16(%rsp)
-	adcxq	%r11,%r9
-	mulxq	32+16(%rsp),%r12,%r11
-	adcxq	%r12,%r10
-	adoxq	%r14,%r9
-	mulxq	32+24(%rsp),%rbp,%r12
-	adcxq	%rbp,%r11
-	adcxq	%rax,%r12
-
-	adoxq	%r15,%r10
-	adoxq	%rbx,%r11
-	adoxq	%rax,%r12
-
-	movq	0+24(%rsp),%rdx
-	mulxq	32+0(%rsp),%r8,%r13
-	xorq	%rax,%rax
-	mulxq	32+8(%rsp),%r15,%r14
-	adcxq	%r15,%r13
-	adoxq	%r8,%r9
-	mulxq	32+16(%rsp),%rbx,%r15
-	adcxq	%rbx,%r14
-	adoxq	%r13,%r10
-	mulxq	32+24(%rsp),%rbp,%rbx
-	adcxq	%rbp,%r15
-	adcxq	%rax,%rbx
-	adoxq	%r14,%r11
-	adoxq	%r15,%r12
-	adoxq	%rax,%rbx
-	movq	%r9,0+24(%rsp)
-	movq	%r10,0+32(%rsp)
-	movq	%r11,0+40(%rsp)
-	movq	%r12,0+48(%rsp)
-	movq	%rbx,0+56(%rsp)
-
-
-
-	movq	0+0(%rdi),%rdx
-	mulxq	0+0(%rsi),%r9,%r8
-	movq	%r9,0+0(%rcx)
-	mulxq	0+8(%rsi),%r10,%r9
-	xorq	%rax,%rax
-	adoxq	%r10,%r8
-	mulxq	0+16(%rsi),%r11,%r10
-	adoxq	%r11,%r9
-	mulxq	0+24(%rsi),%r12,%r11
-	adoxq	%r12,%r10
-
-	movq	0+8(%rdi),%rdx
-	mulxq	0+0(%rsi),%r12,%r13
-	adoxq	%rax,%r11
-	xorq	%rax,%rax
-	mulxq	0+8(%rsi),%r15,%r14
-	adoxq	%r8,%r12
-	movq	%r12,0+8(%rcx)
-	adcxq	%r15,%r13
-	mulxq	0+16(%rsi),%rbx,%r15
-	adcxq	%rbx,%r14
-	adoxq	%r9,%r13
-	mulxq	0+24(%rsi),%rbp,%rbx
-	adcxq	%rbp,%r15
-	adcxq	%rax,%rbx
-	adoxq	%r10,%r14
-
-	movq	0+16(%rdi),%rdx
-	mulxq	0+0(%rsi),%r8,%r9
-	adoxq	%r11,%r15
-	adoxq	%rax,%rbx
-	xorq	%rax,%rax
-	mulxq	0+8(%rsi),%r11,%r10
-	adoxq	%r13,%r8
-	movq	%r8,0+16(%rcx)
-	adcxq	%r11,%r9
-	mulxq	0+16(%rsi),%r12,%r11
-	adcxq	%r12,%r10
-	adoxq	%r14,%r9
-	mulxq	0+24(%rsi),%rbp,%r12
-	adcxq	%rbp,%r11
-	adcxq	%rax,%r12
-
-	adoxq	%r15,%r10
-	adoxq	%rbx,%r11
-	adoxq	%rax,%r12
-
-	movq	0+24(%rdi),%rdx
-	mulxq	0+0(%rsi),%r8,%r13
-	xorq	%rax,%rax
-	mulxq	0+8(%rsi),%r15,%r14
-	adcxq	%r15,%r13
-	adoxq	%r8,%r9
-	mulxq	0+16(%rsi),%rbx,%r15
-	adcxq	%rbx,%r14
-	adoxq	%r13,%r10
-	mulxq	0+24(%rsi),%rbp,%rbx
-	adcxq	%rbp,%r15
-	adcxq	%rax,%rbx
-	adoxq	%r14,%r11
-	adoxq	%r15,%r12
-	adoxq	%rax,%rbx
-	movq	%r9,0+24(%rcx)
-	movq	%r10,0+32(%rcx)
-	movq	%r11,0+40(%rcx)
-	movq	%r12,0+48(%rcx)
-	movq	%rbx,0+56(%rcx)
-
-
-
-	movq	32+0(%rdi),%rdx
-	mulxq	32+0(%rsi),%r9,%r8
-	movq	%r9,64+0(%rcx)
-	mulxq	32+8(%rsi),%r10,%r9
-	xorq	%rax,%rax
-	adoxq	%r10,%r8
-	mulxq	32+16(%rsi),%r11,%r10
-	adoxq	%r11,%r9
-
-	movq	32+8(%rdi),%rdx
-	mulxq	32+0(%rsi),%r12,%r11
-	adoxq	%rax,%r10
-	xorq	%rax,%rax
-
-	mulxq	32+8(%rsi),%r14,%r13
-	adoxq	%r8,%r12
-	movq	%r12,64+8(%rcx)
-	adcxq	%r14,%r11
-
-	mulxq	32+16(%rsi),%r8,%r14
-	adoxq	%r9,%r11
-	adcxq	%r8,%r13
-	adcxq	%rax,%r14
-	adoxq	%r10,%r13
-
-	movq	32+16(%rdi),%rdx
-	mulxq	32+0(%rsi),%r8,%r9
-	adoxq	%rax,%r14
-	xorq	%rax,%rax
-
-	mulxq	32+8(%rsi),%r10,%r12
-	adoxq	%r11,%r8
-	movq	%r8,64+16(%rcx)
-	adcxq	%r13,%r9
-
-	mulxq	32+16(%rsi),%r11,%r8
-	adcxq	%r14,%r12
-	adcxq	%rax,%r8
-	adoxq	%r10,%r9
-	adoxq	%r12,%r11
-	adoxq	%rax,%r8
-	movq	%r9,64+24(%rcx)
-	movq	%r11,64+32(%rcx)
-	movq	%r8,64+40(%rcx)
-
-
-
-
-	movq	64(%rsp),%r8
-	movq	72(%rsp),%r9
-	movq	80(%rsp),%r10
-	movq	88(%rsp),%r11
-
-	movq	32(%rsp),%rax
-	addq	%rax,%r8
-	movq	40(%rsp),%rax
-	adcq	%rax,%r9
-	movq	48(%rsp),%rax
-	adcq	%rax,%r10
-	movq	56(%rsp),%rax
-	adcq	%rax,%r11
-
-
-	movq	0(%rsp),%r12
-	movq	8(%rsp),%r13
-	movq	16(%rsp),%r14
-	movq	24(%rsp),%r15
-	subq	0(%rcx),%r12
-	sbbq	8(%rcx),%r13
-	sbbq	16(%rcx),%r14
-	sbbq	24(%rcx),%r15
-	sbbq	32(%rcx),%r8
-	sbbq	40(%rcx),%r9
-	sbbq	48(%rcx),%r10
-	sbbq	56(%rcx),%r11
-
-
-	subq	64(%rcx),%r12
-	sbbq	72(%rcx),%r13
-	sbbq	80(%rcx),%r14
-	sbbq	88(%rcx),%r15
-	sbbq	96(%rcx),%r8
-	sbbq	104(%rcx),%r9
-	sbbq	$0x0,%r10
-	sbbq	$0x0,%r11
-
-	addq	32(%rcx),%r12
-	movq	%r12,32(%rcx)
-	adcq	40(%rcx),%r13
-	movq	%r13,40(%rcx)
-	adcq	48(%rcx),%r14
-	movq	%r14,48(%rcx)
-	adcq	56(%rcx),%r15
-	movq	%r15,56(%rcx)
-	adcq	64(%rcx),%r8
-	movq	%r8,64(%rcx)
-	adcq	72(%rcx),%r9
-	movq	%r9,72(%rcx)
-	adcq	80(%rcx),%r10
-	movq	%r10,80(%rcx)
-	adcq	88(%rcx),%r11
-	movq	%r11,88(%rcx)
-	movq	96(%rcx),%r12
-	adcq	$0x0,%r12
-	movq	%r12,96(%rcx)
-	movq	104(%rcx),%r13
-	adcq	$0x0,%r13
-	movq	%r13,104(%rcx)
-
-	addq	$96,%rsp
-
-	popq	%rbp
-
-
-	popq	%rbx
-
-
-
-
-	popq	%r15
-
-
-	popq	%r14
-
-
-	popq	%r13
-
-
-	popq	%r12
-
-
-	.byte	0xf3,0xc3
-
-
-.globl	_sike_mpmul
-.private_extern _sike_mpmul
-
-_sike_mpmul:
-
-	pushq	%r12
-
-
-	pushq	%r13
-
-
-	pushq	%r14
-
-
-	pushq	%r15
-
-
-
-
-
-	leaq	_OPENSSL_ia32cap_P(%rip),%rcx
-	movq	8(%rcx),%rcx
-	andl	$0x80100,%ecx
-	cmpl	$0x80100,%ecx
-	je	L$mul_bdw
-
-
-
-	movq	%rdx,%rcx
-
-	subq	$112,%rsp
-
-
-
-	xorq	%rax,%rax
-	movq	32(%rdi),%r8
-	movq	40(%rdi),%r9
-	movq	48(%rdi),%r10
-	xorq	%r11,%r11
-	addq	0(%rdi),%r8
-	adcq	8(%rdi),%r9
-	adcq	16(%rdi),%r10
-	adcq	24(%rdi),%r11
-
-	sbbq	$0,%rax
-	movq	%rax,64(%rsp)
-
-	movq	%r8,0(%rcx)
-	movq	%r9,8(%rcx)
-	movq	%r10,16(%rcx)
-	movq	%r11,24(%rcx)
-
-
-	xorq	%rdx,%rdx
-	movq	32(%rsi),%r12
-	movq	40(%rsi),%r13
-	movq	48(%rsi),%r14
-	xorq	%r15,%r15
-	addq	0(%rsi),%r12
-	adcq	8(%rsi),%r13
-	adcq	16(%rsi),%r14
-	adcq	24(%rsi),%r15
-	sbbq	$0x0,%rdx
-
-	movq	%rdx,72(%rsp)
-
-
-	movq	(%rcx),%rax
-	mulq	%r12
-	movq	%rax,(%rsp)
-	movq	%rdx,%r8
-
-	xorq	%r9,%r9
-	movq	(%rcx),%rax
-	mulq	%r13
-	addq	%rax,%r8
-	adcq	%rdx,%r9
-
-	xorq	%r10,%r10
-	movq	8(%rcx),%rax
-	mulq	%r12
-	addq	%rax,%r8
-	movq	%r8,8(%rsp)
-	adcq	%rdx,%r9
-	adcq	$0x0,%r10
-
-	xorq	%r8,%r8
-	movq	(%rcx),%rax
-	mulq	%r14
-	addq	%rax,%r9
-	adcq	%rdx,%r10
-	adcq	$0x0,%r8
-
-	movq	16(%rcx),%rax
-	mulq	%r12
-	addq	%rax,%r9
-	adcq	%rdx,%r10
-	adcq	$0x0,%r8
-
-	movq	8(%rcx),%rax
-	mulq	%r13
-	addq	%rax,%r9
-	movq	%r9,16(%rsp)
-	adcq	%rdx,%r10
-	adcq	$0x0,%r8
-
-	xorq	%r9,%r9
-	movq	(%rcx),%rax
-	mulq	%r15
-	addq	%rax,%r10
-	adcq	%rdx,%r8
-	adcq	$0x0,%r9
-
-	movq	24(%rcx),%rax
-	mulq	%r12
-	addq	%rax,%r10
-	adcq	%rdx,%r8
-	adcq	$0x0,%r9
-
-	movq	8(%rcx),%rax
-	mulq	%r14
-	addq	%rax,%r10
-	adcq	%rdx,%r8
-	adcq	$0x0,%r9
-
-	movq	16(%rcx),%rax
-	mulq	%r13
-	addq	%rax,%r10
-	movq	%r10,24(%rsp)
-	adcq	%rdx,%r8
-	adcq	$0x0,%r9
-
-	xorq	%r10,%r10
-	movq	8(%rcx),%rax
-	mulq	%r15
-	addq	%rax,%r8
-	adcq	%rdx,%r9
-	adcq	$0x0,%r10
-
-	movq	24(%rcx),%rax
-	mulq	%r13
-	addq	%rax,%r8
-	adcq	%rdx,%r9
-	adcq	$0x0,%r10
-
-	movq	16(%rcx),%rax
-	mulq	%r14
-	addq	%rax,%r8
-	movq	%r8,32(%rsp)
-	adcq	%rdx,%r9
-	adcq	$0x0,%r10
-
-	xorq	%r11,%r11
-	movq	16(%rcx),%rax
-	mulq	%r15
-	addq	%rax,%r9
-	adcq	%rdx,%r10
-	adcq	$0x0,%r11
-
-	movq	24(%rcx),%rax
-	mulq	%r14
-	addq	%rax,%r9
-	movq	%r9,40(%rsp)
-	adcq	%rdx,%r10
-	adcq	$0x0,%r11
-
-	movq	24(%rcx),%rax
-	mulq	%r15
-	addq	%rax,%r10
-	movq	%r10,48(%rsp)
-	adcq	%rdx,%r11
-	movq	%r11,56(%rsp)
-
-
-	movq	64(%rsp),%rax
-	andq	%rax,%r12
-	andq	%rax,%r13
-	andq	%rax,%r14
-	andq	%rax,%r15
-
-
-	movq	72(%rsp),%rax
-	movq	0(%rcx),%r8
-	andq	%rax,%r8
-	movq	8(%rcx),%r9
-	andq	%rax,%r9
-	movq	16(%rcx),%r10
-	andq	%rax,%r10
-	movq	24(%rcx),%r11
-	andq	%rax,%r11
-
-
-	addq	%r8,%r12
-	adcq	%r9,%r13
-	adcq	%r10,%r14
-	adcq	%r11,%r15
-
-
-	movq	32(%rsp),%rax
-	addq	%rax,%r12
-	movq	40(%rsp),%rax
-	adcq	%rax,%r13
-	movq	48(%rsp),%rax
-	adcq	%rax,%r14
-	movq	56(%rsp),%rax
-	adcq	%rax,%r15
-	movq	%r12,80(%rsp)
-	movq	%r13,88(%rsp)
-	movq	%r14,96(%rsp)
-	movq	%r15,104(%rsp)
-
-
-	movq	(%rdi),%r11
-	movq	(%rsi),%rax
-	mulq	%r11
-	xorq	%r9,%r9
-	movq	%rax,(%rcx)
-	movq	%rdx,%r8
-
-	movq	16(%rdi),%r14
-	movq	8(%rsi),%rax
-	mulq	%r11
-	xorq	%r10,%r10
-	addq	%rax,%r8
-	adcq	%rdx,%r9
-
-	movq	8(%rdi),%r12
-	movq	(%rsi),%rax
-	mulq	%r12
-	addq	%rax,%r8
-	movq	%r8,8(%rcx)
-	adcq	%rdx,%r9
-	adcq	$0x0,%r10
-
-	xorq	%r8,%r8
-	movq	16(%rsi),%rax
-	mulq	%r11
-	addq	%rax,%r9
-	adcq	%rdx,%r10
-	adcq	$0x0,%r8
-
-	movq	(%rsi),%r13
-	movq	%r14,%rax
-	mulq	%r13
-	addq	%rax,%r9
-	adcq	%rdx,%r10
-	adcq	$0x0,%r8
-
-	movq	8(%rsi),%rax
-	mulq	%r12
-	addq	%rax,%r9
-	movq	%r9,16(%rcx)
-	adcq	%rdx,%r10
-	adcq	$0x0,%r8
-
-	xorq	%r9,%r9
-	movq	24(%rsi),%rax
-	mulq	%r11
-	movq	24(%rdi),%r15
-	addq	%rax,%r10
-	adcq	%rdx,%r8
-	adcq	$0x0,%r9
-
-	movq	%r15,%rax
-	mulq	%r13
-	addq	%rax,%r10
-	adcq	%rdx,%r8
-	adcq	$0x0,%r9
-
-	movq	16(%rsi),%rax
-	mulq	%r12
-	addq	%rax,%r10
-	adcq	%rdx,%r8
-	adcq	$0x0,%r9
-
-	movq	8(%rsi),%rax
-	mulq	%r14
-	addq	%rax,%r10
-	movq	%r10,24(%rcx)
-	adcq	%rdx,%r8
-	adcq	$0x0,%r9
-
-	xorq	%r10,%r10
-	movq	24(%rsi),%rax
-	mulq	%r12
-	addq	%rax,%r8
-	adcq	%rdx,%r9
-	adcq	$0x0,%r10
-
-	movq	8(%rsi),%rax
-	mulq	%r15
-	addq	%rax,%r8
-	adcq	%rdx,%r9
-	adcq	$0x0,%r10
-
-	movq	16(%rsi),%rax
-	mulq	%r14
-	addq	%rax,%r8
-	movq	%r8,32(%rcx)
-	adcq	%rdx,%r9
-	adcq	$0x0,%r10
-
-	xorq	%r8,%r8
-	movq	24(%rsi),%rax
-	mulq	%r14
-	addq	%rax,%r9
-	adcq	%rdx,%r10
-	adcq	$0x0,%r8
-
-	movq	16(%rsi),%rax
-	mulq	%r15
-	addq	%rax,%r9
-	movq	%r9,40(%rcx)
-	adcq	%rdx,%r10
-	adcq	$0x0,%r8
-
-	movq	24(%rsi),%rax
-	mulq	%r15
-	addq	%rax,%r10
-	movq	%r10,48(%rcx)
-	adcq	%rdx,%r8
-	movq	%r8,56(%rcx)
-
-
-
-	movq	32(%rdi),%r11
-	movq	32(%rsi),%rax
-	mulq	%r11
-	xorq	%r9,%r9
-	movq	%rax,64(%rcx)
-	movq	%rdx,%r8
-
-	movq	48(%rdi),%r14
-	movq	40(%rsi),%rax
-	mulq	%r11
-	xorq	%r10,%r10
-	addq	%rax,%r8
-	adcq	%rdx,%r9
-
-	movq	40(%rdi),%r12
-	movq	32(%rsi),%rax
-	mulq	%r12
-	addq	%rax,%r8
-	movq	%r8,72(%rcx)
-	adcq	%rdx,%r9
-	adcq	$0x0,%r10
-
-	xorq	%r8,%r8
-	movq	48(%rsi),%rax
-	mulq	%r11
-	addq	%rax,%r9
-	adcq	%rdx,%r10
-	adcq	$0x0,%r8
-
-	movq	32(%rsi),%r13
-	movq	%r14,%rax
-	mulq	%r13
-	addq	%rax,%r9
-	adcq	%rdx,%r10
-	adcq	$0x0,%r8
-
-	movq	40(%rsi),%rax
-	mulq	%r12
-	addq	%rax,%r9
-	movq	%r9,80(%rcx)
-	adcq	%rdx,%r10
-	adcq	$0x0,%r8
-
-	movq	48(%rsi),%rax
-	mulq	%r12
-	xorq	%r12,%r12
-	addq	%rax,%r10
-	adcq	%rdx,%r8
-	adcq	$0x0,%r12
-
-	movq	40(%rsi),%rax
-	mulq	%r14
-	addq	%rax,%r10
-	adcq	%rdx,%r8
-	adcq	$0x0,%r12
-	movq	%r10,88(%rcx)
-
-	movq	48(%rsi),%rax
-	mulq	%r14
-	addq	%rax,%r8
-	adcq	$0x0,%r12
-	movq	%r8,96(%rcx)
-
-	addq	%r12,%rdx
-
-
-	movq	0(%rsp),%r8
-	subq	0(%rcx),%r8
-	movq	8(%rsp),%r9
-	sbbq	8(%rcx),%r9
-	movq	16(%rsp),%r10
-	sbbq	16(%rcx),%r10
-	movq	24(%rsp),%r11
-	sbbq	24(%rcx),%r11
-	movq	80(%rsp),%r12
-	sbbq	32(%rcx),%r12
-	movq	88(%rsp),%r13
-	sbbq	40(%rcx),%r13
-	movq	96(%rsp),%r14
-	sbbq	48(%rcx),%r14
-	movq	104(%rsp),%r15
-	sbbq	56(%rcx),%r15
-
-
-	movq	64(%rcx),%rax
-	subq	%rax,%r8
-	movq	72(%rcx),%rax
-	sbbq	%rax,%r9
-	movq	80(%rcx),%rax
-	sbbq	%rax,%r10
-	movq	88(%rcx),%rax
-	sbbq	%rax,%r11
-	movq	96(%rcx),%rax
-	sbbq	%rax,%r12
-	sbbq	%rdx,%r13
-	sbbq	$0x0,%r14
-	sbbq	$0x0,%r15
-
-
-	addq	32(%rcx),%r8
-	movq	%r8,32(%rcx)
-	adcq	40(%rcx),%r9
-	movq	%r9,40(%rcx)
-	adcq	48(%rcx),%r10
-	movq	%r10,48(%rcx)
-	adcq	56(%rcx),%r11
-	movq	%r11,56(%rcx)
-	adcq	64(%rcx),%r12
-	movq	%r12,64(%rcx)
-	adcq	72(%rcx),%r13
-	movq	%r13,72(%rcx)
-	adcq	80(%rcx),%r14
-	movq	%r14,80(%rcx)
-	adcq	88(%rcx),%r15
-	movq	%r15,88(%rcx)
-	movq	96(%rcx),%r12
-	adcq	$0x0,%r12
-	movq	%r12,96(%rcx)
-	adcq	$0x0,%rdx
-	movq	%rdx,104(%rcx)
-
-	addq	$112,%rsp
-
-
-
-	popq	%r15
-
-	popq	%r14
-
-	popq	%r13
-
-	popq	%r12
-
-	.byte	0xf3,0xc3
-
-#endif
diff --git a/sources.bp b/sources.bp
index 92be0c8..3bbcce5 100644
--- a/sources.bp
+++ b/sources.bp
@@ -112,15 +112,12 @@
         "src/crypto/evp/p_ed25519_asn1.c",
         "src/crypto/evp/p_rsa.c",
         "src/crypto/evp/p_rsa_asn1.c",
-        "src/crypto/evp/p_x25519.c",
-        "src/crypto/evp/p_x25519_asn1.c",
         "src/crypto/evp/pbkdf.c",
         "src/crypto/evp/print.c",
         "src/crypto/evp/scrypt.c",
         "src/crypto/evp/sign.c",
         "src/crypto/ex_data.c",
         "src/crypto/fipsmodule/bcm.c",
-        "src/crypto/fipsmodule/fips_shared_support.c",
         "src/crypto/fipsmodule/is_fips.c",
         "src/crypto/hkdf/hkdf.c",
         "src/crypto/hrss/hrss.c",
@@ -155,7 +152,6 @@
         "src/crypto/refcount_lock.c",
         "src/crypto/rsa_extra/rsa_asn1.c",
         "src/crypto/rsa_extra/rsa_print.c",
-        "src/crypto/siphash/siphash.c",
         "src/crypto/stack/stack.c",
         "src/crypto/thread.c",
         "src/crypto/thread_none.c",
@@ -244,11 +240,6 @@
         "src/crypto/x509v3/v3_sxnet.c",
         "src/crypto/x509v3/v3_utl.c",
         "src/third_party/fiat/curve25519.c",
-        "src/third_party/sike/asm/fp_generic.c",
-        "src/third_party/sike/curve_params.c",
-        "src/third_party/sike/fpx.c",
-        "src/third_party/sike/isogeny.c",
-        "src/third_party/sike/sike.c",
     ],
     target: {
         linux_arm64: {
@@ -263,7 +254,6 @@
                 "linux-aarch64/crypto/fipsmodule/sha512-armv8.S",
                 "linux-aarch64/crypto/fipsmodule/vpaes-armv8.S",
                 "linux-aarch64/crypto/test/trampoline-armv8.S",
-                "linux-aarch64/crypto/third_party/sike/asm/fp-armv8.S",
             ],
         },
         linux_arm: {
@@ -323,7 +313,6 @@
                 "linux-x86_64/crypto/fipsmodule/x86_64-mont.S",
                 "linux-x86_64/crypto/fipsmodule/x86_64-mont5.S",
                 "linux-x86_64/crypto/test/trampoline-x86_64.S",
-                "linux-x86_64/crypto/third_party/sike/asm/fp-x86_64.S",
                 "src/crypto/hrss/asm/poly_rq_mul.S",
             ],
         },
@@ -457,7 +446,6 @@
         "src/crypto/refcount_test.cc",
         "src/crypto/rsa_extra/rsa_test.cc",
         "src/crypto/self_test.cc",
-        "src/crypto/siphash/siphash_test.cc",
         "src/crypto/stack/stack_test.cc",
         "src/crypto/test/abi_test.cc",
         "src/crypto/test/file_test_gtest.cc",
@@ -476,7 +464,6 @@
         "src/crypto/test/abi_test.cc",
         "src/crypto/test/gtest_main.cc",
         "src/ssl/span_test.cc",
-        "src/ssl/ssl_c_test.c",
         "src/ssl/ssl_test.cc",
     ],
 }
diff --git a/sources.mk b/sources.mk
index f52c998..6bb1770 100644
--- a/sources.mk
+++ b/sources.mk
@@ -110,15 +110,12 @@
   src/crypto/evp/p_ed25519_asn1.c\
   src/crypto/evp/p_rsa.c\
   src/crypto/evp/p_rsa_asn1.c\
-  src/crypto/evp/p_x25519.c\
-  src/crypto/evp/p_x25519_asn1.c\
   src/crypto/evp/pbkdf.c\
   src/crypto/evp/print.c\
   src/crypto/evp/scrypt.c\
   src/crypto/evp/sign.c\
   src/crypto/ex_data.c\
   src/crypto/fipsmodule/bcm.c\
-  src/crypto/fipsmodule/fips_shared_support.c\
   src/crypto/fipsmodule/is_fips.c\
   src/crypto/hkdf/hkdf.c\
   src/crypto/hrss/hrss.c\
@@ -153,7 +150,6 @@
   src/crypto/refcount_lock.c\
   src/crypto/rsa_extra/rsa_asn1.c\
   src/crypto/rsa_extra/rsa_print.c\
-  src/crypto/siphash/siphash.c\
   src/crypto/stack/stack.c\
   src/crypto/thread.c\
   src/crypto/thread_none.c\
@@ -242,11 +238,6 @@
   src/crypto/x509v3/v3_sxnet.c\
   src/crypto/x509v3/v3_utl.c\
   src/third_party/fiat/curve25519.c\
-  src/third_party/sike/asm/fp_generic.c\
-  src/third_party/sike/curve_params.c\
-  src/third_party/sike/fpx.c\
-  src/third_party/sike/isogeny.c\
-  src/third_party/sike/sike.c\
 
 linux_aarch64_sources := \
   linux-aarch64/crypto/chacha/chacha-armv8.S\
@@ -259,7 +250,6 @@
   linux-aarch64/crypto/fipsmodule/sha512-armv8.S\
   linux-aarch64/crypto/fipsmodule/vpaes-armv8.S\
   linux-aarch64/crypto/test/trampoline-armv8.S\
-  linux-aarch64/crypto/third_party/sike/asm/fp-armv8.S\
 
 linux_arm_sources := \
   linux-arm/crypto/chacha/chacha-armv4.S\
@@ -317,6 +307,5 @@
   linux-x86_64/crypto/fipsmodule/x86_64-mont.S\
   linux-x86_64/crypto/fipsmodule/x86_64-mont5.S\
   linux-x86_64/crypto/test/trampoline-x86_64.S\
-  linux-x86_64/crypto/third_party/sike/asm/fp-x86_64.S\
   src/crypto/hrss/asm/poly_rq_mul.S\
 
diff --git a/src/.gitignore b/src/.gitignore
index 366feb7..41e32b9 100644
--- a/src/.gitignore
+++ b/src/.gitignore
@@ -7,7 +7,7 @@
 doc/doc.css
 
 util/bot/android_ndk
-util/bot/android_sdk/public
+util/bot/android_tools
 util/bot/cmake-linux64
 util/bot/cmake-linux64.tar.gz
 util/bot/cmake-mac
diff --git a/src/BUILDING.md b/src/BUILDING.md
index e3a3570..4fc1615 100644
--- a/src/BUILDING.md
+++ b/src/BUILDING.md
@@ -10,7 +10,8 @@
 [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.0 or later is required.
+  * [CMake](https://cmake.org/download/) 2.8.12 or later is required. Note we
+    will begin requiring CMake 3.0 in 2019.
 
   * A recent version of Perl is required. On Windows,
     [Active State Perl](http://www.activestate.com/activeperl/) has been
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index c3992a9..4cfbcc5 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -1,4 +1,10 @@
-cmake_minimum_required(VERSION 3.0)
+cmake_minimum_required(VERSION 2.8.11)
+
+# Report AppleClang separately from Clang. Their version numbers are different.
+# https://cmake.org/cmake/help/v3.0/policy/CMP0025.html
+if(POLICY CMP0025)
+  cmake_policy(SET CMP0025 NEW)
+endif()
 
 # Defer enabling C and CXX languages.
 project(BoringSSL NONE)
@@ -363,13 +369,9 @@
   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.
+  # Delocate 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()
+    set(FIPS_DELOCATE "1")
   endif()
 endif()
 
@@ -479,6 +481,13 @@
   set(CMAKE_ASM_FLAGS "-march=${CMAKE_SYSTEM_PROCESSOR} ${CMAKE_ASM_FLAGS}")
 endif()
 
+if(${ARCH} STREQUAL "x86" AND APPLE AND ${CMAKE_VERSION} VERSION_LESS "3.0")
+  # With CMake 2.8.x, ${CMAKE_SYSTEM_PROCESSOR} evalutes to i386 on OS X,
+  # but clang defaults to 64-bit builds on OS X unless otherwise told.
+  # Set ARCH to x86_64 so clang and CMake agree. This is fixed in CMake 3.
+  set(ARCH "x86_64")
+endif()
+
 if(USE_CUSTOM_LIBCXX)
   if(NOT CLANG)
     message(FATAL_ERROR "USE_CUSTOM_LIBCXX only supported with Clang")
@@ -557,9 +566,8 @@
 add_subdirectory(crypto)
 add_subdirectory(ssl)
 add_subdirectory(ssl/test)
+add_subdirectory(fipstools)
 add_subdirectory(tool)
-add_subdirectory(util/fipstools/cavp)
-add_subdirectory(util/fipstools/acvp/modulewrapper)
 add_subdirectory(decrepit)
 
 if(FUZZ)
diff --git a/src/LICENSE b/src/LICENSE
index 2f4dfcd..49c41fa 100644
--- a/src/LICENSE
+++ b/src/LICENSE
@@ -181,29 +181,6 @@
 SOFTWARE.
 
 
-The code in third_party/sike also carries the MIT license:
-
-Copyright (c) Microsoft Corporation. All rights reserved.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE
-
-
 Licenses for support code
 -------------------------
 
diff --git a/src/README.md b/src/README.md
index 5d116c0..4595e8e 100644
--- a/src/README.md
+++ b/src/README.md
@@ -21,13 +21,6 @@
 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)
-  * [Bug tracker](https://bugs.chromium.org/p/boringssl/issues/list)
-  * [CI](https://ci.chromium.org/p/boringssl/g/main/console)
-  * [Code review](https://boringssl-review.googlesource.com)
-
 There are other files in this directory which might be helpful:
 
   * [PORTING.md](/PORTING.md): how to port OpenSSL-using code to BoringSSL.
diff --git a/src/crypto/CMakeLists.txt b/src/crypto/CMakeLists.txt
index 477faae..5cdfa40 100644
--- a/src/crypto/CMakeLists.txt
+++ b/src/crypto/CMakeLists.txt
@@ -87,7 +87,7 @@
 add_subdirectory(fipsmodule)
 add_subdirectory(test)
 
-if(FIPS_DELOCATE OR FIPS_SHARED)
+if(FIPS_DELOCATE)
   SET_SOURCE_FILES_PROPERTIES(fipsmodule/bcm.o PROPERTIES EXTERNAL_OBJECT true)
   SET_SOURCE_FILES_PROPERTIES(fipsmodule/bcm.o PROPERTIES GENERATED true)
 
@@ -115,7 +115,6 @@
 
     chacha/chacha-armv8.${ASM_EXT}
     test/trampoline-armv8.${ASM_EXT}
-    third_party/sike/asm/fp-armv8.${ASM_EXT}
   )
 endif()
 
@@ -137,7 +136,6 @@
     cipher_extra/chacha20_poly1305_x86_64.${ASM_EXT}
     hrss/asm/poly_rq_mul.S
     test/trampoline-x86_64.${ASM_EXT}
-    third_party/sike/asm/fp-x86_64.${ASM_EXT}
   )
 endif()
 
@@ -147,8 +145,6 @@
 perlasm(chacha/chacha-x86_64.${ASM_EXT} chacha/asm/chacha-x86_64.pl)
 perlasm(cipher_extra/aes128gcmsiv-x86_64.${ASM_EXT} cipher_extra/asm/aes128gcmsiv-x86_64.pl)
 perlasm(cipher_extra/chacha20_poly1305_x86_64.${ASM_EXT} cipher_extra/asm/chacha20_poly1305_x86_64.pl)
-perlasm(third_party/sike/asm/fp-x86_64.${ASM_EXT} ../third_party/sike/asm/fp-x86_64.pl)
-perlasm(third_party/sike/asm/fp-armv8.${ASM_EXT} ../third_party/sike/asm/fp-armv8.pl)
 perlasm(test/trampoline-armv4.${ASM_EXT} test/asm/trampoline-armv4.pl)
 perlasm(test/trampoline-armv8.${ASM_EXT} test/asm/trampoline-armv8.pl)
 perlasm(test/trampoline-x86.${ASM_EXT} test/asm/trampoline-x86.pl)
@@ -282,8 +278,6 @@
   evp/p_ed25519_asn1.c
   evp/p_rsa.c
   evp/p_rsa_asn1.c
-  evp/p_x25519.c
-  evp/p_x25519_asn1.c
   evp/pbkdf.c
   evp/print.c
   evp/scrypt.c
@@ -323,7 +317,6 @@
   rsa_extra/rsa_asn1.c
   rsa_extra/rsa_print.c
   stack/stack.c
-  siphash/siphash.c
   thread.c
   thread_none.c
   thread_pthread.c
@@ -411,11 +404,6 @@
   x509v3/v3_sxnet.c
   x509v3/v3_utl.c
   ../third_party/fiat/curve25519.c
-  ../third_party/sike/fpx.c
-  ../third_party/sike/isogeny.c
-  ../third_party/sike/curve_params.c
-  ../third_party/sike/sike.c
-  ../third_party/sike/asm/fp_generic.c
 
   $<TARGET_OBJECTS:fipsmodule>
 
@@ -423,25 +411,9 @@
   ${CRYPTO_FIPS_OBJECTS}
 )
 
-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 global_target)
 
-if(FIPS_DELOCATE OR FIPS_SHARED)
+if(FIPS_DELOCATE)
   add_dependencies(crypto bcm_o_target)
 endif()
 
@@ -511,14 +483,12 @@
   rsa_extra/rsa_test.cc
   self_test.cc
   stack/stack_test.cc
-  siphash/siphash_test.cc
   test/file_test_gtest.cc
   thread_test.cc
   x509/x509_test.cc
   x509/x509_time_test.cc
   x509v3/tab_test.cc
   x509v3/v3name_test.cc
-  ../third_party/sike/sike_test.cc
 
   $<TARGET_OBJECTS:crypto_test_data>
   $<TARGET_OBJECTS:boringssl_gtest_main>
diff --git a/src/crypto/base64/base64_test.cc b/src/crypto/base64/base64_test.cc
index 6905659..9122dee 100644
--- a/src/crypto/base64/base64_test.cc
+++ b/src/crypto/base64/base64_test.cc
@@ -39,14 +39,14 @@
   invalid,
 };
 
-struct Base64TestVector {
+struct TestVector {
   enum encoding_relation relation;
   const char *decoded;
   const char *encoded;
 };
 
 // Test vectors from RFC 4648.
-static const Base64TestVector kTestVectors[] = {
+static const TestVector kTestVectors[] = {
     {canonical, "", ""},
     {canonical, "f", "Zg==\n"},
     {canonical, "fo", "Zm8=\n"},
@@ -103,7 +103,7 @@
      "=======\n"},
 };
 
-class Base64Test : public testing::TestWithParam<Base64TestVector> {};
+class Base64Test : public testing::TestWithParam<TestVector> {};
 
 INSTANTIATE_TEST_SUITE_P(, Base64Test, testing::ValuesIn(kTestVectors));
 
@@ -122,7 +122,7 @@
 }
 
 TEST_P(Base64Test, EncodeBlock) {
-  const Base64TestVector &t = GetParam();
+  const TestVector &t = GetParam();
   if (t.relation != canonical) {
     return;
   }
@@ -140,7 +140,7 @@
 }
 
 TEST_P(Base64Test, DecodeBase64) {
-  const Base64TestVector &t = GetParam();
+  const TestVector &t = GetParam();
   if (t.relation == valid) {
     // The non-canonical encodings will generally have odd whitespace etc
     // that |EVP_DecodeBase64| will reject.
@@ -164,7 +164,7 @@
 }
 
 TEST_P(Base64Test, DecodeBlock) {
-  const Base64TestVector &t = GetParam();
+  const TestVector &t = GetParam();
   if (t.relation != canonical) {
     return;
   }
@@ -188,7 +188,7 @@
 }
 
 TEST_P(Base64Test, EncodeDecode) {
-  const Base64TestVector &t = GetParam();
+  const TestVector &t = GetParam();
 
   EVP_ENCODE_CTX ctx;
   const size_t decoded_len = strlen(t.decoded);
@@ -246,7 +246,7 @@
 }
 
 TEST_P(Base64Test, DecodeUpdateStreaming) {
-  const Base64TestVector &t = GetParam();
+  const TestVector &t = GetParam();
   if (t.relation == invalid) {
     return;
   }
diff --git a/src/crypto/chacha/asm/chacha-armv4.pl b/src/crypto/chacha/asm/chacha-armv4.pl
index 06be3a6..2a9a7d7 100755
--- a/src/crypto/chacha/asm/chacha-armv4.pl
+++ b/src/crypto/chacha/asm/chacha-armv4.pl
@@ -1161,4 +1161,4 @@
 
 	print $_,"\n";
 }
-close STDOUT or die "error closing STDOUT";
+close STDOUT;
diff --git a/src/crypto/chacha/asm/chacha-armv8.pl b/src/crypto/chacha/asm/chacha-armv8.pl
index 02325e7..7795f2c 100755
--- a/src/crypto/chacha/asm/chacha-armv8.pl
+++ b/src/crypto/chacha/asm/chacha-armv8.pl
@@ -1134,4 +1134,4 @@
 
 	print $_,"\n";
 }
-close STDOUT or die "error closing STDOUT";	# flush
+close STDOUT;	# flush
diff --git a/src/crypto/chacha/asm/chacha-x86.pl b/src/crypto/chacha/asm/chacha-x86.pl
index ec1cf80..1d6a4e2 100755
--- a/src/crypto/chacha/asm/chacha-x86.pl
+++ b/src/crypto/chacha/asm/chacha-x86.pl
@@ -769,4 +769,4 @@
 
 &asm_finish();
 
-close STDOUT or die "error closing STDOUT";
+close STDOUT;
diff --git a/src/crypto/chacha/asm/chacha-x86_64.pl b/src/crypto/chacha/asm/chacha-x86_64.pl
index ab8a1f7..6be270e 100755
--- a/src/crypto/chacha/asm/chacha-x86_64.pl
+++ b/src/crypto/chacha/asm/chacha-x86_64.pl
@@ -2782,4 +2782,4 @@
 	print $_,"\n";
 }
 
-close STDOUT or die "error closing STDOUT";
+close STDOUT;
diff --git a/src/crypto/cipher_extra/asm/aes128gcmsiv-x86_64.pl b/src/crypto/cipher_extra/asm/aes128gcmsiv-x86_64.pl
index 54f0b5c..1a3d064 100644
--- a/src/crypto/cipher_extra/asm/aes128gcmsiv-x86_64.pl
+++ b/src/crypto/cipher_extra/asm/aes128gcmsiv-x86_64.pl
@@ -2253,4 +2253,4 @@
 
 print $code;
 
-close STDOUT or die "error closing STDOUT";
+close STDOUT;
diff --git a/src/crypto/cipher_extra/asm/chacha20_poly1305_x86_64.pl b/src/crypto/cipher_extra/asm/chacha20_poly1305_x86_64.pl
index 5b2b977..0e32279 100644
--- a/src/crypto/cipher_extra/asm/chacha20_poly1305_x86_64.pl
+++ b/src/crypto/cipher_extra/asm/chacha20_poly1305_x86_64.pl
@@ -2485,4 +2485,4 @@
 ___
 }
 
-close STDOUT or die "error closing STDOUT";
+close STDOUT;
diff --git a/src/crypto/cipher_extra/e_aesccm.c b/src/crypto/cipher_extra/e_aesccm.c
index e9e9e16..3e18659 100644
--- a/src/crypto/cipher_extra/e_aesccm.c
+++ b/src/crypto/cipher_extra/e_aesccm.c
@@ -1,56 +1,21 @@
-/* ====================================================================
- * Copyright (c) 2008 The OpenSSL Project.  All rights reserved.
+/* Copyright (c) 2018, Google Inc.
  *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
  *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. All advertising materials mentioning features or use of this
- *    software must display the following acknowledgment:
- *    "This product includes software developed by the OpenSSL Project
- *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
- *
- * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
- *    endorse or promote products derived from this software without
- *    prior written permission. For written permission, please contact
- *    openssl-core@openssl.org.
- *
- * 5. Products derived from this software may not be called "OpenSSL"
- *    nor may "OpenSSL" appear in their names without prior written
- *    permission of the OpenSSL Project.
- *
- * 6. Redistributions of any form whatsoever must retain the following
- *    acknowledgment:
- *    "This product includes software developed by the OpenSSL Project
- *    for use in the OpenSSL Toolkit (http://www.openssl.org/)"
- *
- * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
- * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
- * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
- * OF THE POSSIBILITY OF SUCH DAMAGE.
- * ==================================================================== */
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
+ * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
 
 #include <openssl/aead.h>
 
 #include <assert.h>
 
-#include <openssl/cpu.h>
 #include <openssl/cipher.h>
 #include <openssl/err.h>
 #include <openssl/mem.h>
@@ -58,213 +23,6 @@
 #include "../fipsmodule/cipher/internal.h"
 
 
-struct ccm128_context {
-  block128_f block;
-  ctr128_f ctr;
-  unsigned M, L;
-};
-
-struct ccm128_state {
-  union {
-    uint64_t u[2];
-    uint8_t c[16];
-  } nonce, cmac;
-};
-
-static int CRYPTO_ccm128_init(struct ccm128_context *ctx, const AES_KEY *key,
-                              block128_f block, ctr128_f ctr, unsigned M,
-                              unsigned L) {
-  if (M < 4 || M > 16 || (M & 1) != 0 || L < 2 || L > 8) {
-    return 0;
-  }
-  ctx->block = block;
-  ctx->ctr = ctr;
-  ctx->M = M;
-  ctx->L = L;
-  return 1;
-}
-
-static size_t CRYPTO_ccm128_max_input(const struct ccm128_context *ctx) {
-  return ctx->L >= sizeof(size_t) ? (size_t)-1
-                                  : (((size_t)1) << (ctx->L * 8)) - 1;
-}
-
-static int ccm128_init_state(const struct ccm128_context *ctx,
-                             struct ccm128_state *state, const AES_KEY *key,
-                             const uint8_t *nonce, size_t nonce_len,
-                             const uint8_t *aad, size_t aad_len,
-                             size_t plaintext_len) {
-  const block128_f block = ctx->block;
-  const unsigned M = ctx->M;
-  const unsigned L = ctx->L;
-
-  // |L| determines the expected |nonce_len| and the limit for |plaintext_len|.
-  if (plaintext_len > CRYPTO_ccm128_max_input(ctx) ||
-      nonce_len != 15 - L) {
-    return 0;
-  }
-
-  // Assemble the first block for computing the MAC.
-  OPENSSL_memset(state, 0, sizeof(*state));
-  state->nonce.c[0] = (uint8_t)((L - 1) | ((M - 2) / 2) << 3);
-  if (aad_len != 0) {
-    state->nonce.c[0] |= 0x40;  // Set AAD Flag
-  }
-  OPENSSL_memcpy(&state->nonce.c[1], nonce, nonce_len);
-  for (unsigned i = 0; i < L; i++) {
-    state->nonce.c[15 - i] = (uint8_t)(plaintext_len >> (8 * i));
-  }
-
-  (*block)(state->nonce.c, state->cmac.c, key);
-  size_t blocks = 1;
-
-  if (aad_len != 0) {
-    unsigned i;
-    // Cast to u64 to avoid the compiler complaining about invalid shifts.
-    uint64_t aad_len_u64 = aad_len;
-    if (aad_len_u64 < 0x10000 - 0x100) {
-      state->cmac.c[0] ^= (uint8_t)(aad_len_u64 >> 8);
-      state->cmac.c[1] ^= (uint8_t)aad_len_u64;
-      i = 2;
-    } else if (aad_len_u64 <= 0xffffffff) {
-      state->cmac.c[0] ^= 0xff;
-      state->cmac.c[1] ^= 0xfe;
-      state->cmac.c[2] ^= (uint8_t)(aad_len_u64 >> 24);
-      state->cmac.c[3] ^= (uint8_t)(aad_len_u64 >> 16);
-      state->cmac.c[4] ^= (uint8_t)(aad_len_u64 >> 8);
-      state->cmac.c[5] ^= (uint8_t)aad_len_u64;
-      i = 6;
-    } else {
-      state->cmac.c[0] ^= 0xff;
-      state->cmac.c[1] ^= 0xff;
-      state->cmac.c[2] ^= (uint8_t)(aad_len_u64 >> 56);
-      state->cmac.c[3] ^= (uint8_t)(aad_len_u64 >> 48);
-      state->cmac.c[4] ^= (uint8_t)(aad_len_u64 >> 40);
-      state->cmac.c[5] ^= (uint8_t)(aad_len_u64 >> 32);
-      state->cmac.c[6] ^= (uint8_t)(aad_len_u64 >> 24);
-      state->cmac.c[7] ^= (uint8_t)(aad_len_u64 >> 16);
-      state->cmac.c[8] ^= (uint8_t)(aad_len_u64 >> 8);
-      state->cmac.c[9] ^= (uint8_t)aad_len_u64;
-      i = 10;
-    }
-
-    do {
-      for (; i < 16 && aad_len != 0; i++) {
-        state->cmac.c[i] ^= *aad;
-        aad++;
-        aad_len--;
-      }
-      (*block)(state->cmac.c, state->cmac.c, key);
-      blocks++;
-      i = 0;
-    } while (aad_len != 0);
-  }
-
-  // Per RFC 3610, section 2.6, the total number of block cipher operations done
-  // must not exceed 2^61. There are two block cipher operations remaining per
-  // message block, plus one block at the end to encrypt the MAC.
-  size_t remaining_blocks = 2 * ((plaintext_len + 15) / 16) + 1;
-  if (plaintext_len + 15 < plaintext_len ||
-      remaining_blocks + blocks < blocks ||
-      (uint64_t) remaining_blocks + blocks > UINT64_C(1) << 61) {
-    return 0;
-  }
-
-  // Assemble the first block for encrypting and decrypting. The bottom |L|
-  // bytes are replaced with a counter and all bit the encoding of |L| is
-  // cleared in the first byte.
-  state->nonce.c[0] &= 7;
-  return 1;
-}
-
-static int ccm128_encrypt(const struct ccm128_context *ctx,
-                          struct ccm128_state *state, const AES_KEY *key,
-                          uint8_t *out, const uint8_t *in, size_t len) {
-  // The counter for encryption begins at one.
-  for (unsigned i = 0; i < ctx->L; i++) {
-    state->nonce.c[15 - i] = 0;
-  }
-  state->nonce.c[15] = 1;
-
-  uint8_t partial_buf[16];
-  unsigned num = 0;
-  if (ctx->ctr != NULL) {
-    CRYPTO_ctr128_encrypt_ctr32(in, out, len, key, state->nonce.c, partial_buf,
-                                &num, ctx->ctr);
-  } else {
-    CRYPTO_ctr128_encrypt(in, out, len, key, state->nonce.c, partial_buf, &num,
-                          ctx->block);
-  }
-  return 1;
-}
-
-static int ccm128_compute_mac(const struct ccm128_context *ctx,
-                              struct ccm128_state *state, const AES_KEY *key,
-                              uint8_t *out_tag, size_t tag_len,
-                              const uint8_t *in, size_t len) {
-  block128_f block = ctx->block;
-  if (tag_len != ctx->M) {
-    return 0;
-  }
-
-  // Incorporate |in| into the MAC.
-  union {
-    uint64_t u[2];
-    uint8_t c[16];
-  } tmp;
-  while (len >= 16) {
-    OPENSSL_memcpy(tmp.c, in, 16);
-    state->cmac.u[0] ^= tmp.u[0];
-    state->cmac.u[1] ^= tmp.u[1];
-    (*block)(state->cmac.c, state->cmac.c, key);
-    in += 16;
-    len -= 16;
-  }
-  if (len > 0) {
-    for (size_t i = 0; i < len; i++) {
-      state->cmac.c[i] ^= in[i];
-    }
-    (*block)(state->cmac.c, state->cmac.c, key);
-  }
-
-  // Encrypt the MAC with counter zero.
-  for (unsigned i = 0; i < ctx->L; i++) {
-    state->nonce.c[15 - i] = 0;
-  }
-  (*block)(state->nonce.c, tmp.c, key);
-  state->cmac.u[0] ^= tmp.u[0];
-  state->cmac.u[1] ^= tmp.u[1];
-
-  OPENSSL_memcpy(out_tag, state->cmac.c, tag_len);
-  return 1;
-}
-
-static int CRYPTO_ccm128_encrypt(const struct ccm128_context *ctx,
-                                 const AES_KEY *key, uint8_t *out,
-                                 uint8_t *out_tag, size_t tag_len,
-                                 const uint8_t *nonce, size_t nonce_len,
-                                 const uint8_t *in, size_t len,
-                                 const uint8_t *aad, size_t aad_len) {
-  struct ccm128_state state;
-  return ccm128_init_state(ctx, &state, key, nonce, nonce_len, aad, aad_len,
-                           len) &&
-         ccm128_compute_mac(ctx, &state, key, out_tag, tag_len, in, len) &&
-         ccm128_encrypt(ctx, &state, key, out, in, len);
-}
-
-static int CRYPTO_ccm128_decrypt(const struct ccm128_context *ctx,
-                                 const AES_KEY *key, uint8_t *out,
-                                 uint8_t *out_tag, size_t tag_len,
-                                 const uint8_t *nonce, size_t nonce_len,
-                                 const uint8_t *in, size_t len,
-                                 const uint8_t *aad, size_t aad_len) {
-  struct ccm128_state state;
-  return ccm128_init_state(ctx, &state, key, nonce, nonce_len, aad, aad_len,
-                           len) &&
-         ccm128_encrypt(ctx, &state, key, out, in, len) &&
-         ccm128_compute_mac(ctx, &state, key, out_tag, tag_len, out, len);
-}
-
 #define EVP_AEAD_AES_CCM_MAX_TAG_LEN 16
 
 struct aead_aes_ccm_ctx {
@@ -272,7 +30,7 @@
     double align;
     AES_KEY ks;
   } ks;
-  struct ccm128_context ccm;
+  CCM128_CONTEXT ccm;
 };
 
 OPENSSL_STATIC_ASSERT(sizeof(((EVP_AEAD_CTX *)NULL)->state) >=
diff --git a/src/crypto/constant_time_test.cc b/src/crypto/constant_time_test.cc
index ae80003..59a7bb1 100644
--- a/src/crypto/constant_time_test.cc
+++ b/src/crypto/constant_time_test.cc
@@ -153,19 +153,3 @@
     }
   }
 }
-
-TEST(ConstantTimeTest, ValueBarrier) {
-  for (int i = 0; i < 10; i++) {
-    crypto_word_t word;
-    RAND_bytes(reinterpret_cast<uint8_t *>(&word), sizeof(word));
-    EXPECT_EQ(word, value_barrier_w(word));
-
-    uint32_t u32;
-    RAND_bytes(reinterpret_cast<uint8_t *>(&u32), sizeof(u32));
-    EXPECT_EQ(u32, value_barrier_u32(u32));
-
-    uint64_t u64;
-    RAND_bytes(reinterpret_cast<uint8_t *>(&u64), sizeof(u64));
-    EXPECT_EQ(u64, value_barrier_u64(u64));
-  }
-}
diff --git a/src/crypto/cpu-intel.c b/src/crypto/cpu-intel.c
index 1621ef6..98d8d4e 100644
--- a/src/crypto/cpu-intel.c
+++ b/src/crypto/cpu-intel.c
@@ -148,9 +148,6 @@
   int is_intel = ebx == 0x756e6547 /* Genu */ &&
                  edx == 0x49656e69 /* ineI */ &&
                  ecx == 0x6c65746e /* ntel */;
-  int is_amd = ebx == 0x68747541 /* Auth */ &&
-               edx == 0x69746e65 /* enti */ &&
-               ecx == 0x444d4163 /* cAMD */;
 
   uint32_t extended_features[2] = {0};
   if (num_ids >= 7) {
@@ -161,24 +158,6 @@
 
   OPENSSL_cpuid(&eax, &ebx, &ecx, &edx, 1);
 
-  if (is_amd) {
-    // See https://www.amd.com/system/files/TechDocs/25481.pdf, page 10.
-    const uint32_t base_family = (eax >> 8) & 15;
-
-    uint32_t family = base_family;
-    if (base_family == 0xf) {
-      const uint32_t ext_family = (eax >> 20) & 255;
-      family += ext_family;
-    }
-
-    if (family < 0x17) {
-      // Disable RDRAND on AMD families before 0x17 (Zen) due to reported
-      // failures after suspend.
-      // https://bugzilla.redhat.com/show_bug.cgi?id=1150286
-      ecx &= ~(1u << 30);
-    }
-  }
-
   // Force the hyper-threading bit so that the more conservative path is always
   // chosen.
   edx |= 1u << 28;
diff --git a/src/crypto/digest_extra/digest_test.cc b/src/crypto/digest_extra/digest_test.cc
index 6d02c08..7d07c04 100644
--- a/src/crypto/digest_extra/digest_test.cc
+++ b/src/crypto/digest_extra/digest_test.cc
@@ -55,7 +55,7 @@
 static const MD sha512 = { "SHA512", &EVP_sha512, &SHA512 };
 static const MD md5_sha1 = { "MD5-SHA1", &EVP_md5_sha1, nullptr };
 
-struct DigestTestVector {
+struct TestVector {
   // md is the digest to test.
   const MD &md;
   // input is a NUL-terminated string to hash.
@@ -66,7 +66,7 @@
   const char *expected_hex;
 };
 
-static const DigestTestVector kTestVectors[] = {
+static const TestVector kTestVectors[] = {
     // MD4 tests, from RFC 1320. (crypto/md4 does not provide a
     // one-shot MD4 function.)
     { md4, "", 1, "31d6cfe0d16ae931b73c59d7e0c089c0" },
@@ -144,7 +144,7 @@
       "900150983cd24fb0d6963f7d28e17f72a9993e364706816aba3e25717850c26c9cd0d89d" },
 };
 
-static void CompareDigest(const DigestTestVector *test,
+static void CompareDigest(const TestVector *test,
                           const uint8_t *digest,
                           size_t digest_len) {
   static const char kHexTable[] = "0123456789abcdef";
@@ -159,7 +159,7 @@
   EXPECT_STREQ(test->expected_hex, digest_hex);
 }
 
-static void TestDigest(const DigestTestVector *test) {
+static void TestDigest(const TestVector *test) {
   bssl::ScopedEVP_MD_CTX ctx;
 
   // Test the input provided.
diff --git a/src/crypto/dsa/dsa.c b/src/crypto/dsa/dsa.c
index 51dca7f..288e2c8 100644
--- a/src/crypto/dsa/dsa.c
+++ b/src/crypto/dsa/dsa.c
@@ -558,34 +558,29 @@
 }
 
 DSA_SIG *DSA_do_sign(const uint8_t *digest, size_t digest_len, const DSA *dsa) {
-  if (!dsa->p || !dsa->q || !dsa->g) {
-    OPENSSL_PUT_ERROR(DSA, DSA_R_MISSING_PARAMETERS);
-    return NULL;
-  }
+  BIGNUM *kinv = NULL, *r = NULL, *s = NULL;
+  BIGNUM m;
+  BIGNUM xr;
+  BN_CTX *ctx = NULL;
+  int reason = ERR_R_BN_LIB;
+  DSA_SIG *ret = NULL;
 
-  // Reject invalid parameters. In particular, the algorithm will infinite loop
-  // if |g| is zero.
-  if (BN_is_zero(dsa->p) || BN_is_zero(dsa->q) || BN_is_zero(dsa->g)) {
-    OPENSSL_PUT_ERROR(DSA, DSA_R_INVALID_PARAMETERS);
-    return NULL;
+  BN_init(&m);
+  BN_init(&xr);
+
+  if (!dsa->p || !dsa->q || !dsa->g) {
+    reason = DSA_R_MISSING_PARAMETERS;
+    goto err;
   }
 
   // We only support DSA keys that are a multiple of 8 bits. (This is a weaker
   // check than the one in |DSA_do_check_signature|, which only allows 160-,
   // 224-, and 256-bit keys.
   if (BN_num_bits(dsa->q) % 8 != 0) {
-    OPENSSL_PUT_ERROR(DSA, DSA_R_BAD_Q_VALUE);
-    return NULL;
+    reason = DSA_R_BAD_Q_VALUE;
+    goto err;
   }
 
-  BIGNUM *kinv = NULL, *r = NULL, *s = NULL;
-  BIGNUM m;
-  BIGNUM xr;
-  BN_CTX *ctx = NULL;
-  DSA_SIG *ret = NULL;
-
-  BN_init(&m);
-  BN_init(&xr);
   s = BN_new();
   if (s == NULL) {
     goto err;
@@ -645,7 +640,7 @@
 
 err:
   if (ret == NULL) {
-    OPENSSL_PUT_ERROR(DSA, ERR_R_BN_LIB);
+    OPENSSL_PUT_ERROR(DSA, reason);
     BN_free(r);
     BN_free(s);
   }
diff --git a/src/crypto/dsa/dsa_test.cc b/src/crypto/dsa/dsa_test.cc
index 4682131..295a7fd 100644
--- a/src/crypto/dsa/dsa_test.cc
+++ b/src/crypto/dsa/dsa_test.cc
@@ -62,8 +62,6 @@
 #include <stdio.h>
 #include <string.h>
 
-#include <vector>
-
 #include <gtest/gtest.h>
 
 #include <openssl/bn.h>
@@ -317,18 +315,3 @@
     ADD_FAILURE() << "Tests failed";
   }
 }
-
-TEST(DSATest, InvalidGroup) {
-  bssl::UniquePtr<DSA> dsa = GetFIPSDSA();
-  ASSERT_TRUE(dsa);
-  BN_zero(dsa->g);
-
-  std::vector<uint8_t> sig(DSA_size(dsa.get()));
-  unsigned sig_len;
-  static const uint8_t kDigest[32] = {0};
-  EXPECT_FALSE(
-      DSA_sign(0, kDigest, sizeof(kDigest), sig.data(), &sig_len, dsa.get()));
-  uint32_t err = ERR_get_error();
-  EXPECT_EQ(ERR_LIB_DSA, ERR_GET_LIB(err));
-  EXPECT_EQ(DSA_R_INVALID_PARAMETERS, ERR_GET_REASON(err));
-}
diff --git a/src/crypto/ec_extra/ec_asn1.c b/src/crypto/ec_extra/ec_asn1.c
index 31988f3..6e21275 100644
--- a/src/crypto/ec_extra/ec_asn1.c
+++ b/src/crypto/ec_extra/ec_asn1.c
@@ -159,8 +159,8 @@
         (point_conversion_form_t)(CBS_data(&public_key)[0] & ~0x01);
   } else {
     // Compute the public key instead.
-    if (!ec_point_mul_scalar_base(group, &ret->pub_key->raw,
-                                  &ret->priv_key->scalar)) {
+    if (!ec_point_mul_scalar(group, &ret->pub_key->raw, &ret->priv_key->scalar,
+                             NULL, NULL)) {
       goto err;
     }
     // Remember the original private-key-only encoding.
diff --git a/src/crypto/ecdh_extra/ecdh_extra.c b/src/crypto/ecdh_extra/ecdh_extra.c
index b8a099a..1e08099 100644
--- a/src/crypto/ecdh_extra/ecdh_extra.c
+++ b/src/crypto/ecdh_extra/ecdh_extra.c
@@ -95,7 +95,7 @@
   EC_RAW_POINT shared_point;
   uint8_t buf[EC_MAX_BYTES];
   size_t buf_len;
-  if (!ec_point_mul_scalar(group, &shared_point, &pub_key->raw, priv) ||
+  if (!ec_point_mul_scalar(group, &shared_point, NULL, &pub_key->raw, priv) ||
       !ec_point_get_affine_coordinate_bytes(group, buf, NULL, &buf_len,
                                             sizeof(buf), &shared_point)) {
     OPENSSL_PUT_ERROR(ECDH, ECDH_R_POINT_ARITHMETIC_FAILURE);
diff --git a/src/crypto/engine/engine.c b/src/crypto/engine/engine.c
index 973a57c..875f148 100644
--- a/src/crypto/engine/engine.c
+++ b/src/crypto/engine/engine.c
@@ -41,10 +41,9 @@
   return engine;
 }
 
-int ENGINE_free(ENGINE *engine) {
+void ENGINE_free(ENGINE *engine) {
   // Methods are currently required to be static so are not unref'ed.
   OPENSSL_free(engine);
-  return 1;
 }
 
 // set_method takes a pointer to a method and its given size and sets
diff --git a/src/crypto/err/dsa.errordata b/src/crypto/err/dsa.errordata
index 1cf5206..6f4bc13 100644
--- a/src/crypto/err/dsa.errordata
+++ b/src/crypto/err/dsa.errordata
@@ -2,7 +2,6 @@
 DSA,104,BAD_VERSION
 DSA,105,DECODE_ERROR
 DSA,106,ENCODE_ERROR
-DSA,107,INVALID_PARAMETERS
 DSA,101,MISSING_PARAMETERS
 DSA,102,MODULUS_TOO_LARGE
 DSA,103,NEED_NEW_SETUP_VALUES
diff --git a/src/crypto/err/evp.errordata b/src/crypto/err/evp.errordata
index 771cd6a..aea4a94 100644
--- a/src/crypto/err/evp.errordata
+++ b/src/crypto/err/evp.errordata
@@ -15,7 +15,6 @@
 EVP,114,INVALID_OPERATION
 EVP,115,INVALID_PADDING_MODE
 EVP,133,INVALID_PARAMETERS
-EVP,134,INVALID_PEER_KEY
 EVP,116,INVALID_PSS_SALTLEN
 EVP,131,INVALID_SIGNATURE
 EVP,117,KEYS_NOT_SET
diff --git a/src/crypto/evp/evp.c b/src/crypto/evp/evp.c
index 0e90b6f..ed7cc85 100644
--- a/src/crypto/evp/evp.c
+++ b/src/crypto/evp/evp.c
@@ -200,8 +200,6 @@
       return &dsa_asn1_meth;
     case EVP_PKEY_ED25519:
       return &ed25519_asn1_meth;
-    case EVP_PKEY_X25519:
-      return &x25519_asn1_meth;
     default:
       return NULL;
   }
@@ -332,73 +330,7 @@
   return 1;
 }
 
-EVP_PKEY *EVP_PKEY_new_raw_private_key(int type, ENGINE *unused,
-                                       const uint8_t *in, size_t len) {
-  EVP_PKEY *ret = EVP_PKEY_new();
-  if (ret == NULL ||
-      !EVP_PKEY_set_type(ret, type)) {
-    goto err;
-  }
 
-  if (ret->ameth->set_priv_raw == NULL) {
-    OPENSSL_PUT_ERROR(EVP, EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE);
-    goto err;
-  }
-
-  if (!ret->ameth->set_priv_raw(ret, in, len)) {
-    goto err;
-  }
-
-  return ret;
-
-err:
-  EVP_PKEY_free(ret);
-  return NULL;
-}
-
-EVP_PKEY *EVP_PKEY_new_raw_public_key(int type, ENGINE *unused,
-                                      const uint8_t *in, size_t len) {
-  EVP_PKEY *ret = EVP_PKEY_new();
-  if (ret == NULL ||
-      !EVP_PKEY_set_type(ret, type)) {
-    goto err;
-  }
-
-  if (ret->ameth->set_pub_raw == NULL) {
-    OPENSSL_PUT_ERROR(EVP, EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE);
-    goto err;
-  }
-
-  if (!ret->ameth->set_pub_raw(ret, in, len)) {
-    goto err;
-  }
-
-  return ret;
-
-err:
-  EVP_PKEY_free(ret);
-  return NULL;
-}
-
-int EVP_PKEY_get_raw_private_key(const EVP_PKEY *pkey, uint8_t *out,
-                                 size_t *out_len) {
-  if (pkey->ameth->get_priv_raw == NULL) {
-    OPENSSL_PUT_ERROR(EVP, EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE);
-    return 0;
-  }
-
-  return pkey->ameth->get_priv_raw(pkey, out, out_len);
-}
-
-int EVP_PKEY_get_raw_public_key(const EVP_PKEY *pkey, uint8_t *out,
-                                size_t *out_len) {
-  if (pkey->ameth->get_pub_raw == NULL) {
-    OPENSSL_PUT_ERROR(EVP, EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE);
-    return 0;
-  }
-
-  return pkey->ameth->get_pub_raw(pkey, out, out_len);
-}
 
 int EVP_PKEY_cmp_parameters(const EVP_PKEY *a, const EVP_PKEY *b) {
   if (a->type != b->type) {
@@ -429,10 +361,3 @@
 void OpenSSL_add_all_digests(void) {}
 
 void EVP_cleanup(void) {}
-
-int EVP_PKEY_base_id(const EVP_PKEY *pkey) {
-  // OpenSSL has two notions of key type because it supports multiple OIDs for
-  // the same algorithm: NID_rsa vs NID_rsaEncryption and five distinct spelling
-  // of DSA. We do not support these, so the base ID is simply the ID.
-  return EVP_PKEY_id(pkey);
-}
diff --git a/src/crypto/evp/evp_asn1.c b/src/crypto/evp/evp_asn1.c
index fc1dce3..d56b93b 100644
--- a/src/crypto/evp/evp_asn1.c
+++ b/src/crypto/evp/evp_asn1.c
@@ -73,7 +73,6 @@
     &ec_asn1_meth,
     &dsa_asn1_meth,
     &ed25519_asn1_meth,
-    &x25519_asn1_meth,
 };
 
 static int parse_key_type(CBS *cbs, int *out_type) {
diff --git a/src/crypto/evp/evp_ctx.c b/src/crypto/evp/evp_ctx.c
index 9ca2c55..daa1954 100644
--- a/src/crypto/evp/evp_ctx.c
+++ b/src/crypto/evp/evp_ctx.c
@@ -67,14 +67,15 @@
 
 
 static const EVP_PKEY_METHOD *const evp_methods[] = {
-    &rsa_pkey_meth,
-    &ec_pkey_meth,
-    &ed25519_pkey_meth,
-    &x25519_pkey_meth,
+  &rsa_pkey_meth,
+  &ec_pkey_meth,
+  &ed25519_pkey_meth,
 };
 
 static const EVP_PKEY_METHOD *evp_pkey_meth_find(int type) {
-  for (size_t i = 0; i < sizeof(evp_methods)/sizeof(EVP_PKEY_METHOD*); i++) {
+  unsigned i;
+
+  for (i = 0; i < sizeof(evp_methods)/sizeof(EVP_PKEY_METHOD*); i++) {
     if (evp_methods[i]->pkey_id == type) {
       return evp_methods[i];
     }
diff --git a/src/crypto/evp/evp_extra_test.cc b/src/crypto/evp/evp_extra_test.cc
index f520598..1f6a61d 100644
--- a/src/crypto/evp/evp_extra_test.cc
+++ b/src/crypto/evp/evp_extra_test.cc
@@ -555,10 +555,13 @@
       0xa6, 0x23, 0x25, 0xaf, 0x02, 0x1a, 0x68, 0xf7, 0x07, 0x51, 0x1a,
   };
 
-  static const uint8_t kPrivateKeySeed[32] = {
+  static const uint8_t kPrivateKey[64] = {
       0x9d, 0x61, 0xb1, 0x9d, 0xef, 0xfd, 0x5a, 0x60, 0xba, 0x84, 0x4a,
       0xf4, 0x92, 0xec, 0x2c, 0xc4, 0x44, 0x49, 0xc5, 0x69, 0x7b, 0x32,
-      0x69, 0x19, 0x70, 0x3b, 0xac, 0x03, 0x1c, 0xae, 0x7f, 0x60,
+      0x69, 0x19, 0x70, 0x3b, 0xac, 0x03, 0x1c, 0xae, 0x7f, 0x60, 0xd7,
+      0x5a, 0x98, 0x01, 0x82, 0xb1, 0x0a, 0xb7, 0xd5, 0x4b, 0xfe, 0xd3,
+      0xc9, 0x64, 0x07, 0x3a, 0x0e, 0xe1, 0x72, 0xf3, 0xda, 0xa6, 0x23,
+      0x25, 0xaf, 0x02, 0x1a, 0x68, 0xf7, 0x07, 0x51, 0x1a,
   };
 
   static const uint8_t kPrivateKeyPKCS8[] = {
@@ -569,38 +572,10 @@
   };
 
   // Create a public key.
-  bssl::UniquePtr<EVP_PKEY> pubkey(EVP_PKEY_new_raw_public_key(
-      EVP_PKEY_ED25519, nullptr, kPublicKey, sizeof(kPublicKey)));
+  bssl::UniquePtr<EVP_PKEY> pubkey(EVP_PKEY_new_ed25519_public(kPublicKey));
   ASSERT_TRUE(pubkey);
   EXPECT_EQ(EVP_PKEY_ED25519, EVP_PKEY_id(pubkey.get()));
 
-  // The public key must be extractable.
-  uint8_t buf[32];
-  size_t len;
-  ASSERT_TRUE(EVP_PKEY_get_raw_public_key(pubkey.get(), nullptr, &len));
-  EXPECT_EQ(len, 32u);
-  ASSERT_TRUE(EVP_PKEY_get_raw_public_key(pubkey.get(), buf, &len));
-  EXPECT_EQ(Bytes(buf, len), Bytes(kPublicKey));
-  // Passing too large of a buffer is okay. The function will still only read
-  // 32 bytes.
-  len = 64;
-  ASSERT_TRUE(EVP_PKEY_get_raw_public_key(pubkey.get(), buf, &len));
-  EXPECT_EQ(Bytes(buf, len), Bytes(kPublicKey));
-  // Passing too small of a buffer is noticed.
-  len = 31;
-  EXPECT_FALSE(EVP_PKEY_get_raw_public_key(pubkey.get(), buf, &len));
-  uint32_t err = ERR_get_error();
-  EXPECT_EQ(ERR_LIB_EVP, ERR_GET_LIB(err));
-  EXPECT_EQ(EVP_R_BUFFER_TOO_SMALL, ERR_GET_REASON(err));
-  ERR_clear_error();
-
-  // There is no private key.
-  EXPECT_FALSE(EVP_PKEY_get_raw_private_key(pubkey.get(), nullptr, &len));
-  err = ERR_get_error();
-  EXPECT_EQ(ERR_LIB_EVP, ERR_GET_LIB(err));
-  EXPECT_EQ(EVP_R_NOT_A_PRIVATE_KEY, ERR_GET_REASON(err));
-  ERR_clear_error();
-
   // The public key must encode properly.
   bssl::ScopedCBB cbb;
   uint8_t *der;
@@ -614,40 +589,16 @@
   // The public key must gracefully fail to encode as a private key.
   ASSERT_TRUE(CBB_init(cbb.get(), 0));
   EXPECT_FALSE(EVP_marshal_private_key(cbb.get(), pubkey.get()));
-  err = ERR_get_error();
+  uint32_t err = ERR_get_error();
   EXPECT_EQ(ERR_LIB_EVP, ERR_GET_LIB(err));
   EXPECT_EQ(EVP_R_NOT_A_PRIVATE_KEY, ERR_GET_REASON(err));
-  ERR_clear_error();
   cbb.Reset();
 
   // Create a private key.
-  bssl::UniquePtr<EVP_PKEY> privkey(EVP_PKEY_new_raw_private_key(
-      EVP_PKEY_ED25519, NULL, kPrivateKeySeed, sizeof(kPrivateKeySeed)));
+  bssl::UniquePtr<EVP_PKEY> privkey(EVP_PKEY_new_ed25519_private(kPrivateKey));
   ASSERT_TRUE(privkey);
   EXPECT_EQ(EVP_PKEY_ED25519, EVP_PKEY_id(privkey.get()));
 
-  // The private key must be extractable.
-  ASSERT_TRUE(EVP_PKEY_get_raw_private_key(privkey.get(), nullptr, &len));
-  EXPECT_EQ(len, 32u);
-  ASSERT_TRUE(EVP_PKEY_get_raw_private_key(privkey.get(), buf, &len));
-  EXPECT_EQ(Bytes(buf, len), Bytes(kPrivateKeySeed));
-  // Passing too large of a buffer is okay. The function will still only read
-  // 32 bytes.
-  len = 64;
-  ASSERT_TRUE(EVP_PKEY_get_raw_private_key(privkey.get(), buf, &len));
-  EXPECT_EQ(Bytes(buf, len), Bytes(kPrivateKeySeed));
-  // Passing too small of a buffer is noticed.
-  len = 31;
-  EXPECT_FALSE(EVP_PKEY_get_raw_private_key(privkey.get(), buf, &len));
-  err = ERR_get_error();
-  EXPECT_EQ(ERR_LIB_EVP, ERR_GET_LIB(err));
-  EXPECT_EQ(EVP_R_BUFFER_TOO_SMALL, ERR_GET_REASON(err));
-  ERR_clear_error();
-  // The public key must be extractable.
-  len = 32;
-  ASSERT_TRUE(EVP_PKEY_get_raw_public_key(privkey.get(), buf, &len));
-  EXPECT_EQ(Bytes(buf, len), Bytes(kPublicKey));
-
   // The public key must encode from the private key.
   ASSERT_TRUE(CBB_init(cbb.get(), 0));
   ASSERT_TRUE(EVP_marshal_public_key(cbb.get(), privkey.get()));
@@ -666,8 +617,7 @@
   EXPECT_EQ(1, EVP_PKEY_cmp(pubkey.get(), privkey.get()));
 
   static const uint8_t kZeros[32] = {0};
-  bssl::UniquePtr<EVP_PKEY> pubkey2(EVP_PKEY_new_raw_public_key(
-      EVP_PKEY_ED25519, nullptr, kZeros, sizeof(kZeros)));
+  bssl::UniquePtr<EVP_PKEY> pubkey2(EVP_PKEY_new_ed25519_public(kZeros));
   ASSERT_TRUE(pubkey2);
   EXPECT_EQ(0, EVP_PKEY_cmp(pubkey.get(), pubkey2.get()));
   EXPECT_EQ(0, EVP_PKEY_cmp(privkey.get(), pubkey2.get()));
@@ -677,6 +627,7 @@
   ASSERT_TRUE(
       EVP_DigestSignInit(ctx.get(), nullptr, nullptr, nullptr, privkey.get()));
   EXPECT_FALSE(EVP_DigestSignUpdate(ctx.get(), nullptr, 0));
+  size_t len;
   EXPECT_FALSE(EVP_DigestSignFinal(ctx.get(), nullptr, &len));
   ERR_clear_error();
 
@@ -686,18 +637,6 @@
   EXPECT_FALSE(EVP_DigestVerifyUpdate(ctx.get(), nullptr, 0));
   EXPECT_FALSE(EVP_DigestVerifyFinal(ctx.get(), nullptr, 0));
   ERR_clear_error();
-
-  // The buffer length to |EVP_DigestSign| is an input/output parameter and
-  // should be checked before signing.
-  ctx.Reset();
-  ASSERT_TRUE(
-      EVP_DigestSignInit(ctx.get(), nullptr, nullptr, nullptr, privkey.get()));
-  len = 31;
-  EXPECT_FALSE(EVP_DigestSign(ctx.get(), buf, &len, nullptr /* msg */, 0));
-  err = ERR_get_error();
-  EXPECT_EQ(ERR_LIB_EVP, ERR_GET_LIB(err));
-  EXPECT_EQ(EVP_R_BUFFER_TOO_SMALL, ERR_GET_REASON(err));
-  ERR_clear_error();
 }
 
 static void ExpectECGroupOnly(const EVP_PKEY *pkey, int nid) {
@@ -756,29 +695,3 @@
   raw = nullptr;
   ExpectECGroupAndKey(pkey.get(), NID_X9_62_prime256v1);
 }
-
-// Test that |EVP_PKEY_keygen| works for Ed25519.
-TEST(EVPExtraTest, Ed25519Keygen) {
-  bssl::UniquePtr<EVP_PKEY_CTX> pctx(
-      EVP_PKEY_CTX_new_id(EVP_PKEY_ED25519, nullptr));
-  ASSERT_TRUE(pctx);
-  ASSERT_TRUE(EVP_PKEY_keygen_init(pctx.get()));
-  EVP_PKEY *raw = nullptr;
-  ASSERT_TRUE(EVP_PKEY_keygen(pctx.get(), &raw));
-  bssl::UniquePtr<EVP_PKEY> pkey(raw);
-
-  // Round-trip a signature to sanity-check the key is good.
-  bssl::ScopedEVP_MD_CTX ctx;
-  ASSERT_TRUE(
-      EVP_DigestSignInit(ctx.get(), nullptr, nullptr, nullptr, pkey.get()));
-  uint8_t sig[64];
-  size_t len = sizeof(sig);
-  ASSERT_TRUE(EVP_DigestSign(ctx.get(), sig, &len,
-                             reinterpret_cast<const uint8_t *>("hello"), 5));
-
-  ctx.Reset();
-  ASSERT_TRUE(
-      EVP_DigestVerifyInit(ctx.get(), nullptr, nullptr, nullptr, pkey.get()));
-  ASSERT_TRUE(EVP_DigestVerify(ctx.get(), sig, len,
-                               reinterpret_cast<const uint8_t *>("hello"), 5));
-}
diff --git a/src/crypto/evp/evp_test.cc b/src/crypto/evp/evp_test.cc
index b4be636..4d74292 100644
--- a/src/crypto/evp/evp_test.cc
+++ b/src/crypto/evp/evp_test.cc
@@ -119,9 +119,6 @@
   if (name == "Ed25519") {
     return EVP_PKEY_ED25519;
   }
-  if (name == "X25519") {
-    return EVP_PKEY_X25519;
-  }
   ADD_FAILURE() << "Unknown key type: " << name;
   return EVP_PKEY_NONE;
 }
@@ -182,62 +179,7 @@
       !t->GetBytes(&output, "Output")) {
     return false;
   }
-  EXPECT_EQ(Bytes(output), Bytes(der, der_len))
-      << "Re-encoding the key did not match.";
-
-  if (t->HasAttribute("ExpectNoRawPrivate")) {
-    size_t len;
-    EXPECT_FALSE(EVP_PKEY_get_raw_private_key(pkey.get(), nullptr, &len));
-  } else if (t->HasAttribute("ExpectRawPrivate")) {
-    std::vector<uint8_t> expected;
-    if (!t->GetBytes(&expected, "ExpectRawPrivate")) {
-      return false;
-    }
-
-    std::vector<uint8_t> raw;
-    size_t len;
-    if (!EVP_PKEY_get_raw_private_key(pkey.get(), nullptr, &len)) {
-      return false;
-    }
-    raw.resize(len);
-    if (!EVP_PKEY_get_raw_private_key(pkey.get(), raw.data(), &len)) {
-      return false;
-    }
-    raw.resize(len);
-    EXPECT_EQ(Bytes(raw), Bytes(expected));
-
-    // Short buffers should be rejected.
-    raw.resize(len - 1);
-    len = raw.size();
-    EXPECT_FALSE(EVP_PKEY_get_raw_private_key(pkey.get(), raw.data(), &len));
-  }
-
-  if (t->HasAttribute("ExpectNoRawPublic")) {
-    size_t len;
-    EXPECT_FALSE(EVP_PKEY_get_raw_public_key(pkey.get(), nullptr, &len));
-  } else if (t->HasAttribute("ExpectRawPublic")) {
-    std::vector<uint8_t> expected;
-    if (!t->GetBytes(&expected, "ExpectRawPublic")) {
-      return false;
-    }
-
-    std::vector<uint8_t> raw;
-    size_t len;
-    if (!EVP_PKEY_get_raw_public_key(pkey.get(), nullptr, &len)) {
-      return false;
-    }
-    raw.resize(len);
-    if (!EVP_PKEY_get_raw_public_key(pkey.get(), raw.data(), &len)) {
-      return false;
-    }
-    raw.resize(len);
-    EXPECT_EQ(Bytes(raw), Bytes(expected));
-
-    // Short buffers should be rejected.
-    raw.resize(len - 1);
-    len = raw.size();
-    EXPECT_FALSE(EVP_PKEY_get_raw_public_key(pkey.get(), raw.data(), &len));
-  }
+  EXPECT_EQ(Bytes(output), Bytes(der, der_len)) << "Re-encoding the key did not match.";
 
   // Save the key for future tests.
   const std::string &key_name = t->GetParameter();
@@ -248,7 +190,7 @@
 
 // SetupContext configures |ctx| based on attributes in |t|, with the exception
 // of the signing digest which must be configured externally.
-static bool SetupContext(FileTest *t, KeyMap *key_map, EVP_PKEY_CTX *ctx) {
+static bool SetupContext(FileTest *t, EVP_PKEY_CTX *ctx) {
   if (t->HasAttribute("RSAPadding")) {
     int padding;
     if (!GetRSAPadding(t, &padding, t->GetAttributeOrDie("RSAPadding")) ||
@@ -288,74 +230,6 @@
     }
     buf.release();
   }
-  if (t->HasAttribute("DerivePeer")) {
-    std::string derive_peer = t->GetAttributeOrDie("DerivePeer");
-    if (key_map->count(derive_peer) == 0) {
-      ADD_FAILURE() << "Could not find key " << derive_peer;
-      return false;
-    }
-    EVP_PKEY *derive_peer_key = (*key_map)[derive_peer].get();
-    if (!EVP_PKEY_derive_set_peer(ctx, derive_peer_key)) {
-      return false;
-    }
-  }
-  return true;
-}
-
-static bool TestDerive(FileTest *t, KeyMap *key_map, EVP_PKEY *key) {
-  bssl::UniquePtr<EVP_PKEY_CTX> ctx(EVP_PKEY_CTX_new(key, nullptr));
-  if (!ctx ||
-      !EVP_PKEY_derive_init(ctx.get()) ||
-      !SetupContext(t, key_map, ctx.get())) {
-    return false;
-  }
-
-  bssl::UniquePtr<EVP_PKEY_CTX> copy(EVP_PKEY_CTX_dup(ctx.get()));
-  if (!copy) {
-    return false;
-  }
-
-  for (EVP_PKEY_CTX *pctx : {ctx.get(), copy.get()}) {
-    size_t len;
-    std::vector<uint8_t> actual, output;
-    if (!EVP_PKEY_derive(pctx, nullptr, &len)) {
-      return false;
-    }
-    actual.resize(len);
-    if (!EVP_PKEY_derive(pctx, actual.data(), &len)) {
-      return false;
-    }
-    actual.resize(len);
-
-    // Defer looking up the attribute so Error works properly.
-    if (!t->GetBytes(&output, "Output")) {
-      return false;
-    }
-    EXPECT_EQ(Bytes(output), Bytes(actual));
-
-    // Test when the buffer is too large.
-    actual.resize(len + 1);
-    len = actual.size();
-    if (!EVP_PKEY_derive(pctx, actual.data(), &len)) {
-      return false;
-    }
-    actual.resize(len);
-    EXPECT_EQ(Bytes(output), Bytes(actual));
-
-    // Test when the buffer is too small.
-    actual.resize(len - 1);
-    len = actual.size();
-    if (t->HasAttribute("SmallBufferTruncates")) {
-      if (!EVP_PKEY_derive(pctx, actual.data(), &len)) {
-        return false;
-      }
-      actual.resize(len);
-      EXPECT_EQ(Bytes(output.data(), len), Bytes(actual));
-    } else {
-      EXPECT_FALSE(EVP_PKEY_derive(pctx, actual.data(), &len));
-      ERR_clear_error();
-    }
-  }
   return true;
 }
 
@@ -369,14 +243,6 @@
     return ImportKey(t, key_map, EVP_parse_public_key, EVP_marshal_public_key);
   }
 
-  // Load the key.
-  const std::string &key_name = t->GetParameter();
-  if (key_map->count(key_name) == 0) {
-    ADD_FAILURE() << "Could not find key " << key_name;
-    return false;
-  }
-  EVP_PKEY *key = (*key_map)[key_name].get();
-
   int (*key_op_init)(EVP_PKEY_CTX *ctx) = nullptr;
   int (*key_op)(EVP_PKEY_CTX *ctx, uint8_t *out, size_t *out_len,
                 const uint8_t *in, size_t in_len) = nullptr;
@@ -400,13 +266,19 @@
   } else if (t->GetType() == "Encrypt") {
     key_op_init = EVP_PKEY_encrypt_init;
     key_op = EVP_PKEY_encrypt;
-  } else if (t->GetType() == "Derive") {
-    return TestDerive(t, key_map, key);
   } else {
     ADD_FAILURE() << "Unknown test " << t->GetType();
     return false;
   }
 
+  // Load the key.
+  const std::string &key_name = t->GetParameter();
+  if (key_map->count(key_name) == 0) {
+    ADD_FAILURE() << "Could not find key " << key_name;
+    return false;
+  }
+  EVP_PKEY *key = (*key_map)[key_name].get();
+
   const EVP_MD *digest = nullptr;
   if (t->HasAttribute("Digest")) {
     digest = GetDigest(t, t->GetAttributeOrDie("Digest"));
@@ -428,7 +300,7 @@
     bssl::ScopedEVP_MD_CTX ctx, copy;
     EVP_PKEY_CTX *pctx;
     if (!md_op_init(ctx.get(), &pctx, digest, nullptr, key) ||
-        !SetupContext(t, key_map, pctx) ||
+        !SetupContext(t, pctx) ||
         !EVP_MD_CTX_copy_ex(copy.get(), ctx.get())) {
       return false;
     }
@@ -475,7 +347,7 @@
       !key_op_init(ctx.get()) ||
       (digest != nullptr &&
        !EVP_PKEY_CTX_set_signature_md(ctx.get(), digest)) ||
-      !SetupContext(t, key_map, ctx.get())) {
+      !SetupContext(t, ctx.get())) {
     return false;
   }
 
@@ -509,7 +381,7 @@
           !EVP_PKEY_decrypt_init(decrypt_ctx.get()) ||
           (digest != nullptr &&
            !EVP_PKEY_CTX_set_signature_md(decrypt_ctx.get(), digest)) ||
-          !SetupContext(t, key_map, decrypt_ctx.get()) ||
+          !SetupContext(t, decrypt_ctx.get()) ||
           !EVP_PKEY_decrypt(decrypt_ctx.get(), nullptr, &plaintext_len,
                             actual.data(), actual.size())) {
         return false;
@@ -529,7 +401,7 @@
           !EVP_PKEY_verify_init(verify_ctx.get()) ||
           (digest != nullptr &&
            !EVP_PKEY_CTX_set_signature_md(verify_ctx.get(), digest)) ||
-          !SetupContext(t, key_map, verify_ctx.get())) {
+          !SetupContext(t, verify_ctx.get())) {
         return false;
       }
       if (t->HasAttribute("VerifyPSSSaltLength")) {
diff --git a/src/crypto/evp/evp_tests.txt b/src/crypto/evp/evp_tests.txt
index 2ac51d3..9dbe1cb 100644
--- a/src/crypto/evp/evp_tests.txt
+++ b/src/crypto/evp/evp_tests.txt
@@ -6,15 +6,11 @@
 PrivateKey = RSA-2048
 Type = RSA
 Input = 308204bc020100300d06092a864886f70d0101010500048204a6308204a20201000282010100cd0081ea7b2ae1ea06d59f7c73d9ffb94a09615c2e4ba7c636cef08dd3533ec3185525b015c769b99a77d6725bf9c3532a9b6e5f6627d5fb85160768d3dda9cbd35974511717dc3d309d2fc47ee41f97e32adb7f9dd864a1c4767a666ecd71bc1aacf5e7517f4b38594fea9b05e42d5ada9912008013e45316a4d9bb8ed086b88d28758bacaf922d46a868b485d239c9baeb0e2b64592710f42b2d1ea0a4b4802c0becab328f8a68b0073bdb546feea9809d2849912b390c1532bc7e29c7658f8175fae46f34332ff87bcab3e40649b98577869da0ea718353f0722754886913648760d122be676e0fc483dd20ffc31bda96a31966c9aa2e75ad03de47e1c44f02030100010282010060297ac7991b167a06d6b24758b8cbe208beb9b2d9ec9738bd80f90a2e35005dd7ce292d9e29ba885bd316fef1f20913bc0ac90d6b0808b2414d82104441d8624a33ce0233c8f780a48b375aff02d76712228a702484db3f9ebecccfbbee1709dba182800d949e9e4216e0bff3558388f8bd90da373a1d82743ec3fbdd1427fd16825a657a316912e8695365117ca2f845c909405fcac55f895fc15d20386c26ee78c9e99075029a178a6c1e4cf0c200e8a9cfb27e9d156f86e6c2adc22b1a84a1cd5ca5b2790875d79407c84b352395cb81cc3fed5bb043b69ede0c07204550025cee8c5f440170b6120bb48e0f747bcd8f522110850df043c428dfd187053102818100f6f961b47cbc035d3aedebc7de850a956b65ecdb9cf60764063f15aa48553c58d972fe6675056e35ddfdc37bf3b9f2f622ee271337256849c9bef2176fe8f7c3f8bb91ba374dd53baf3dec814d2bdec10c1fdc88cdd16876f26b1edfa3f094197edf4d42ff1fb2971103b898ca859c427287086a842ab410bb69cf2d35af6be302818100d47e724a7ff41048b270c2524a4101878b73159bb73d3dbc187b220e635b3534f96e243a184d93f860b6bfbb6b71c1ed9a1e1f458583023c301e96a692c1a08b53d0ec9ca910100d80451e3b7dc6a01bac4aecef8df798846bc235a08cbba2cf4c06804cc11219e95608c714e3f1430d491fadbba32a5751a04f97745834c9a502818021f2452bb9b95dfd028c914bf799f1ca77e89a95d50d3c16d384f8455f8bd7af9eb3dfa3d591d9842def235f7630a8e48c088ff6642e101794535a933e1e976fa8509fc728b2da0c4a1a08d7fcf37abaae1ff3001aca1dc1bbb05d9dffbaa1a09f7fb1eef38237d9ebccc722b9338436dde7119112798c26809c1a8dec4320610281801f7510aa62c2d8de4a3c53282781f41e02d0e8b402ae78432e449c48110161a11403f02d01880a8dcc938152d79721a4711a607ac4471ebf964810f95be47a45e60499e29f4c9773c83773404f606637728c2d0351bb03c326c8bb73a721e7fa5440ea2172bba1465fcc30dcb0d9f89930e815aa1f7f9729a857e00e0338dd590281804d1f0d756fe77e01099a652f50a88b7b685dc5bf00981d5d2376fd0c6fe29cd5b638734479305a73ad3c1599d39eae3bae035fbd6fed07c28de705933879a06e48e6a603686ed8e2560a5f6af1f2c24faf4aa960e382186f15eedce9a2491ae730680dd4cf778b70faa86826ab3223477cc91377b19a6d5a2eaea219760beed5
-ExpectNoRawPrivate
-ExpectNoRawPublic
 
 # The public half of the same key encoded as a SubjectPublicKeyInfo.
 PublicKey = RSA-2048-SPKI
 Type = RSA
 Input = 30820122300d06092a864886f70d01010105000382010f003082010a0282010100cd0081ea7b2ae1ea06d59f7c73d9ffb94a09615c2e4ba7c636cef08dd3533ec3185525b015c769b99a77d6725bf9c3532a9b6e5f6627d5fb85160768d3dda9cbd35974511717dc3d309d2fc47ee41f97e32adb7f9dd864a1c4767a666ecd71bc1aacf5e7517f4b38594fea9b05e42d5ada9912008013e45316a4d9bb8ed086b88d28758bacaf922d46a868b485d239c9baeb0e2b64592710f42b2d1ea0a4b4802c0becab328f8a68b0073bdb546feea9809d2849912b390c1532bc7e29c7658f8175fae46f34332ff87bcab3e40649b98577869da0ea718353f0722754886913648760d122be676e0fc483dd20ffc31bda96a31966c9aa2e75ad03de47e1c44f0203010001
-ExpectNoRawPrivate
-ExpectNoRawPublic
 
 # The same key but with a negative RSA modulus.
 PublicKey = RSA-2048-SPKI-Negative
@@ -35,29 +31,21 @@
 PrivateKey = RSA-512
 Type = RSA
 Input = 30820154020100300d06092a864886f70d01010105000482013e3082013a020100024100dd20403d976a38c9d79152d87b5c8e9f05033eadd7b7de709bf5b0c4a5182a97d18483526b02362b992e154a9f37faa396ca2685cdab8fec09877ebe705f4dd70203010001024055bebcca655d7e39de8a6eaa9d636db682161907064039544755c53eeb99ec618c03a210dbc61471eaba10c5c365c9726d6b7a96f54d455f7d168d49367270e1022100f21a05d9fd6817301ce49ce10448f9bdd44f5ef5b7557cd7d83155db46382ae7022100e9d1f7157783db2feab1936954ddc4e83aa365695868144cda1be6813b61d791022100d6001eb0040920860ce41fafdf23ca6dfbdf74e6e9f98cf3164cf5c16f9e727d02206f6f73f4b52b10517be6f9bc5f87fa0a3bb817e2e711636b651f9af1c85d4f21022063eff2e57f5b4ca20342cfe793e25526624e3692f192461f9e1ce7f13f2d72c8
-ExpectNoRawPrivate
-ExpectNoRawPublic
 
 # RSA 515 bit key.
 PrivateKey = RSA-515
 Type = RSA
 Input = 30820157020100300d06092a864886f70d0101010500048201413082013d0201000241054fa166e205e658bbe8a2dc35311c0c2b75b7e4569fd9642c8bae809279271fc824f26baa1166ea46298ca63379ea76adbada2b61e5066820a35beaec1aca227f020301000102410266c972be0d30e53ac2acb1aa13b4bd0401cccf212452a66b4615f7e943831f67b4ca48560582d0ca886044aaaaf87945252a848c1947944186e6eb83969bf91102210309e631761842cc8a2ccfd372c20a9cba21de1a199c30ab440bc6b51079f4e825022101bf715c1db432627ca7c29a293b9210f2eff1e92d12f306ebaa5334f8ee03dcd30221018ac58a765f2b8f37d434081fe5ff92b81735ead2f263f4968ccf63d61fbe3d0d0221015b247a1159a2d5a25d0db049593c6405f77f3a278c521d066e290c2a2d8fb59d0221026224aa31fd95c14d24fd03b8a195bba4cc88df7c37f5370a5ab19f882f1404d6
-ExpectNoRawPrivate
-ExpectNoRawPublic
 
 # EC P-256 key
 PrivateKey = P-256
 Type = EC
 Input = 308187020100301306072a8648ce3d020106082a8648ce3d030107046d306b02010104208a872fb62893c4d1ffc5b9f0f91758069f8352e08fa05a49f8db926cb5728725a144034200042c150f429ce70f216c252cf5e062ce1f639cd5d165c7f89424072c27197d78b33b920e95cdb664e990dcf0cfea0d94e2a8e6af9d0e58056e653104925b9fe6c9
-ExpectNoRawPrivate
-ExpectNoRawPublic
 
 # The same key as above with the optional public key omitted.
 PrivateKey = P-256-MissingPublic
 Type = EC
 Input = 3041020100301306072a8648ce3d020106082a8648ce3d0301070427302502010104208a872fb62893c4d1ffc5b9f0f91758069f8352e08fa05a49f8db926cb5728725
-ExpectNoRawPrivate
-ExpectNoRawPublic
 
 # The same key as above with redundant parameters.
 PrivateKey = P-256-ExtraParameters
@@ -65,8 +53,6 @@
 Input = 308193020100301306072a8648ce3d020106082a8648ce3d0301070479307702010104208a872fb62893c4d1ffc5b9f0f91758069f8352e08fa05a49f8db926cb5728725a00a06082a8648ce3d030107a144034200042c150f429ce70f216c252cf5e062ce1f639cd5d165c7f89424072c27197d78b33b920e95cdb664e990dcf0cfea0d94e2a8e6af9d0e58056e653104925b9fe6c9
 # The key re-encodes with the parameters removed.
 Output = 308187020100301306072a8648ce3d020106082a8648ce3d030107046d306b02010104208a872fb62893c4d1ffc5b9f0f91758069f8352e08fa05a49f8db926cb5728725a144034200042c150f429ce70f216c252cf5e062ce1f639cd5d165c7f89424072c27197d78b33b920e95cdb664e990dcf0cfea0d94e2a8e6af9d0e58056e653104925b9fe6c9
-ExpectNoRawPrivate
-ExpectNoRawPublic
 
 # The same key, but with the redundant parameters in the ECPrivateKey mismatched.
 PrivateKey = P-256-BadInnerParameters
@@ -77,8 +63,6 @@
 PublicKey = P-256-SPKI
 Type = EC
 Input = 3059301306072a8648ce3d020106082a8648ce3d030107034200042c150f429ce70f216c252cf5e062ce1f639cd5d165c7f89424072c27197d78b33b920e95cdb664e990dcf0cfea0d94e2a8e6af9d0e58056e653104925b9fe6c9
-ExpectNoRawPrivate
-ExpectNoRawPublic
 
 # The same as above, but with the curve explicitly spelled out.
 PublicKey = P-256-SPKI
@@ -94,84 +78,58 @@
 PrivateKey = DSA-1024
 Type = DSA
 Input = 308202650201003082023906072a8648ce3804013082022c02820101009e12fab3de12213501dd82aa10ca2d101d2d4ebfef4d2a3f8daa0fe0cedad8d6af85616aa2f3252c0a2b5a6db09e6f14900e0ddb8311876dd8f9669525f99ed65949e184d5064793271169a228680b95ec12f59a8e20b21f2b58eb2a2012d35bde2ee351822fe8f32d0a330565dcce5c672b7259c14b2433d0b5b2ca2b2db0ab626e8f13f47fe0345d904e7294bb038e9ce21a9e580b83356278706cfe768436c69de149ccff98b4aab8cb4f6385c9f102ce59346eaeef27e0ad222d53d6e89cc8cde5776dd00057b03f2d88ab3cedbafd7b585f0b7f7835e17a3728bbf25ea62572f245dc111f3ce39cb6ffacc31b0a2790e7bde90224ea9b09315362af3d2b022100f381dcf53ebf724f8b2e5ca82c010fb4b5eda9358d0fd88ed278589488b54fc3028201000c402a725dcc3a62e02bf4cf43cd17f4a493591220223669cf4193edab423ad08dfb552e308a6a57a5ffbc7cd0fb2087f81f8df0cb08ab2133287d2b6968714a94f633c940845a48a3e16708dde761cc6a8eab2d84db21b6ea5b07681493cc9c31fbc368b243f6ddf8c932a8b4038f44e7b15ca876344a147859f2b43b39458668ad5e0a1a9a669546dd2812e3b3617a0aef99d58e3bb4cc87fd94225e01d2dcc469a77268146c51918f18e8b4d70aa1f0c7623bcc52cf3731d38641b2d2830b7eecb2f09552ff137d046e494e7f33c3590002b16d1b97d936fda28f90c3ed3ca35338168ac16f77c3c57adc2e8f7c6c2256e41a5f65450590dbb5bcf06d66610423022100b0c768702743bc51242993a971a52889795444f7c6452203d0ce84fe6117d46e
-ExpectNoRawPrivate
-ExpectNoRawPublic
 
 # A DSA public key.
 PublicKey = DSA-1024-SPKI
 Type = DSA
 Input = 308201b73082012c06072a8648ce3804013082011f02818100b3429b8b128c9079f9b72e86857e98d265e5d91661ed8b5f4cc56e5eed1e571da30186983a9dd76297eab73ee13a1db841f8800d04a7cab478af6cde2ea4a2868531af169a24858c6268efa39ceb7ed0d4227eb5bbb01124a2a5a26038c7bcfb8cc827f68f5202345166e4718596799b65c9def82828ce44e62e38e41a0d24b1021500c5a56c81ddd87f47e676546c56d05706421624cf0281810094de40d27314fe929e47ff9b1ac65cfc73ef38c4d381c890be6217b15039ae18190e6b421af8c0bda35a5cfd050f58ae2644adce83e68c8e5ba11729df56bbb21e227a60b816cc033fa799a38fe1ba5b4aa1801b6f841ce3df99feb3b4fb96950c960af13fa2ce920aabc12dd24ad2044a35063ea0e25f67f560f4cfbdc5598303818400028180258c30ebbb7f34fdc873ce679f6cea373c7886d75d4421b90920db034daedd292c64d8edd8cdbdd7f3ad23d74cfa2135247d0cef6ecf2e14f99e19d22a8c1266bd8fb8719c0e5667c716c45c7adbdabe548085bdad2dfee636f8d52fd6adb2193df6c4f0520fbd171b91882e0e4f321f8250ffecf4dbea00e114427d3ef96c1a
-ExpectNoRawPrivate
-ExpectNoRawPublic
 
 # The same key as above, but without the parameters.
 PublicKey = DSA-1024-SPKI-No-Params
 Type = DSA
 Input = 308192300906072a8648ce38040103818400028180258c30ebbb7f34fdc873ce679f6cea373c7886d75d4421b90920db034daedd292c64d8edd8cdbdd7f3ad23d74cfa2135247d0cef6ecf2e14f99e19d22a8c1266bd8fb8719c0e5667c716c45c7adbdabe548085bdad2dfee636f8d52fd6adb2193df6c4f0520fbd171b91882e0e4f321f8250ffecf4dbea00e114427d3ef96c1a
-ExpectNoRawPrivate
-ExpectNoRawPublic
 
 # Private keys from RFC 8032.
 PrivateKey = Ed25519
 Type = Ed25519
 Input = 302e020100300506032b6570042204209d61b19deffd5a60ba844af492ec2cc44449c5697b326919703bac031cae7f60
-ExpectRawPrivate = 9d61b19deffd5a60ba844af492ec2cc44449c5697b326919703bac031cae7f60
-ExpectRawPublic = d75a980182b10ab7d54bfed3c964073a0ee172f3daa62325af021a68f707511a
 
 PrivateKey = Ed25519-2
 Type = Ed25519
 Input = 302e020100300506032b6570042204204ccd089b28ff96da9db6c346ec114e0f5b8a319f35aba624da8cf6ed4fb8a6fb
-ExpectRawPrivate = 4ccd089b28ff96da9db6c346ec114e0f5b8a319f35aba624da8cf6ed4fb8a6fb
-ExpectRawPublic = 3d4017c3e843895a92b70aa74d1b7ebc9c982ccf2ec4968cc0cd55f12af4660c
 
 PrivateKey = Ed25519-3
 Type = Ed25519
 Input = 302e020100300506032b657004220420c5aa8df43f9f837bedb7442f31dcb7b166d38535076f094b85ce3a2e0b4458f7
-ExpectRawPrivate = c5aa8df43f9f837bedb7442f31dcb7b166d38535076f094b85ce3a2e0b4458f7
-ExpectRawPublic = fc51cd8e6218a1a38da47ed00230f0580816ed13ba3303ac5deb911548908025
 
 PrivateKey = Ed25519-4
 Type = Ed25519
 Input = 302e020100300506032b657004220420f5e5767cf153319517630f226876b86c8160cc583bc013744c6bf255f5cc0ee5
-ExpectRawPrivate = f5e5767cf153319517630f226876b86c8160cc583bc013744c6bf255f5cc0ee5
-ExpectRawPublic = 278117fc144c72340f67d0f2316e8386ceffbf2b2428c9c51fef7c597f1d426e
 
 PrivateKey = Ed25519-5
 Type = Ed25519
 Input = 302e020100300506032b657004220420833fe62409237b9d62ec77587520911e9a759cec1d19755b7da901b96dca3d42
-ExpectRawPrivate = 833fe62409237b9d62ec77587520911e9a759cec1d19755b7da901b96dca3d42
-ExpectRawPublic = ec172b93ad5e563bf4932c70e1245034c35467ef2efd4d64ebf819683467e2bf
 
 # Public keys from RFC 8032.
 PublicKey = Ed25519-SPKI
 Type = Ed25519
 Input = 302a300506032b6570032100d75a980182b10ab7d54bfed3c964073a0ee172f3daa62325af021a68f707511a
-ExpectNoRawPrivate
-ExpectRawPublic = d75a980182b10ab7d54bfed3c964073a0ee172f3daa62325af021a68f707511a
 
 PublicKey = Ed25519-SPKI-2
 Type = Ed25519
 Input = 302a300506032b65700321003d4017c3e843895a92b70aa74d1b7ebc9c982ccf2ec4968cc0cd55f12af4660c
-ExpectNoRawPrivate
-ExpectRawPublic = 3d4017c3e843895a92b70aa74d1b7ebc9c982ccf2ec4968cc0cd55f12af4660c
 
 PublicKey = Ed25519-SPKI-3
 Type = Ed25519
 Input = 302a300506032b6570032100fc51cd8e6218a1a38da47ed00230f0580816ed13ba3303ac5deb911548908025
-ExpectNoRawPrivate
-ExpectRawPublic = fc51cd8e6218a1a38da47ed00230f0580816ed13ba3303ac5deb911548908025
 
 PublicKey = Ed25519-SPKI-4
 Type = Ed25519
 Input = 302a300506032b6570032100278117fc144c72340f67d0f2316e8386ceffbf2b2428c9c51fef7c597f1d426e
-ExpectNoRawPrivate
-ExpectRawPublic = 278117fc144c72340f67d0f2316e8386ceffbf2b2428c9c51fef7c597f1d426e
 
 PublicKey = Ed25519-SPKI-5
 Type = Ed25519
 Input = 302a300506032b6570032100ec172b93ad5e563bf4932c70e1245034c35467ef2efd4d64ebf819683467e2bf
-ExpectNoRawPrivate
-ExpectRawPublic = ec172b93ad5e563bf4932c70e1245034c35467ef2efd4d64ebf819683467e2bf
 
 # The first key, private and public, with invalid NULL parameters.
 PrivateKey = Ed25519-NULL
@@ -1607,42 +1565,3 @@
 Input = "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"
 Output = e5564300c360ac729086e2cc806e828a84877f1eb8e5d974d873e065224901555fb8821590a33bacc61e39701cf9b46bd25bf5f0595bbe24655141438e7a100b
 Error = OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE
-
-
-# Derive tests.
-
-PrivateKey = ECDH-P256-Private
-Type = EC
-Input = 3041020100301306072a8648ce3d020106082a8648ce3d0301070427302502010104207d7dc5f71eb29ddaf80d6214632eeae03d9058af1fb6d22ed80badb62bc1a534
-
-PublicKey = ECDH-P256-Peer
-Type = EC
-Input = 3059301306072a8648ce3d020106082a8648ce3d03010703420004700c48f77f56584c5cc632ca65640db91b6bacce3a4df6b42ce7cc838833d287db71e509e3fd9b060ddb20ba5c51dcc5948d46fbf640dfe0441782cab85fa4ac
-
-Derive = ECDH-P256-Private
-DerivePeer = ECDH-P256-Peer
-Output = 46fc62106420ff012e54a434fbdd2d25ccc5852060561e68040dd7778997bd7b
-SmallBufferTruncates
-
-PrivateKey = X25519-Private
-Type = X25519
-Input = 302e020100300506032b656e04220420a546e36bf0527c9d3b16154b82465edd62144c0ac1fc5a18506a2244ba449ac4
-ExpectRawPrivate = a546e36bf0527c9d3b16154b82465edd62144c0ac1fc5a18506a2244ba449ac4
-
-PublicKey = X25519-Peer
-Type = X25519
-Input = 302a300506032b656e032100e6db6867583030db3594c1a424b15f7c726624ec26b3353b10a903a6d0ab1c4c
-ExpectRawPublic = e6db6867583030db3594c1a424b15f7c726624ec26b3353b10a903a6d0ab1c4c
-
-PublicKey = X25519-SmallOrderPeer
-Type = X25519
-ExpectRawPublic = e0eb7a7c3b41b8ae1656e3faf19fc46ada098deb9c32b1fd866205165f49b800
-Input = 302a300506032b656e032100e0eb7a7c3b41b8ae1656e3faf19fc46ada098deb9c32b1fd866205165f49b800
-
-Derive = X25519-Private
-DerivePeer = X25519-Peer
-Output = c3da55379de9c6908e94ea4df28d084f32eccf03491c71f754b4075577a28552
-
-Derive = X25519-Private
-DerivePeer = X25519-SmallOrderPeer
-Error = INVALID_PEER_KEY
diff --git a/src/crypto/evp/internal.h b/src/crypto/evp/internal.h
index 8b6a583..43847ea 100644
--- a/src/crypto/evp/internal.h
+++ b/src/crypto/evp/internal.h
@@ -96,11 +96,6 @@
   // |out|. It returns one on success and zero on error.
   int (*priv_encode)(CBB *out, const EVP_PKEY *key);
 
-  int (*set_priv_raw)(EVP_PKEY *pkey, const uint8_t *in, size_t len);
-  int (*set_pub_raw)(EVP_PKEY *pkey, const uint8_t *in, size_t len);
-  int (*get_priv_raw)(const EVP_PKEY *pkey, uint8_t *out, size_t *out_len);
-  int (*get_pub_raw)(const EVP_PKEY *pkey, uint8_t *out, size_t *out_len);
-
   // pkey_opaque returns 1 if the |pk| is opaque. Opaque keys are backed by
   // custom implementations which do not expose key material and parameters.
   int (*pkey_opaque)(const EVP_PKEY *pk);
@@ -244,22 +239,14 @@
   char has_private;
 } ED25519_KEY;
 
-typedef struct {
-  uint8_t pub[32];
-  uint8_t priv[32];
-  char has_private;
-} X25519_KEY;
-
 extern const EVP_PKEY_ASN1_METHOD dsa_asn1_meth;
 extern const EVP_PKEY_ASN1_METHOD ec_asn1_meth;
 extern const EVP_PKEY_ASN1_METHOD rsa_asn1_meth;
 extern const EVP_PKEY_ASN1_METHOD ed25519_asn1_meth;
-extern const EVP_PKEY_ASN1_METHOD x25519_asn1_meth;
 
 extern const EVP_PKEY_METHOD rsa_pkey_meth;
 extern const EVP_PKEY_METHOD ec_pkey_meth;
 extern const EVP_PKEY_METHOD ed25519_pkey_meth;
-extern const EVP_PKEY_METHOD x25519_pkey_meth;
 
 
 #if defined(__cplusplus)
diff --git a/src/crypto/evp/p_dsa_asn1.c b/src/crypto/evp/p_dsa_asn1.c
index d50e0fc..34b2e70 100644
--- a/src/crypto/evp/p_dsa_asn1.c
+++ b/src/crypto/evp/p_dsa_asn1.c
@@ -255,11 +255,6 @@
   dsa_priv_decode,
   dsa_priv_encode,
 
-  NULL /* set_priv_raw */,
-  NULL /* set_pub_raw */,
-  NULL /* get_priv_raw */,
-  NULL /* get_pub_raw */,
-
   NULL /* pkey_opaque */,
 
   int_dsa_size,
diff --git a/src/crypto/evp/p_ec_asn1.c b/src/crypto/evp/p_ec_asn1.c
index dedc5e0..0ad8f38 100644
--- a/src/crypto/evp/p_ec_asn1.c
+++ b/src/crypto/evp/p_ec_asn1.c
@@ -237,11 +237,6 @@
   eckey_priv_decode,
   eckey_priv_encode,
 
-  NULL /* set_priv_raw */,
-  NULL /* set_pub_raw */,
-  NULL /* get_priv_raw */,
-  NULL /* get_pub_raw */,
-
   eckey_opaque,
 
   int_ec_size,
diff --git a/src/crypto/evp/p_ed25519.c b/src/crypto/evp/p_ed25519.c
index 9149afb..062ea45 100644
--- a/src/crypto/evp/p_ed25519.c
+++ b/src/crypto/evp/p_ed25519.c
@@ -16,7 +16,6 @@
 
 #include <openssl/curve25519.h>
 #include <openssl/err.h>
-#include <openssl/mem.h>
 
 #include "internal.h"
 
@@ -24,27 +23,6 @@
 // Ed25519 has no parameters to copy.
 static int pkey_ed25519_copy(EVP_PKEY_CTX *dst, EVP_PKEY_CTX *src) { return 1; }
 
-static int pkey_ed25519_keygen(EVP_PKEY_CTX *ctx, EVP_PKEY *pkey) {
-  ED25519_KEY *key = OPENSSL_malloc(sizeof(ED25519_KEY));
-  if (key == NULL) {
-    OPENSSL_PUT_ERROR(EVP, ERR_R_MALLOC_FAILURE);
-    return 0;
-  }
-
-  if (!EVP_PKEY_set_type(pkey, EVP_PKEY_ED25519)) {
-    OPENSSL_free(key);
-    return 0;
-  }
-
-  uint8_t pubkey_unused[32];
-  ED25519_keypair(pubkey_unused, key->key.priv);
-  key->has_private = 1;
-
-  OPENSSL_free(pkey->pkey.ptr);
-  pkey->pkey.ptr = key;
-  return 1;
-}
-
 static int pkey_ed25519_sign_message(EVP_PKEY_CTX *ctx, uint8_t *sig,
                                      size_t *siglen, const uint8_t *tbs,
                                      size_t tbslen) {
@@ -54,22 +32,12 @@
     return 0;
   }
 
+  *siglen = 64;
   if (sig == NULL) {
-    *siglen = 64;
     return 1;
   }
 
-  if (*siglen < 64) {
-    OPENSSL_PUT_ERROR(EVP, EVP_R_BUFFER_TOO_SMALL);
-    return 0;
-  }
-
-  if (!ED25519_sign(sig, tbs, tbslen, key->key.priv)) {
-    return 0;
-  }
-
-  *siglen = 64;
-  return 1;
+  return ED25519_sign(sig, tbs, tbslen, key->key.priv);
 }
 
 static int pkey_ed25519_verify_message(EVP_PKEY_CTX *ctx, const uint8_t *sig,
@@ -90,7 +58,7 @@
     NULL /* init */,
     pkey_ed25519_copy,
     NULL /* cleanup */,
-    pkey_ed25519_keygen,
+    NULL /* keygen */,
     NULL /* sign */,
     pkey_ed25519_sign_message,
     NULL /* verify */,
diff --git a/src/crypto/evp/p_ed25519_asn1.c b/src/crypto/evp/p_ed25519_asn1.c
index 1f996cf..ba08c6d 100644
--- a/src/crypto/evp/p_ed25519_asn1.c
+++ b/src/crypto/evp/p_ed25519_asn1.c
@@ -28,88 +28,31 @@
   pkey->pkey.ptr = NULL;
 }
 
-static int ed25519_set_priv_raw(EVP_PKEY *pkey, const uint8_t *in, size_t len) {
-  if (len != 32) {
-    OPENSSL_PUT_ERROR(EVP, EVP_R_DECODE_ERROR);
-    return 0;
-  }
-
+static int set_pubkey(EVP_PKEY *pkey, const uint8_t pubkey[32]) {
   ED25519_KEY *key = OPENSSL_malloc(sizeof(ED25519_KEY));
   if (key == NULL) {
     OPENSSL_PUT_ERROR(EVP, ERR_R_MALLOC_FAILURE);
     return 0;
   }
-
-  // The RFC 8032 encoding stores only the 32-byte seed, so we must recover the
-  // full representation which we use from it.
-  uint8_t pubkey_unused[32];
-  ED25519_keypair_from_seed(pubkey_unused, key->key.priv, in);
-  key->has_private = 1;
-
-  ed25519_free(pkey);
-  pkey->pkey.ptr = key;
-  return 1;
-}
-
-static int ed25519_set_pub_raw(EVP_PKEY *pkey, const uint8_t *in, size_t len) {
-  if (len != 32) {
-    OPENSSL_PUT_ERROR(EVP, EVP_R_DECODE_ERROR);
-    return 0;
-  }
-
-  ED25519_KEY *key = OPENSSL_malloc(sizeof(ED25519_KEY));
-  if (key == NULL) {
-    OPENSSL_PUT_ERROR(EVP, ERR_R_MALLOC_FAILURE);
-    return 0;
-  }
-
-  OPENSSL_memcpy(key->key.pub.value, in, 32);
   key->has_private = 0;
+  OPENSSL_memcpy(key->key.pub.value, pubkey, 32);
 
   ed25519_free(pkey);
   pkey->pkey.ptr = key;
   return 1;
 }
 
-static int ed25519_get_priv_raw(const EVP_PKEY *pkey, uint8_t *out,
-                                size_t *out_len) {
-  const ED25519_KEY *key = pkey->pkey.ptr;
-  if (!key->has_private) {
-    OPENSSL_PUT_ERROR(EVP, EVP_R_NOT_A_PRIVATE_KEY);
+static int set_privkey(EVP_PKEY *pkey, const uint8_t privkey[64]) {
+  ED25519_KEY *key = OPENSSL_malloc(sizeof(ED25519_KEY));
+  if (key == NULL) {
+    OPENSSL_PUT_ERROR(EVP, ERR_R_MALLOC_FAILURE);
     return 0;
   }
+  key->has_private = 1;
+  OPENSSL_memcpy(key->key.priv, privkey, 64);
 
-  if (out == NULL) {
-    *out_len = 32;
-    return 1;
-  }
-
-  if (*out_len < 32) {
-    OPENSSL_PUT_ERROR(EVP, EVP_R_BUFFER_TOO_SMALL);
-    return 0;
-  }
-
-  // The raw private key format is the first 32 bytes of the private key.
-  OPENSSL_memcpy(out, key->key.priv, 32);
-  *out_len = 32;
-  return 1;
-}
-
-static int ed25519_get_pub_raw(const EVP_PKEY *pkey, uint8_t *out,
-                               size_t *out_len) {
-  const ED25519_KEY *key = pkey->pkey.ptr;
-  if (out == NULL) {
-    *out_len = 32;
-    return 1;
-  }
-
-  if (*out_len < 32) {
-    OPENSSL_PUT_ERROR(EVP, EVP_R_BUFFER_TOO_SMALL);
-    return 0;
-  }
-
-  OPENSSL_memcpy(out, key->key.pub.value, 32);
-  *out_len = 32;
+  ed25519_free(pkey);
+  pkey->pkey.ptr = key;
   return 1;
 }
 
@@ -117,12 +60,13 @@
   // See RFC 8410, section 4.
 
   // The parameters must be omitted. Public keys have length 32.
-  if (CBS_len(params) != 0) {
+  if (CBS_len(params) != 0 ||
+      CBS_len(key) != 32) {
     OPENSSL_PUT_ERROR(EVP, EVP_R_DECODE_ERROR);
     return 0;
   }
 
-  return ed25519_set_pub_raw(out, CBS_data(key), CBS_len(key));
+  return set_pubkey(out, CBS_data(key));
 }
 
 static int ed25519_pub_encode(CBB *out, const EVP_PKEY *pkey) {
@@ -159,12 +103,17 @@
   CBS inner;
   if (CBS_len(params) != 0 ||
       !CBS_get_asn1(key, &inner, CBS_ASN1_OCTETSTRING) ||
-      CBS_len(key) != 0) {
+      CBS_len(key) != 0 ||
+      CBS_len(&inner) != 32) {
     OPENSSL_PUT_ERROR(EVP, EVP_R_DECODE_ERROR);
     return 0;
   }
 
-  return ed25519_set_priv_raw(out, CBS_data(&inner), CBS_len(&inner));
+  // The PKCS#8 encoding stores only the 32-byte seed, so we must recover the
+  // full representation which we use from it.
+  uint8_t pubkey[32], privkey[64];
+  ED25519_keypair_from_seed(pubkey, privkey, CBS_data(&inner));
+  return set_privkey(out, privkey);
 }
 
 static int ed25519_priv_encode(CBB *out, const EVP_PKEY *pkey) {
@@ -196,7 +145,7 @@
 
 static int ed25519_size(const EVP_PKEY *pkey) { return 64; }
 
-static int ed25519_bits(const EVP_PKEY *pkey) { return 253; }
+static int ed25519_bits(const EVP_PKEY *pkey) { return 256; }
 
 const EVP_PKEY_ASN1_METHOD ed25519_asn1_meth = {
     EVP_PKEY_ED25519,
@@ -207,10 +156,6 @@
     ed25519_pub_cmp,
     ed25519_priv_decode,
     ed25519_priv_encode,
-    ed25519_set_priv_raw,
-    ed25519_set_pub_raw,
-    ed25519_get_priv_raw,
-    ed25519_get_pub_raw,
     NULL /* pkey_opaque */,
     ed25519_size,
     ed25519_bits,
@@ -219,3 +164,27 @@
     NULL /* param_cmp */,
     ed25519_free,
 };
+
+EVP_PKEY *EVP_PKEY_new_ed25519_public(const uint8_t public_key[32]) {
+  EVP_PKEY *ret = EVP_PKEY_new();
+  if (ret == NULL ||
+      !EVP_PKEY_set_type(ret, EVP_PKEY_ED25519) ||
+      !set_pubkey(ret, public_key)) {
+    EVP_PKEY_free(ret);
+    return NULL;
+  }
+
+  return ret;
+}
+
+EVP_PKEY *EVP_PKEY_new_ed25519_private(const uint8_t private_key[64]) {
+  EVP_PKEY *ret = EVP_PKEY_new();
+  if (ret == NULL ||
+      !EVP_PKEY_set_type(ret, EVP_PKEY_ED25519) ||
+      !set_privkey(ret, private_key)) {
+    EVP_PKEY_free(ret);
+    return NULL;
+  }
+
+  return ret;
+}
diff --git a/src/crypto/evp/p_rsa_asn1.c b/src/crypto/evp/p_rsa_asn1.c
index c097103..85f6fc8 100644
--- a/src/crypto/evp/p_rsa_asn1.c
+++ b/src/crypto/evp/p_rsa_asn1.c
@@ -178,11 +178,6 @@
   rsa_priv_decode,
   rsa_priv_encode,
 
-  NULL /* set_priv_raw */,
-  NULL /* set_pub_raw */,
-  NULL /* get_priv_raw */,
-  NULL /* get_pub_raw */,
-
   rsa_opaque,
 
   int_rsa_size,
diff --git a/src/crypto/evp/p_x25519.c b/src/crypto/evp/p_x25519.c
deleted file mode 100644
index ed7df39..0000000
--- a/src/crypto/evp/p_x25519.c
+++ /dev/null
@@ -1,110 +0,0 @@
-/* Copyright (c) 2019, Google Inc.
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
- * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
- * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
- * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
-
-#include <openssl/evp.h>
-
-#include <openssl/curve25519.h>
-#include <openssl/err.h>
-#include <openssl/mem.h>
-
-#include "internal.h"
-
-
-// X25519 has no parameters to copy.
-static int pkey_x25519_copy(EVP_PKEY_CTX *dst, EVP_PKEY_CTX *src) { return 1; }
-
-static int pkey_x25519_keygen(EVP_PKEY_CTX *ctx, EVP_PKEY *pkey) {
-  X25519_KEY *key = OPENSSL_malloc(sizeof(X25519_KEY));
-  if (key == NULL) {
-    OPENSSL_PUT_ERROR(EVP, ERR_R_MALLOC_FAILURE);
-    return 0;
-  }
-
-  if (!EVP_PKEY_set_type(pkey, EVP_PKEY_X25519)) {
-    OPENSSL_free(key);
-    return 0;
-  }
-
-  X25519_keypair(key->pub, key->priv);
-  key->has_private = 1;
-
-  OPENSSL_free(pkey->pkey.ptr);
-  pkey->pkey.ptr = key;
-  return 1;
-}
-
-static int pkey_x25519_derive(EVP_PKEY_CTX *ctx, uint8_t *out,
-                              size_t *out_len) {
-  if (ctx->pkey == NULL || ctx->peerkey == NULL) {
-    OPENSSL_PUT_ERROR(EVP, EVP_R_KEYS_NOT_SET);
-    return 0;
-  }
-
-  const X25519_KEY *our_key = ctx->pkey->pkey.ptr;
-  const X25519_KEY *peer_key = ctx->peerkey->pkey.ptr;
-  if (our_key == NULL || peer_key == NULL) {
-    OPENSSL_PUT_ERROR(EVP, EVP_R_KEYS_NOT_SET);
-    return 0;
-  }
-
-  if (!our_key->has_private) {
-    OPENSSL_PUT_ERROR(EVP, EVP_R_NOT_A_PRIVATE_KEY);
-    return 0;
-  }
-
-  if (out != NULL) {
-    if (*out_len < 32) {
-      OPENSSL_PUT_ERROR(EVP, EVP_R_BUFFER_TOO_SMALL);
-      return 0;
-    }
-    if (!X25519(out, our_key->priv, peer_key->pub)) {
-      OPENSSL_PUT_ERROR(EVP, EVP_R_INVALID_PEER_KEY);
-      return 0;
-    }
-  }
-
-  *out_len = 32;
-  return 1;
-}
-
-static int pkey_x25519_ctrl(EVP_PKEY_CTX *ctx, int type, int p1, void *p2) {
-  switch (type) {
-    case EVP_PKEY_CTRL_PEER_KEY:
-      // |EVP_PKEY_derive_set_peer| requires the key implement this command,
-      // even if it is a no-op.
-      return 1;
-
-    default:
-      OPENSSL_PUT_ERROR(EVP, EVP_R_COMMAND_NOT_SUPPORTED);
-      return 0;
-  }
-}
-
-const EVP_PKEY_METHOD x25519_pkey_meth = {
-    EVP_PKEY_X25519,
-    NULL /* init */,
-    pkey_x25519_copy,
-    NULL /* cleanup */,
-    pkey_x25519_keygen,
-    NULL /* sign */,
-    NULL /* sign_message */,
-    NULL /* verify */,
-    NULL /* verify_message */,
-    NULL /* verify_recover */,
-    NULL /* encrypt */,
-    NULL /* decrypt */,
-    pkey_x25519_derive,
-    NULL /* paramgen */,
-    pkey_x25519_ctrl,
-};
diff --git a/src/crypto/evp/p_x25519_asn1.c b/src/crypto/evp/p_x25519_asn1.c
deleted file mode 100644
index 9025623..0000000
--- a/src/crypto/evp/p_x25519_asn1.c
+++ /dev/null
@@ -1,249 +0,0 @@
-/* Copyright (c) 2019, Google Inc.
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
- * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
- * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
- * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
-
-#include <openssl/evp.h>
-
-#include <openssl/buf.h>
-#include <openssl/bytestring.h>
-#include <openssl/curve25519.h>
-#include <openssl/err.h>
-#include <openssl/mem.h>
-
-#include "internal.h"
-#include "../internal.h"
-
-
-static void x25519_free(EVP_PKEY *pkey) {
-  OPENSSL_free(pkey->pkey.ptr);
-  pkey->pkey.ptr = NULL;
-}
-
-static int x25519_set_priv_raw(EVP_PKEY *pkey, const uint8_t *in, size_t len) {
-  if (len != 32) {
-    OPENSSL_PUT_ERROR(EVP, EVP_R_DECODE_ERROR);
-    return 0;
-  }
-
-  X25519_KEY *key = OPENSSL_malloc(sizeof(X25519_KEY));
-  if (key == NULL) {
-    OPENSSL_PUT_ERROR(EVP, ERR_R_MALLOC_FAILURE);
-    return 0;
-  }
-
-  OPENSSL_memcpy(key->priv, in, 32);
-  X25519_public_from_private(key->pub, key->priv);
-  key->has_private = 1;
-
-  x25519_free(pkey);
-  pkey->pkey.ptr = key;
-  return 1;
-}
-
-static int x25519_set_pub_raw(EVP_PKEY *pkey, const uint8_t *in, size_t len) {
-  if (len != 32) {
-    OPENSSL_PUT_ERROR(EVP, EVP_R_DECODE_ERROR);
-    return 0;
-  }
-
-  X25519_KEY *key = OPENSSL_malloc(sizeof(X25519_KEY));
-  if (key == NULL) {
-    OPENSSL_PUT_ERROR(EVP, ERR_R_MALLOC_FAILURE);
-    return 0;
-  }
-
-  OPENSSL_memcpy(key->pub, in, 32);
-  key->has_private = 0;
-
-  x25519_free(pkey);
-  pkey->pkey.ptr = key;
-  return 1;
-}
-
-static int x25519_get_priv_raw(const EVP_PKEY *pkey, uint8_t *out,
-                                size_t *out_len) {
-  const X25519_KEY *key = pkey->pkey.ptr;
-  if (!key->has_private) {
-    OPENSSL_PUT_ERROR(EVP, EVP_R_NOT_A_PRIVATE_KEY);
-    return 0;
-  }
-
-  if (out == NULL) {
-    *out_len = 32;
-    return 1;
-  }
-
-  if (*out_len < 32) {
-    OPENSSL_PUT_ERROR(EVP, EVP_R_BUFFER_TOO_SMALL);
-    return 0;
-  }
-
-  OPENSSL_memcpy(out, key->priv, 32);
-  *out_len = 32;
-  return 1;
-}
-
-static int x25519_get_pub_raw(const EVP_PKEY *pkey, uint8_t *out,
-                               size_t *out_len) {
-  const X25519_KEY *key = pkey->pkey.ptr;
-  if (out == NULL) {
-    *out_len = 32;
-    return 1;
-  }
-
-  if (*out_len < 32) {
-    OPENSSL_PUT_ERROR(EVP, EVP_R_BUFFER_TOO_SMALL);
-    return 0;
-  }
-
-  OPENSSL_memcpy(out, key->pub, 32);
-  *out_len = 32;
-  return 1;
-}
-
-static int x25519_pub_decode(EVP_PKEY *out, CBS *params, CBS *key) {
-  // See RFC 8410, section 4.
-
-  // The parameters must be omitted. Public keys have length 32.
-  if (CBS_len(params) != 0) {
-    OPENSSL_PUT_ERROR(EVP, EVP_R_DECODE_ERROR);
-    return 0;
-  }
-
-  return x25519_set_pub_raw(out, CBS_data(key), CBS_len(key));
-}
-
-static int x25519_pub_encode(CBB *out, const EVP_PKEY *pkey) {
-  const X25519_KEY *key = pkey->pkey.ptr;
-
-  // See RFC 8410, section 4.
-  CBB spki, algorithm, oid, key_bitstring;
-  if (!CBB_add_asn1(out, &spki, CBS_ASN1_SEQUENCE) ||
-      !CBB_add_asn1(&spki, &algorithm, CBS_ASN1_SEQUENCE) ||
-      !CBB_add_asn1(&algorithm, &oid, CBS_ASN1_OBJECT) ||
-      !CBB_add_bytes(&oid, x25519_asn1_meth.oid, x25519_asn1_meth.oid_len) ||
-      !CBB_add_asn1(&spki, &key_bitstring, CBS_ASN1_BITSTRING) ||
-      !CBB_add_u8(&key_bitstring, 0 /* padding */) ||
-      !CBB_add_bytes(&key_bitstring, key->pub, 32) ||
-      !CBB_flush(out)) {
-    OPENSSL_PUT_ERROR(EVP, EVP_R_ENCODE_ERROR);
-    return 0;
-  }
-
-  return 1;
-}
-
-static int x25519_pub_cmp(const EVP_PKEY *a, const EVP_PKEY *b) {
-  const X25519_KEY *a_key = a->pkey.ptr;
-  const X25519_KEY *b_key = b->pkey.ptr;
-  return OPENSSL_memcmp(a_key->pub, b_key->pub, 32) == 0;
-}
-
-static int x25519_priv_decode(EVP_PKEY *out, CBS *params, CBS *key) {
-  // See RFC 8410, section 7.
-
-  // Parameters must be empty. The key is a 32-byte value wrapped in an extra
-  // OCTET STRING layer.
-  CBS inner;
-  if (CBS_len(params) != 0 ||
-      !CBS_get_asn1(key, &inner, CBS_ASN1_OCTETSTRING) ||
-      CBS_len(key) != 0) {
-    OPENSSL_PUT_ERROR(EVP, EVP_R_DECODE_ERROR);
-    return 0;
-  }
-
-  return x25519_set_priv_raw(out, CBS_data(&inner), CBS_len(&inner));
-}
-
-static int x25519_priv_encode(CBB *out, const EVP_PKEY *pkey) {
-  X25519_KEY *key = pkey->pkey.ptr;
-  if (!key->has_private) {
-    OPENSSL_PUT_ERROR(EVP, EVP_R_NOT_A_PRIVATE_KEY);
-    return 0;
-  }
-
-  // See RFC 8410, section 7.
-  CBB pkcs8, algorithm, oid, private_key, inner;
-  if (!CBB_add_asn1(out, &pkcs8, CBS_ASN1_SEQUENCE) ||
-      !CBB_add_asn1_uint64(&pkcs8, 0 /* version */) ||
-      !CBB_add_asn1(&pkcs8, &algorithm, CBS_ASN1_SEQUENCE) ||
-      !CBB_add_asn1(&algorithm, &oid, CBS_ASN1_OBJECT) ||
-      !CBB_add_bytes(&oid, x25519_asn1_meth.oid, x25519_asn1_meth.oid_len) ||
-      !CBB_add_asn1(&pkcs8, &private_key, CBS_ASN1_OCTETSTRING) ||
-      !CBB_add_asn1(&private_key, &inner, CBS_ASN1_OCTETSTRING) ||
-      // The PKCS#8 encoding stores only the 32-byte seed which is the first 32
-      // bytes of the private key.
-      !CBB_add_bytes(&inner, key->priv, 32) ||
-      !CBB_flush(out)) {
-    OPENSSL_PUT_ERROR(EVP, EVP_R_ENCODE_ERROR);
-    return 0;
-  }
-
-  return 1;
-}
-
-static int x25519_size(const EVP_PKEY *pkey) { return 32; }
-
-static int x25519_bits(const EVP_PKEY *pkey) { return 253; }
-
-const EVP_PKEY_ASN1_METHOD x25519_asn1_meth = {
-    EVP_PKEY_X25519,
-    {0x2b, 0x65, 0x6e},
-    3,
-    x25519_pub_decode,
-    x25519_pub_encode,
-    x25519_pub_cmp,
-    x25519_priv_decode,
-    x25519_priv_encode,
-    x25519_set_priv_raw,
-    x25519_set_pub_raw,
-    x25519_get_priv_raw,
-    x25519_get_pub_raw,
-    NULL /* pkey_opaque */,
-    x25519_size,
-    x25519_bits,
-    NULL /* param_missing */,
-    NULL /* param_copy */,
-    NULL /* param_cmp */,
-    x25519_free,
-};
-
-int EVP_PKEY_set1_tls_encodedpoint(EVP_PKEY *pkey, const uint8_t *in,
-                                   size_t len) {
-  // TODO(davidben): In OpenSSL, this function also works for |EVP_PKEY_EC|
-  // keys. Add support if it ever comes up.
-  if (pkey->type != EVP_PKEY_X25519) {
-    OPENSSL_PUT_ERROR(EVP, EVP_R_UNSUPPORTED_PUBLIC_KEY_TYPE);
-    return 0;
-  }
-
-  return x25519_set_pub_raw(pkey, in, len);
-}
-
-size_t EVP_PKEY_get1_tls_encodedpoint(const EVP_PKEY *pkey, uint8_t **out_ptr) {
-  // TODO(davidben): In OpenSSL, this function also works for |EVP_PKEY_EC|
-  // keys. Add support if it ever comes up.
-  if (pkey->type != EVP_PKEY_X25519) {
-    OPENSSL_PUT_ERROR(EVP, EVP_R_UNSUPPORTED_PUBLIC_KEY_TYPE);
-    return 0;
-  }
-
-  const X25519_KEY *key = pkey->pkey.ptr;
-  if (key == NULL) {
-    OPENSSL_PUT_ERROR(EVP, EVP_R_NO_KEY_SET);
-    return 0;
-  }
-
-  *out_ptr = BUF_memdup(key->pub, 32);
-  return *out_ptr == NULL ? 0 : 32;
-}
diff --git a/src/crypto/fipsmodule/CMakeLists.txt b/src/crypto/fipsmodule/CMakeLists.txt
index e978820..d1e2cb9 100644
--- a/src/crypto/fipsmodule/CMakeLists.txt
+++ b/src/crypto/fipsmodule/CMakeLists.txt
@@ -129,10 +129,6 @@
 perlasm(x86-mont.${ASM_EXT} bn/asm/x86-mont.pl)
 
 if(FIPS_DELOCATE)
-  if(FIPS_SHARED)
-    error("Can't set both delocate and shared mode for FIPS build")
-  endif()
-
   if(OPENSSL_NO_ASM)
     # If OPENSSL_NO_ASM was defined then ASM will not have been enabled, but in
     # FIPS mode we have to have it because the module build requires going via
@@ -193,49 +189,12 @@
 
     OBJECT
 
-    fips_shared_support.c
     is_fips.c
   )
 
   add_dependencies(fipsmodule global_target)
 
   set_target_properties(fipsmodule PROPERTIES LINKER_LANGUAGE C)
-elseif(FIPS_SHARED)
-  if(NOT BUILD_SHARED_LIBS)
-    error("FIPS_SHARED set but not BUILD_SHARED_LIBS")
-  endif()
-
-  add_library(
-    fipsmodule
-
-    OBJECT
-
-    fips_shared_support.c
-    is_fips.c
-  )
-
-  add_dependencies(fipsmodule global_target)
-
-  add_library(
-    bcm_library
-
-    STATIC
-
-    bcm.c
-
-    ${BCM_ASM_SOURCES}
-  )
-
-  add_dependencies(bcm_library global_target)
-
-  add_custom_command(
-    OUTPUT bcm.o
-    COMMAND ld -r -T ${CMAKE_CURRENT_SOURCE_DIR}/fips_shared.lds -o bcm.o --whole-archive $<TARGET_FILE:bcm_library>
-    DEPENDS bcm_library fips_shared.lds
-    WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
-  )
-
-  add_custom_target(bcm_o_target DEPENDS bcm.o)
 else()
   add_library(
     fipsmodule
@@ -243,7 +202,6 @@
     OBJECT
 
     bcm.c
-    fips_shared_support.c
     is_fips.c
 
     ${BCM_ASM_SOURCES}
diff --git a/src/crypto/fipsmodule/FIPS.md b/src/crypto/fipsmodule/FIPS.md
index 69719b6..a60e2bf 100644
--- a/src/crypto/fipsmodule/FIPS.md
+++ b/src/crypto/fipsmodule/FIPS.md
@@ -13,9 +13,9 @@
 
 ## Running CAVP tests
 
-CAVP results are calculated by `util/fipstools/cavp`, but that binary is almost always run by `util/fipstools/run_cavp.go`. The latter knows the set of tests to be processed and the flags needed to configure `cavp` for each one. It must be run from the top of a CAVP directory and needs the following options:
+CAVP results are calculated by `fipstools/cavp`, but that binary is almost always run by `fipstools/run_cavp.go`. The latter knows the set of tests to be processed and the flags needed to configure `cavp` for each one. It must be run from the top of a CAVP directory and needs the following options:
 
-1. `-oracle-bin`: points to the location of `util/fipstools/cavp`
+1. `-oracle-bin`: points to the location of `fipstools/cavp`
 2. `-no-fax`: this is needed to suppress checking of the FAX files, which are only included in sample sets.
 
 ## Breaking power-on and continuous tests
@@ -62,25 +62,9 @@
 
 BoringCrypto is linked (often statically) into a large number of binaries. It would be a significant cost if each of these binaries had to be post-processed in order to calculate the known-good HMAC value. We would much prefer if the value could be calculated, once, when BoringCrypto itself is compiled.
 
-In order for the value to be calculated before the final link, there can be no relocations in the hashed code and data. This document describes how we build C and assembly code in order to produce a binary file containing all the code and data for the FIPS module without that code having any relocations.
+In order for the value to be calculated before the final link, there can be no relocations in the hashed code and data. This document describes how we build C and assembly code in order to produce an object file containing all the code and data for the FIPS module without that code having any relocations.
 
-There are two build configurations supported: static and shared. The shared build produces `libcrypto.so`, which includes the FIPS module and is significantly more straightforward and so is described first:
-
-### Shared build
-
-First, all the C source files for the module are compiled as a single unit by compiling a single source file that `#include`s them all (this is `bcm.c`). This, along with some assembly sources, comprise the FIPS module.
-
-The object files resulting from compiling (or assembling) those files is linked in partial-linking mode with a linker script that causes the linker to insert symbols marking the beginning and end of the text and rodata sections. The linker script also discards other types of data sections to ensure that no unhashed data is used by the module.
-
-One source of such data are `rel.ro` sections, which contain data that includes function pointers. Since these function pointers are absolute, they are written by the dynamic linker at run-time and so we must eliminate them. The pattern that causes them is when we have a static `EVP_MD` or `EVP_CIPHER` object thus, inside the module, this pattern is changed to instead reserve space in the BSS for the object, and to add a `CRYPTO_once_t` to protect its initialisation.
-
-Once the partially-linked result is linked again, with other parts of libcrypto, to produce `libcrypto.so`, the contents of the module are fixed, as required. The module code uses the linker-added symbols to find the its code and data at run-time and hashes them upon initialisation. The result is compared against a value stored inside `libcrypto.so`, but outside of the module. That value will, initially, be incorrect, but `inject-hash.go` can inject the correct value.
-
-### Static build
-
-The static build cannot depend on the shared-object link to resolve relocations and thus must take another path.
-
-As with the shared build, all the C sources are build in a single compilation unit. The `-fPIC` flag is used to cause the compiler to use IP-relative addressing in many (but not all) cases. Also the `-S` flag is used to instruct the compiler to produce a textual assembly file rather than a binary object file.
+First, all the C source files for the module are compiled as a single unit by compiling a single source file that `#include`s them all (this is `bcm.c`). The `-fPIC` flag is used to cause the compiler to use IP-relative addressing in many (but not all) cases. Also the `-S` flag is used to instruct the compiler to produce a textual assembly file rather than a binary object file.
 
 The textual assembly file is then processed by a script to merge in assembly implementations of some primitives and to eliminate the remaining sources of relocations.
 
@@ -96,9 +80,9 @@
 
 ##### Read-only data
 
-Normally read-only data is placed in an `.rodata` segment that doesn't get mapped into memory with execute permissions. However, the offset of the data segment from the text segment is another thing that isn't determined until the final link. In order to fix data offsets before the link, read-only data is simply placed in the module's `.text` segment. This might make building ROP chains easier for an attacker, but so it goes.
+Normally read-only data is placed in a `.data` segment that doesn't get mapped into memory with execute permissions. However, the offset of the data segment from the text segment is another thing that isn't determined until the final link. In order to fix data offsets before the link, read-only data is simply placed in the module's `.text` segment. This might make building ROP chains easier for an attacker, but so it goes.
 
-Data containing function pointers remains an issue. The source-code changes described above for the shared build apply here too, but no direct references to a BSS section are possible because the offset to that section is not known at compile time. Instead, the script generates functions outside of the module that return pointers to these areas of memory—they effectively act like special-purpose malloc calls that cannot fail.
+One special case is `rel.ro` data, which is data that contains function pointers. Since these function pointers are absolute, they are written by the dynamic linker at run-time and so we must eliminate them. The pattern that causes them is when we have a static `EVP_MD` or `EVP_CIPHER` object thus, inside the module, we'll change this pattern to instead to reserve space in the BSS for the object, and add a `CRYPTO_once_t` to protect its initialisation. The script will generate functions outside of the module that return pointers to these areas of memory—they effectively act like a special-purpose malloc calls that cannot fail.
 
 ##### Read-write data
 
@@ -108,7 +92,7 @@
 
 ##### Other transforms
 
-The script performs a number of other transformations which are worth noting but do not warrant their own discussions:
+The script performs a number of other transformations which are worth noting but do not warrant their own sections:
 
 1.  It duplicates each global symbol with a local symbol that has `_local_target` appended to the name. References to the global symbols are rewritten to use these duplicates instead. Otherwise, although the generated code uses IP-relative references, relocations are emitted for global symbols in case they are overridden by a different object file during the link.
 1.  Various sections, notably `.rodata`, are moved to the `.text` section, inside the module, so module code may reference it without relocations.
@@ -128,15 +112,15 @@
 
 (This is based on reading OpenSSL's [user guide](https://www.openssl.org/docs/fips/UserGuide-2.0.pdf) and inspecting the code of OpenSSL FIPS 2.0.12.)
 
-OpenSSL's solution to this problem is very similar to our shared build, with just a few differences:
+OpenSSL's solution to this problem is broadly similar but has a number of differences:
 
 1.  OpenSSL deals with run-time relocations by not hashing parts of the module's data.
-1.  OpenSSL uses `ld -r` (the partial linking mode) to merge a number of object files into their `fipscanister.o`. For BoringCrypto's static build, we merge all the C source files by building a single C file that #includes all the others, and we merge the assembly sources by appending them to the assembly output from the C compiler.
-1.  OpenSSL depends on the link order and inserts two object files, `fips_start.o` and `fips_end.o`, in order to establish the `module_start` and `module_end` values. BoringCrypto adds labels at the correct places in the assembly for the static build, or uses a linker script for the shared build.
+1.  OpenSSL uses `ld -r` (the partial linking mode) to merge a number of object files into their `fipscanister.o`. For BoringCrypto, we merge all the C source files by building a single C file that #includes all the others, and we merge the assembly sources by appending them to the assembly output from the C compiler.
+1.  OpenSSL depends on the link order and inserts two object files, `fips_start.o` and `fips_end.o`, in order to establish the `module_start` and `module_end` values. BoringCrypto adds labels at the correct places in the assembly.
 1.  OpenSSL calculates the hash after the final link and either injects it into the binary or recompiles with the value of the hash passed in as a #define. BoringCrypto calculates it prior to the final link and injects it into the object file.
 1.  OpenSSL references read-write data directly, since it can know the offsets to it. BoringCrypto indirects these loads and stores.
 1.  OpenSSL doesn't run the power-on test until `FIPS_module_mode_set` is called. BoringCrypto does it in a constructor function. Failure of the test is non-fatal in OpenSSL, BoringCrypto will crash.
-1.  Since the contents of OpenSSL's module change between compilation and use, OpenSSL generates `fipscanister.o.sha1` to check that the compiled object doesn't change before linking. Since BoringCrypto's module is fixed after compilation (in the static case), the final integrity check is unbroken through the linking process.
+1.  Since the contents of OpenSSL's module change between compilation and use, OpenSSL generates `fipscanister.o.sha1` to check that the compiled object doesn't change before linking. Since BoringCrypto's module is fixed after compilation, the final integrity check is unbroken through the linking process.
 
 Some of the similarities are worth noting:
 
diff --git a/src/crypto/fipsmodule/aes/aes_test.cc b/src/crypto/fipsmodule/aes/aes_test.cc
index 7fadb35..1f9a491 100644
--- a/src/crypto/fipsmodule/aes/aes_test.cc
+++ b/src/crypto/fipsmodule/aes/aes_test.cc
@@ -122,40 +122,12 @@
                                ciphertext.data(), ciphertext.size()));
 }
 
-static void TestKeyWrapWithPadding(FileTest *t) {
-  std::vector<uint8_t> key, plaintext, ciphertext;
-  ASSERT_TRUE(t->GetBytes(&key, "Key"));
-  ASSERT_TRUE(t->GetBytes(&plaintext, "Plaintext"));
-  ASSERT_TRUE(t->GetBytes(&ciphertext, "Ciphertext"));
-
-  // Test encryption.
-  AES_KEY aes_key;
-  ASSERT_EQ(0, AES_set_encrypt_key(key.data(), 8 * key.size(), &aes_key));
-  std::unique_ptr<uint8_t[]> buf(new uint8_t[plaintext.size() + 15]);
-  size_t len;
-  ASSERT_TRUE(AES_wrap_key_padded(&aes_key, buf.get(), &len,
-                                  plaintext.size() + 15, plaintext.data(),
-                                  plaintext.size()));
-  EXPECT_EQ(Bytes(ciphertext), Bytes(buf.get(), static_cast<size_t>(len)));
-
-  // Test decryption
-  ASSERT_EQ(0, AES_set_decrypt_key(key.data(), 8 * key.size(), &aes_key));
-  buf.reset(new uint8_t[ciphertext.size() - 8]);
-  ASSERT_TRUE(AES_unwrap_key_padded(&aes_key, buf.get(), &len,
-                                    ciphertext.size() - 8, ciphertext.data(),
-                                    ciphertext.size()));
-  ASSERT_EQ(len, plaintext.size());
-  EXPECT_EQ(Bytes(plaintext), Bytes(buf.get(), static_cast<size_t>(len)));
-}
-
 TEST(AESTest, TestVectors) {
   FileTestGTest("crypto/fipsmodule/aes/aes_tests.txt", [](FileTest *t) {
     if (t->GetParameter() == "Raw") {
       TestRaw(t);
     } else if (t->GetParameter() == "KeyWrap") {
       TestKeyWrap(t);
-    } else if (t->GetParameter() == "KeyWrapWithPadding") {
-      TestKeyWrapWithPadding(t);
     } else {
       ADD_FAILURE() << "Unknown mode " << t->GetParameter();
     }
@@ -200,48 +172,6 @@
   });
 }
 
-TEST(AESTest, WycheproofKeyWrapWithPadding) {
-  FileTestGTest("third_party/wycheproof_testvectors/kwp_test.txt",
-                [](FileTest *t) {
-    std::string key_size;
-    ASSERT_TRUE(t->GetInstruction(&key_size, "keySize"));
-    std::vector<uint8_t> ct, key, msg;
-    ASSERT_TRUE(t->GetBytes(&ct, "ct"));
-    ASSERT_TRUE(t->GetBytes(&key, "key"));
-    ASSERT_TRUE(t->GetBytes(&msg, "msg"));
-    ASSERT_EQ(static_cast<unsigned>(atoi(key_size.c_str())), key.size() * 8);
-    WycheproofResult result;
-    ASSERT_TRUE(GetWycheproofResult(t, &result));
-
-    // Wycheproof contains test vectors with empty messages that it believes
-    // should pass. However, both RFC 5649 and SP 800-38F section 5.3.1 say that
-    // the minimum length is one. Therefore we consider test cases with an empty
-    // message to be invalid.
-    if (result != WycheproofResult::kInvalid && !msg.empty()) {
-      AES_KEY aes;
-      ASSERT_EQ(0, AES_set_decrypt_key(key.data(), 8 * key.size(), &aes));
-      std::vector<uint8_t> out(ct.size() - 8);
-      size_t len;
-      ASSERT_TRUE(AES_unwrap_key_padded(&aes, out.data(), &len, ct.size() - 8,
-                                        ct.data(), ct.size()));
-      EXPECT_EQ(Bytes(msg), Bytes(out.data(), len));
-
-      out.resize(msg.size() + 15);
-      ASSERT_EQ(0, AES_set_encrypt_key(key.data(), 8 * key.size(), &aes));
-      ASSERT_TRUE(AES_wrap_key_padded(&aes, out.data(), &len, msg.size() + 15,
-                                      msg.data(), msg.size()));
-      EXPECT_EQ(Bytes(ct), Bytes(out.data(), len));
-    } else {
-      AES_KEY aes;
-      ASSERT_EQ(0, AES_set_decrypt_key(key.data(), 8 * key.size(), &aes));
-      std::vector<uint8_t> out(ct.size());
-      size_t len;
-      ASSERT_FALSE(AES_unwrap_key_padded(&aes, out.data(), &len, ct.size(),
-                                         ct.data(), ct.size()));
-    }
-  });
-}
-
 TEST(AESTest, WrapBadLengths) {
   uint8_t key[128/8] = {0};
   AES_KEY aes;
diff --git a/src/crypto/fipsmodule/aes/aes_tests.txt b/src/crypto/fipsmodule/aes/aes_tests.txt
index efbe294..d4e4c61 100644
--- a/src/crypto/fipsmodule/aes/aes_tests.txt
+++ b/src/crypto/fipsmodule/aes/aes_tests.txt
@@ -48,16 +48,3 @@
 Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
 Plaintext = 00112233445566778899aabbccddeeff000102030405060708090a0b0c0d0e0f
 Ciphertext = 28c9f404c4b810f4cbccb35cfb87f8263f5786e2d80ed326cbc7f0e71a99f43bfb988b9b7a02dd21
-
-
-# Test vectors from https://tools.ietf.org/html/rfc5649#section-6
-
-Mode = KeyWrapWithPadding
-Key = 5840df6e29b02af1ab493b705bf16ea1ae8338f4dcc176a8
-Plaintext = c37b7e6492584340bed12207808941155068f738
-Ciphertext = 138bdeaa9b8fa7fc61f97742e72248ee5ae6ae5360d1ae6a5f54f373fa543b6a
-
-Mode = KeyWrapWithPadding
-Key = 5840df6e29b02af1ab493b705bf16ea1ae8338f4dcc176a8
-Plaintext = 466f7250617369
-Ciphertext = afbeb0f07dfbf5419200f2ccb50bb24f
diff --git a/src/crypto/fipsmodule/aes/asm/aes-586.pl b/src/crypto/fipsmodule/aes/asm/aes-586.pl
index 9b373de..25f1813 100755
--- a/src/crypto/fipsmodule/aes/asm/aes-586.pl
+++ b/src/crypto/fipsmodule/aes/asm/aes-586.pl
@@ -2997,4 +2997,4 @@
 
 &asm_finish();
 
-close STDOUT or die "error closing STDOUT";
+close STDOUT;
diff --git a/src/crypto/fipsmodule/aes/asm/aes-armv4.pl b/src/crypto/fipsmodule/aes/asm/aes-armv4.pl
index 9eebb22..f4ae922 100644
--- a/src/crypto/fipsmodule/aes/asm/aes-armv4.pl
+++ b/src/crypto/fipsmodule/aes/asm/aes-armv4.pl
@@ -1247,4 +1247,4 @@
 close SELF;
 
 print $code;
-close STDOUT or die "error closing STDOUT";	# enforce flush
+close STDOUT;	# enforce flush
diff --git a/src/crypto/fipsmodule/aes/asm/aes-x86_64.pl b/src/crypto/fipsmodule/aes/asm/aes-x86_64.pl
index 5b95785..ea8b9a4 100755
--- a/src/crypto/fipsmodule/aes/asm/aes-x86_64.pl
+++ b/src/crypto/fipsmodule/aes/asm/aes-x86_64.pl
@@ -2906,4 +2906,4 @@
 
 print $code;
 
-close STDOUT or die "error closing STDOUT";
+close STDOUT;
diff --git a/src/crypto/fipsmodule/aes/asm/aesni-x86.pl b/src/crypto/fipsmodule/aes/asm/aesni-x86.pl
index d57127a..fcb5b98 100644
--- a/src/crypto/fipsmodule/aes/asm/aesni-x86.pl
+++ b/src/crypto/fipsmodule/aes/asm/aesni-x86.pl
@@ -2551,4 +2551,4 @@
 
 &asm_finish();
 
-close STDOUT or die "error closing STDOUT";
+close STDOUT;
diff --git a/src/crypto/fipsmodule/aes/asm/aesni-x86_64.pl b/src/crypto/fipsmodule/aes/asm/aesni-x86_64.pl
index 15f6805..b608425 100644
--- a/src/crypto/fipsmodule/aes/asm/aesni-x86_64.pl
+++ b/src/crypto/fipsmodule/aes/asm/aesni-x86_64.pl
@@ -5108,4 +5108,4 @@
 
 print $code;
 
-close STDOUT or die "error closing STDOUT";
+close STDOUT;
diff --git a/src/crypto/fipsmodule/aes/asm/aesp8-ppc.pl b/src/crypto/fipsmodule/aes/asm/aesp8-ppc.pl
index 62d4842..201da1a 100644
--- a/src/crypto/fipsmodule/aes/asm/aesp8-ppc.pl
+++ b/src/crypto/fipsmodule/aes/asm/aesp8-ppc.pl
@@ -1,5 +1,5 @@
 #! /usr/bin/env perl
-# Copyright 2014-2018 The OpenSSL Project Authors. All Rights Reserved.
+# Copyright 2014-2016 The OpenSSL Project Authors. All Rights Reserved.
 #
 # Licensed under the OpenSSL license (the "License").  You may not use
 # this file except in compliance with the License.  You can obtain a copy
@@ -40,8 +40,6 @@
 #		CBC en-/decrypt	CTR	XTS
 # POWER8[le]	3.96/0.72	0.74	1.1
 # POWER8[be]	3.75/0.65	0.66	1.0
-# POWER9[le]	4.02/0.86	0.84	1.05
-# POWER9[be]	3.99/0.78	0.79	0.97
 
 $flavour = shift;
 
@@ -1829,7 +1827,7 @@
 	stvx_u		$out1,$x10,$out
 	stvx_u		$out2,$x20,$out
 	addi		$out,$out,0x30
-	b		Lctr32_enc8x_done
+	b		Lcbc_dec8x_done
 
 .align	5
 Lctr32_enc8x_two:
@@ -1841,7 +1839,7 @@
 	stvx_u		$out0,$x00,$out
 	stvx_u		$out1,$x10,$out
 	addi		$out,$out,0x20
-	b		Lctr32_enc8x_done
+	b		Lcbc_dec8x_done
 
 .align	5
 Lctr32_enc8x_one:
@@ -3804,4 +3802,4 @@
         print $_,"\n";
 }
 
-close STDOUT or die "error closing STDOUT";
+close STDOUT;
diff --git a/src/crypto/fipsmodule/aes/asm/aesv8-armx.pl b/src/crypto/fipsmodule/aes/asm/aesv8-armx.pl
index 187c221..13f86a0 100644
--- a/src/crypto/fipsmodule/aes/asm/aesv8-armx.pl
+++ b/src/crypto/fipsmodule/aes/asm/aesv8-armx.pl
@@ -1018,4 +1018,4 @@
     }
 }
 
-close STDOUT or die "error closing STDOUT";
+close STDOUT;
diff --git a/src/crypto/fipsmodule/aes/asm/bsaes-armv7.pl b/src/crypto/fipsmodule/aes/asm/bsaes-armv7.pl
index 932b3b6..d4db3b4 100644
--- a/src/crypto/fipsmodule/aes/asm/bsaes-armv7.pl
+++ b/src/crypto/fipsmodule/aes/asm/bsaes-armv7.pl
@@ -2431,4 +2431,4 @@
 
 print $code;
 
-close STDOUT or die "error closing STDOUT";
+close STDOUT;
diff --git a/src/crypto/fipsmodule/aes/asm/vpaes-armv8.pl b/src/crypto/fipsmodule/aes/asm/vpaes-armv8.pl
index bae5e7e..5fa06d8 100755
--- a/src/crypto/fipsmodule/aes/asm/vpaes-armv8.pl
+++ b/src/crypto/fipsmodule/aes/asm/vpaes-armv8.pl
@@ -1359,4 +1359,4 @@
 
 print $code;
 
-close STDOUT or die "error closing STDOUT";
+close STDOUT;
diff --git a/src/crypto/fipsmodule/aes/asm/vpaes-x86.pl b/src/crypto/fipsmodule/aes/asm/vpaes-x86.pl
index 2b40362..81e7e84 100644
--- a/src/crypto/fipsmodule/aes/asm/vpaes-x86.pl
+++ b/src/crypto/fipsmodule/aes/asm/vpaes-x86.pl
@@ -920,4 +920,4 @@
 
 &asm_finish();
 
-close STDOUT or die "error closing STDOUT";
+close STDOUT;
diff --git a/src/crypto/fipsmodule/aes/asm/vpaes-x86_64.pl b/src/crypto/fipsmodule/aes/asm/vpaes-x86_64.pl
index 45463e8..9429344 100644
--- a/src/crypto/fipsmodule/aes/asm/vpaes-x86_64.pl
+++ b/src/crypto/fipsmodule/aes/asm/vpaes-x86_64.pl
@@ -1550,4 +1550,4 @@
 
 print $code;
 
-close STDOUT or die "error closing STDOUT";
+close STDOUT;
diff --git a/src/crypto/fipsmodule/aes/key_wrap.c b/src/crypto/fipsmodule/aes/key_wrap.c
index 9a5b28d..a52c983 100644
--- a/src/crypto/fipsmodule/aes/key_wrap.c
+++ b/src/crypto/fipsmodule/aes/key_wrap.c
@@ -48,7 +48,6 @@
 
 #include <openssl/aes.h>
 
-#include <assert.h>
 #include <limits.h>
 #include <string.h>
 
@@ -101,17 +100,18 @@
   return (int)in_len + 8;
 }
 
-// aes_unwrap_key_inner performs steps one and two from
-// https://tools.ietf.org/html/rfc3394#section-2.2.2
-static int aes_unwrap_key_inner(const AES_KEY *key, uint8_t *out,
-                                uint8_t out_iv[8], const uint8_t *in,
-                                size_t in_len) {
+int AES_unwrap_key(const AES_KEY *key, const uint8_t *iv, uint8_t *out,
+                   const uint8_t *in, size_t in_len) {
   // See RFC 3394, section 2.2.2. Additionally, note that section 2 requires the
   // plaintext be at least two 8-byte blocks, so the ciphertext must be at least
   // three blocks.
 
   if (in_len > INT_MAX || in_len < 24 || in_len % 8 != 0) {
-    return 0;
+    return -1;
+  }
+
+  if (iv == NULL) {
+    iv = kDefaultIV;
   }
 
   uint8_t A[AES_BLOCK_SIZE];
@@ -133,104 +133,9 @@
     }
   }
 
-  memcpy(out_iv, A, 8);
-  return 1;
-}
-
-int AES_unwrap_key(const AES_KEY *key, const uint8_t *iv, uint8_t *out,
-                   const uint8_t *in, size_t in_len) {
-  uint8_t calculated_iv[8];
-  if (!aes_unwrap_key_inner(key, out, calculated_iv, in, in_len)) {
-    return -1;
-  }
-
-  if (iv == NULL) {
-    iv = kDefaultIV;
-  }
-  if (CRYPTO_memcmp(calculated_iv, iv, 8) != 0) {
+  if (CRYPTO_memcmp(A, iv, 8) != 0) {
     return -1;
   }
 
   return (int)in_len - 8;
 }
-
-// kPaddingConstant is used in Key Wrap with Padding. See
-// https://tools.ietf.org/html/rfc5649#section-3
-static const uint8_t kPaddingConstant[4] = {0xa6, 0x59, 0x59, 0xa6};
-
-int AES_wrap_key_padded(const AES_KEY *key, uint8_t *out, size_t *out_len,
-                        size_t max_out, const uint8_t *in, size_t in_len) {
-  // See https://tools.ietf.org/html/rfc5649#section-4.1
-  const uint32_t in_len32_be = CRYPTO_bswap4(in_len);
-  const uint64_t in_len64 = in_len;
-  const size_t padded_len = (in_len + 7) & ~7;
-
-  *out_len = 0;
-  if (in_len == 0 || in_len64 > 0xffffffffu || in_len + 7 < in_len ||
-      padded_len + 8 < padded_len || max_out < padded_len + 8) {
-    return 0;
-  }
-
-  uint8_t block[AES_BLOCK_SIZE];
-  memcpy(block, kPaddingConstant, sizeof(kPaddingConstant));
-  memcpy(block + 4, &in_len32_be, sizeof(in_len32_be));
-
-  if (in_len <= 8) {
-    memset(block + 8, 0, 8);
-    memcpy(block + 8, in, in_len);
-    AES_encrypt(block, out, key);
-    *out_len = AES_BLOCK_SIZE;
-    return 1;
-  }
-
-  uint8_t *padded_in = OPENSSL_malloc(padded_len);
-  if (padded_in == NULL) {
-    return 0;
-  }
-  assert(padded_len >= 8);
-  memset(padded_in + padded_len - 8, 0, 8);
-  memcpy(padded_in, in, in_len);
-  const int ret = AES_wrap_key(key, block, out, padded_in, padded_len);
-  OPENSSL_free(padded_in);
-  if (ret < 0) {
-    return 0;
-  }
-  *out_len = ret;
-  return 1;
-}
-
-int AES_unwrap_key_padded(const AES_KEY *key, 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 < AES_BLOCK_SIZE || max_out < in_len - 8) {
-    return 0;
-  }
-
-  uint8_t iv[8];
-  if (in_len == AES_BLOCK_SIZE) {
-    uint8_t block[AES_BLOCK_SIZE];
-    AES_decrypt(in, block, key);
-    memcpy(iv, block, sizeof(iv));
-    memcpy(out, block + 8, 8);
-  } else if (!aes_unwrap_key_inner(key, out, iv, in, in_len)) {
-    return 0;
-  }
-  assert(in_len % 8 == 0);
-
-  crypto_word_t ok = constant_time_eq_int(
-      CRYPTO_memcmp(iv, kPaddingConstant, sizeof(kPaddingConstant)), 0);
-
-  uint32_t claimed_len32;
-  memcpy(&claimed_len32, iv + 4, sizeof(claimed_len32));
-  const size_t claimed_len = CRYPTO_bswap4(claimed_len32);
-  ok &= ~constant_time_is_zero_w(claimed_len);
-  ok &= constant_time_eq_w((claimed_len - 1) >> 3, (in_len - 9) >> 3);
-
-  // Check that padding bytes are all zero.
-  for (size_t i = in_len - 15; i < in_len - 8; i++) {
-    ok &= constant_time_is_zero_w(constant_time_ge_8(i, claimed_len) & out[i]);
-  }
-
-  *out_len = constant_time_select_w(ok, claimed_len, 0);
-  return ok & 1;
-}
diff --git a/src/crypto/fipsmodule/bcm.c b/src/crypto/fipsmodule/bcm.c
index 7666222..e15ecb8 100644
--- a/src/crypto/fipsmodule/bcm.c
+++ b/src/crypto/fipsmodule/bcm.c
@@ -76,6 +76,7 @@
 #include "md4/md4.c"
 #include "md5/md5.c"
 #include "modes/cbc.c"
+#include "modes/ccm.c"
 #include "modes/cfb.c"
 #include "modes/ctr.c"
 #include "modes/gcm.c"
@@ -99,16 +100,11 @@
 #if defined(BORINGSSL_FIPS)
 
 #if !defined(OPENSSL_ASAN)
-// These symbols are filled in by delocate.go (in static builds) or a linker
-// script (in shared builds). They point to the start and end of the module, and
-// the location of the integrity hash, respectively.
+// These symbols are filled in by delocate.go. They point to the start and end
+// of the module, and the location of the integrity hash, respectively.
 extern const uint8_t BORINGSSL_bcm_text_start[];
 extern const uint8_t BORINGSSL_bcm_text_end[];
 extern const uint8_t BORINGSSL_bcm_text_hash[];
-#if defined(BORINGSSL_SHARED_LIBRARY)
-extern const uint8_t BORINGSSL_bcm_rodata_start[];
-extern const uint8_t BORINGSSL_bcm_rodata_end[];
-#endif
 #endif
 
 static void __attribute__((constructor))
@@ -120,39 +116,17 @@
   // .text section, which triggers the global-buffer overflow detection.
   const uint8_t *const start = BORINGSSL_bcm_text_start;
   const uint8_t *const end = BORINGSSL_bcm_text_end;
-#if defined(BORINGSSL_SHARED_LIBRARY)
-  const uint8_t *const rodata_start = BORINGSSL_bcm_rodata_start;
-  const uint8_t *const rodata_end = BORINGSSL_bcm_rodata_end;
-#endif
 
   static const uint8_t kHMACKey[64] = {0};
   uint8_t result[SHA512_DIGEST_LENGTH];
 
   unsigned result_len;
-  HMAC_CTX hmac_ctx;
-  HMAC_CTX_init(&hmac_ctx);
-  if (!HMAC_Init_ex(&hmac_ctx, kHMACKey, sizeof(kHMACKey), EVP_sha512(),
-                    NULL /* no ENGINE */)) {
-    fprintf(stderr, "HMAC_Init_ex failed.\n");
-    goto err;
-  }
-#if defined(BORINGSSL_SHARED_LIBRARY)
-  uint64_t length = end - start;
-  HMAC_Update(&hmac_ctx, (const uint8_t *) &length, sizeof(length));
-  HMAC_Update(&hmac_ctx, start, length);
-
-  length = rodata_end - rodata_start;
-  HMAC_Update(&hmac_ctx, (const uint8_t *) &length, sizeof(length));
-  HMAC_Update(&hmac_ctx, rodata_start, length);
-#else
-  HMAC_Update(&hmac_ctx, start, end - start);
-#endif
-  if (!HMAC_Final(&hmac_ctx, result, &result_len) ||
+  if (!HMAC(EVP_sha512(), kHMACKey, sizeof(kHMACKey), start, end - start,
+            result, &result_len) ||
       result_len != sizeof(result)) {
     fprintf(stderr, "HMAC failed.\n");
     goto err;
   }
-  HMAC_CTX_cleanup(&hmac_ctx);
 
   const uint8_t *expected = BORINGSSL_bcm_text_hash;
 
diff --git a/src/crypto/fipsmodule/bn/asm/armv4-mont.pl b/src/crypto/fipsmodule/bn/asm/armv4-mont.pl
index f3aa4be..2ee389e 100644
--- a/src/crypto/fipsmodule/bn/asm/armv4-mont.pl
+++ b/src/crypto/fipsmodule/bn/asm/armv4-mont.pl
@@ -759,4 +759,4 @@
 	print $_,"\n";
 }
 
-close STDOUT or die "error closing STDOUT";
+close STDOUT;
diff --git a/src/crypto/fipsmodule/bn/asm/armv8-mont.pl b/src/crypto/fipsmodule/bn/asm/armv8-mont.pl
index db2ba49..aab9eaa 100644
--- a/src/crypto/fipsmodule/bn/asm/armv8-mont.pl
+++ b/src/crypto/fipsmodule/bn/asm/armv8-mont.pl
@@ -1507,4 +1507,4 @@
 
 print $code;
 
-close STDOUT or die "error closing STDOUT";
+close STDOUT;
diff --git a/src/crypto/fipsmodule/bn/asm/bn-586.pl b/src/crypto/fipsmodule/bn/asm/bn-586.pl
index 05ef28c..16818d5 100644
--- a/src/crypto/fipsmodule/bn/asm/bn-586.pl
+++ b/src/crypto/fipsmodule/bn/asm/bn-586.pl
@@ -31,7 +31,7 @@
 
 &asm_finish();
 
-close STDOUT or die "error closing STDOUT";
+close STDOUT;
 
 sub bn_mul_add_words
 	{
diff --git a/src/crypto/fipsmodule/bn/asm/co-586.pl b/src/crypto/fipsmodule/bn/asm/co-586.pl
index abe328a..5eeeef9 100644
--- a/src/crypto/fipsmodule/bn/asm/co-586.pl
+++ b/src/crypto/fipsmodule/bn/asm/co-586.pl
@@ -22,7 +22,7 @@
 
 &asm_finish();
 
-close STDOUT or die "error closing STDOUT";
+close STDOUT;
 
 sub mul_add_c
 	{
diff --git a/src/crypto/fipsmodule/bn/asm/rsaz-avx2.pl b/src/crypto/fipsmodule/bn/asm/rsaz-avx2.pl
index a0da239..51feb69 100755
--- a/src/crypto/fipsmodule/bn/asm/rsaz-avx2.pl
+++ b/src/crypto/fipsmodule/bn/asm/rsaz-avx2.pl
@@ -1940,4 +1940,4 @@
 ___
 }}}
 
-close STDOUT or die "error closing STDOUT";
+close STDOUT;
diff --git a/src/crypto/fipsmodule/bn/asm/x86-mont.pl b/src/crypto/fipsmodule/bn/asm/x86-mont.pl
index 1f61ae5..214f2b0 100755
--- a/src/crypto/fipsmodule/bn/asm/x86-mont.pl
+++ b/src/crypto/fipsmodule/bn/asm/x86-mont.pl
@@ -628,4 +628,4 @@
 
 &asm_finish();
 
-close STDOUT or die "error closing STDOUT";
+close STDOUT;
diff --git a/src/crypto/fipsmodule/bn/asm/x86_64-mont.pl b/src/crypto/fipsmodule/bn/asm/x86_64-mont.pl
index 0a9e4d1..3d98e72 100755
--- a/src/crypto/fipsmodule/bn/asm/x86_64-mont.pl
+++ b/src/crypto/fipsmodule/bn/asm/x86_64-mont.pl
@@ -1578,4 +1578,4 @@
 }
 
 print $code;
-close STDOUT or die "error closing STDOUT";
+close STDOUT;
diff --git a/src/crypto/fipsmodule/bn/asm/x86_64-mont5.pl b/src/crypto/fipsmodule/bn/asm/x86_64-mont5.pl
index b2ff114..abcfe6a 100755
--- a/src/crypto/fipsmodule/bn/asm/x86_64-mont5.pl
+++ b/src/crypto/fipsmodule/bn/asm/x86_64-mont5.pl
@@ -3930,4 +3930,4 @@
 $code =~ s/\`([^\`]*)\`/eval($1)/gem;
 
 print $code;
-close STDOUT or die "error closing STDOUT";
+close STDOUT;
diff --git a/src/crypto/fipsmodule/delocate.h b/src/crypto/fipsmodule/delocate.h
index d6564e4..59effde 100644
--- a/src/crypto/fipsmodule/delocate.h
+++ b/src/crypto/fipsmodule/delocate.h
@@ -20,8 +20,7 @@
 #include "../internal.h"
 
 
-#if !defined(BORINGSSL_SHARED_LIBRARY) && defined(BORINGSSL_FIPS) && \
-    !defined(OPENSSL_ASAN) && !defined(OPENSSL_MSAN)
+#if defined(BORINGSSL_FIPS) && !defined(OPENSSL_ASAN) && !defined(OPENSSL_MSAN)
 #define DEFINE_BSS_GET(type, name)        \
   static type name __attribute__((used)); \
   type *name##_bss_get(void) __attribute__((const));
diff --git a/src/crypto/fipsmodule/digest/digest.c b/src/crypto/fipsmodule/digest/digest.c
index 68e81c4..6705867 100644
--- a/src/crypto/fipsmodule/digest/digest.c
+++ b/src/crypto/fipsmodule/digest/digest.c
@@ -115,11 +115,6 @@
 
 void EVP_MD_CTX_destroy(EVP_MD_CTX *ctx) { EVP_MD_CTX_free(ctx); }
 
-int EVP_DigestFinalXOF(EVP_MD_CTX *ctx, uint8_t *out, size_t len) {
-  OPENSSL_PUT_ERROR(DIGEST, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
-  return 0;
-}
-
 int EVP_MD_CTX_copy_ex(EVP_MD_CTX *out, const EVP_MD_CTX *in) {
   // |in->digest| may be NULL if this is a signing |EVP_MD_CTX| for, e.g.,
   // Ed25519 which does not hash with |EVP_MD_CTX|.
diff --git a/src/crypto/fipsmodule/ec/asm/p256-x86_64-asm.pl b/src/crypto/fipsmodule/ec/asm/p256-x86_64-asm.pl
index 994cb82..5402885 100755
--- a/src/crypto/fipsmodule/ec/asm/p256-x86_64-asm.pl
+++ b/src/crypto/fipsmodule/ec/asm/p256-x86_64-asm.pl
@@ -3112,24 +3112,17 @@
 
 	or	$acc5, $acc4			# see if result is zero
 	or	$acc0, $acc4
-	or	$acc1, $acc4			# !is_equal(U1, U2)
+	or	$acc1, $acc4
 
+	.byte	0x3e				# predict taken
+	jnz	.Ladd_proceed$x			# is_equal(U1,U2)?
 	movq	%xmm2, $acc0
 	movq	%xmm3, $acc1
-	or	$acc0, $acc4
-	.byte	0x3e				# predict taken
-	jnz	.Ladd_proceed$x			# !is_equal(U1, U2) || in1infty || in2infty
-
-	# We now know A = B or A = -B and neither is infinity. Compare the
-	# y-coordinates via S1 and S2.
+	test	$acc0, $acc0
+	jnz	.Ladd_proceed$x			# (in1infty || in2infty)?
 	test	$acc1, $acc1
-	jz	.Ladd_double$x			# is_equal(S1, S2)
+	jz	.Ladd_double$x			# is_equal(S1,S2)?
 
-	# A = -B, so the result is infinity.
-	#
-	# TODO(davidben): Does .Ladd_proceed handle this case? It seems to, in
-	# which case we should eliminate this special-case and simplify the
-	# timing analysis.
 	movq	%xmm0, $r_ptr			# restore $r_ptr
 	pxor	%xmm0, %xmm0
 	movdqu	%xmm0, 0x00($r_ptr)
@@ -4153,4 +4146,4 @@
 
 $code =~ s/\`([^\`]*)\`/eval $1/gem;
 print $code;
-close STDOUT or die "error closing STDOUT";
+close STDOUT;
diff --git a/src/crypto/fipsmodule/ec/asm/p256_beeu-x86_64-asm.pl b/src/crypto/fipsmodule/ec/asm/p256_beeu-x86_64-asm.pl
index c05abba..0bb6547 100644
--- a/src/crypto/fipsmodule/ec/asm/p256_beeu-x86_64-asm.pl
+++ b/src/crypto/fipsmodule/ec/asm/p256_beeu-x86_64-asm.pl
@@ -400,4 +400,4 @@
 ___
 
 print $code;
-close STDOUT or die "error closing STDOUT";
+close STDOUT;
diff --git a/src/crypto/fipsmodule/ec/ec.c b/src/crypto/fipsmodule/ec/ec.c
index 158d66c..a0305a6 100644
--- a/src/crypto/fipsmodule/ec/ec.c
+++ b/src/crypto/fipsmodule/ec/ec.c
@@ -892,6 +892,8 @@
   }
 
   int ret = 0;
+  EC_SCALAR g_scalar_storage, p_scalar_storage;
+  EC_SCALAR *g_scalar_arg = NULL, *p_scalar_arg = NULL;
   BN_CTX *new_ctx = NULL;
   if (ctx == NULL) {
     new_ctx = BN_CTX_new();
@@ -901,50 +903,35 @@
     ctx = new_ctx;
   }
 
-  // If both |g_scalar| and |p_scalar| are non-NULL,
-  // |ec_point_mul_scalar_public| would share the doublings between the two
-  // products, which would be more efficient. However, we conservatively assume
-  // the caller needs a constant-time operation. (ECDSA verification does not
-  // use this function.)
-  //
-  // Previously, the low-level constant-time multiplication function aligned
-  // with this function's calling convention, but this was misleading. Curves
-  // which combined the two multiplications did not avoid the doubling case
-  // in the incomplete addition formula and were not constant-time.
-
   if (g_scalar != NULL) {
-    EC_SCALAR scalar;
-    if (!arbitrary_bignum_to_scalar(group, &scalar, g_scalar, ctx) ||
-        !ec_point_mul_scalar_base(group, &r->raw, &scalar)) {
+    if (!arbitrary_bignum_to_scalar(group, &g_scalar_storage, g_scalar, ctx)) {
       goto err;
     }
+    g_scalar_arg = &g_scalar_storage;
   }
 
   if (p_scalar != NULL) {
-    EC_SCALAR scalar;
-    EC_RAW_POINT tmp;
-    if (!arbitrary_bignum_to_scalar(group, &scalar, p_scalar, ctx) ||
-        !ec_point_mul_scalar(group, &tmp, &p->raw, &scalar)) {
+    if (!arbitrary_bignum_to_scalar(group, &p_scalar_storage, p_scalar, ctx)) {
       goto err;
     }
-    if (g_scalar == NULL) {
-      OPENSSL_memcpy(&r->raw, &tmp, sizeof(EC_RAW_POINT));
-    } else {
-      group->meth->add(group, &r->raw, &r->raw, &tmp);
-    }
+    p_scalar_arg = &p_scalar_storage;
   }
 
-  ret = 1;
+  ret = ec_point_mul_scalar(group, &r->raw, g_scalar_arg,
+                            p == NULL ? NULL : &p->raw, p_scalar_arg);
 
 err:
   BN_CTX_free(new_ctx);
+  OPENSSL_cleanse(&g_scalar_storage, sizeof(g_scalar_storage));
+  OPENSSL_cleanse(&p_scalar_storage, sizeof(p_scalar_storage));
   return ret;
 }
 
 int ec_point_mul_scalar_public(const EC_GROUP *group, EC_RAW_POINT *r,
                                const EC_SCALAR *g_scalar, const EC_RAW_POINT *p,
                                const EC_SCALAR *p_scalar) {
-  if (g_scalar == NULL || p_scalar == NULL || p == NULL) {
+  if ((g_scalar == NULL && p_scalar == NULL) ||
+      (p == NULL) != (p_scalar == NULL)) {
     OPENSSL_PUT_ERROR(EC, ERR_R_PASSED_NULL_PARAMETER);
     return 0;
   }
@@ -954,24 +941,15 @@
 }
 
 int ec_point_mul_scalar(const EC_GROUP *group, EC_RAW_POINT *r,
-                        const EC_RAW_POINT *p, const EC_SCALAR *scalar) {
-  if (p == NULL || scalar == NULL) {
+                        const EC_SCALAR *g_scalar, const EC_RAW_POINT *p,
+                        const EC_SCALAR *p_scalar) {
+  if ((g_scalar == NULL && p_scalar == NULL) ||
+      (p == NULL) != (p_scalar == NULL)) {
     OPENSSL_PUT_ERROR(EC, ERR_R_PASSED_NULL_PARAMETER);
     return 0;
   }
 
-  group->meth->mul(group, r, p, scalar);
-  return 1;
-}
-
-int ec_point_mul_scalar_base(const EC_GROUP *group, EC_RAW_POINT *r,
-                             const EC_SCALAR *scalar) {
-  if (scalar == NULL) {
-    OPENSSL_PUT_ERROR(EC, ERR_R_PASSED_NULL_PARAMETER);
-    return 0;
-  }
-
-  group->meth->mul_base(group, r, scalar);
+  group->meth->mul(group, r, g_scalar, p, p_scalar);
   return 1;
 }
 
diff --git a/src/crypto/fipsmodule/ec/ec_key.c b/src/crypto/fipsmodule/ec/ec_key.c
index 3851c19..3ef17d9 100644
--- a/src/crypto/fipsmodule/ec/ec_key.c
+++ b/src/crypto/fipsmodule/ec/ec_key.c
@@ -322,8 +322,8 @@
   if (eckey->priv_key != NULL) {
     point = EC_POINT_new(eckey->group);
     if (point == NULL ||
-        !ec_point_mul_scalar_base(eckey->group, &point->raw,
-                                  &eckey->priv_key->scalar)) {
+        !ec_point_mul_scalar(eckey->group, &point->raw,
+                             &eckey->priv_key->scalar, NULL, NULL)) {
       OPENSSL_PUT_ERROR(EC, ERR_R_EC_LIB);
       goto err;
     }
@@ -440,7 +440,8 @@
       // Generate the private key by testing candidates (FIPS 186-4 B.4.2).
       !ec_random_nonzero_scalar(key->group, &priv_key->scalar,
                                 kDefaultAdditionalData) ||
-      !ec_point_mul_scalar_base(key->group, &pub_key->raw, &priv_key->scalar)) {
+      !ec_point_mul_scalar(key->group, &pub_key->raw, &priv_key->scalar, NULL,
+                           NULL)) {
     EC_POINT_free(pub_key);
     ec_wrapped_scalar_free(priv_key);
     return 0;
diff --git a/src/crypto/fipsmodule/ec/ec_montgomery.c b/src/crypto/fipsmodule/ec/ec_montgomery.c
index 0cf1d91..caa1966 100644
--- a/src/crypto/fipsmodule/ec/ec_montgomery.c
+++ b/src/crypto/fipsmodule/ec/ec_montgomery.c
@@ -282,8 +282,7 @@
   BN_ULONG yneq = ec_felem_non_zero_mask(group, &r);
 
   // This case will never occur in the constant-time |ec_GFp_mont_mul|.
-  BN_ULONG is_nontrivial_double = ~xneq & ~yneq & z1nz & z2nz;
-  if (is_nontrivial_double) {
+  if (!xneq && !yneq && z1nz && z2nz) {
     ec_GFp_mont_dbl(group, out, a);
     return;
   }
@@ -471,7 +470,6 @@
   out->add = ec_GFp_mont_add;
   out->dbl = ec_GFp_mont_dbl;
   out->mul = ec_GFp_mont_mul;
-  out->mul_base = ec_GFp_mont_mul_base;
   out->mul_public = ec_GFp_mont_mul_public;
   out->felem_mul = ec_GFp_mont_felem_mul;
   out->felem_sqr = ec_GFp_mont_felem_sqr;
diff --git a/src/crypto/fipsmodule/ec/ec_test.cc b/src/crypto/fipsmodule/ec/ec_test.cc
index c0ad61f..1219e2b 100644
--- a/src/crypto/fipsmodule/ec/ec_test.cc
+++ b/src/crypto/fipsmodule/ec/ec_test.cc
@@ -764,15 +764,7 @@
   ASSERT_TRUE(BN_set_word(bn32.get(), 32));
   ASSERT_TRUE(EC_POINT_mul(group(), ret.get(), bn32.get(), p.get(), bn31.get(),
                            nullptr));
-  EXPECT_EQ(0, EC_POINT_cmp(group(), ret.get(), g, nullptr));
 
-  // Repeat the computation with |ec_point_mul_scalar_public|, which ties the
-  // additions together.
-  EC_SCALAR sc31, sc32;
-  ASSERT_TRUE(ec_bignum_to_scalar(group(), &sc31, bn31.get()));
-  ASSERT_TRUE(ec_bignum_to_scalar(group(), &sc32, bn32.get()));
-  ASSERT_TRUE(
-      ec_point_mul_scalar_public(group(), &ret->raw, &sc32, &p->raw, &sc31));
   EXPECT_EQ(0, EC_POINT_cmp(group(), ret.get(), g, nullptr));
 }
 
diff --git a/src/crypto/fipsmodule/ec/internal.h b/src/crypto/fipsmodule/ec/internal.h
index 7934c3a..05175a5 100644
--- a/src/crypto/fipsmodule/ec/internal.h
+++ b/src/crypto/fipsmodule/ec/internal.h
@@ -140,15 +140,16 @@
   // dbl sets |r| to |a| + |a|.
   void (*dbl)(const EC_GROUP *group, EC_RAW_POINT *r, const EC_RAW_POINT *a);
 
-  // mul sets |r| to |scalar|*|p|.
-  void (*mul)(const EC_GROUP *group, EC_RAW_POINT *r, const EC_RAW_POINT *p,
-              const EC_SCALAR *scalar);
-  // mul_base sets |r| to |scalar|*generator.
-  void (*mul_base)(const EC_GROUP *group, EC_RAW_POINT *r,
-                   const EC_SCALAR *scalar);
-  // mul_public sets |r| to |g_scalar|*generator + |p_scalar|*|p|. It assumes
-  // that the inputs are public so there is no concern about leaking their
-  // values through timing.
+  // Computes |r = g_scalar*generator + p_scalar*p| if |g_scalar| and |p_scalar|
+  // are both non-null. Computes |r = g_scalar*generator| if |p_scalar| is null.
+  // Computes |r = p_scalar*p| if g_scalar is null. At least one of |g_scalar|
+  // and |p_scalar| must be non-null, and |p| must be non-null if |p_scalar| is
+  // non-null.
+  void (*mul)(const EC_GROUP *group, EC_RAW_POINT *r, const EC_SCALAR *g_scalar,
+              const EC_RAW_POINT *p, const EC_SCALAR *p_scalar);
+  // mul_public performs the same computation as mul. It further assumes that
+  // the inputs are public so there is no concern about leaking their values
+  // through timing.
   void (*mul_public)(const EC_GROUP *group, EC_RAW_POINT *r,
                      const EC_SCALAR *g_scalar, const EC_RAW_POINT *p,
                      const EC_SCALAR *p_scalar);
@@ -324,15 +325,13 @@
 int ec_scalar_inv_montgomery_vartime(const EC_GROUP *group, EC_SCALAR *r,
                                      const EC_SCALAR *a);
 
-// ec_point_mul_scalar sets |r| to |p| * |scalar|. Both inputs are considered
-// secret.
+// ec_point_mul_scalar sets |r| to generator * |g_scalar| + |p| *
+// |p_scalar|. Unlike other functions which take |EC_SCALAR|, |g_scalar| and
+// |p_scalar| need not be fully reduced. They need only contain as many bits as
+// the order.
 int ec_point_mul_scalar(const EC_GROUP *group, EC_RAW_POINT *r,
-                        const EC_RAW_POINT *p, const EC_SCALAR *scalar);
-
-// ec_point_mul_scalar_base sets |r| to generator * |scalar|. |scalar| is
-// treated as secret.
-int ec_point_mul_scalar_base(const EC_GROUP *group, EC_RAW_POINT *r,
-                             const EC_SCALAR *scalar);
+                        const EC_SCALAR *g_scalar, const EC_RAW_POINT *p,
+                        const EC_SCALAR *p_scalar);
 
 // ec_point_mul_scalar_public performs the same computation as
 // ec_point_mul_scalar.  It further assumes that the inputs are public so
@@ -371,9 +370,8 @@
 int ec_field_element_to_scalar(const EC_GROUP *group, BIGNUM *r);
 
 void ec_GFp_mont_mul(const EC_GROUP *group, EC_RAW_POINT *r,
-                     const EC_RAW_POINT *p, const EC_SCALAR *scalar);
-void ec_GFp_mont_mul_base(const EC_GROUP *group, EC_RAW_POINT *r,
-                          const EC_SCALAR *scalar);
+                     const EC_SCALAR *g_scalar, const EC_RAW_POINT *p,
+                     const EC_SCALAR *p_scalar);
 
 // ec_compute_wNAF writes the modified width-(w+1) Non-Adjacent Form (wNAF) of
 // |scalar| to |out|. |out| must have room for |bits| + 1 elements, each of
diff --git a/src/crypto/fipsmodule/ec/p224-64.c b/src/crypto/fipsmodule/ec/p224-64.c
index f8af39b..2749686 100644
--- a/src/crypto/fipsmodule/ec/p224-64.c
+++ b/src/crypto/fipsmodule/ec/p224-64.c
@@ -758,9 +758,7 @@
   z1_is_zero = p224_felem_is_zero(z1);
   z2_is_zero = p224_felem_is_zero(z2);
   // In affine coordinates, (X_1, Y_1) == (X_2, Y_2)
-  p224_limb is_nontrivial_double =
-      x_equal & y_equal & (1 - z1_is_zero) & (1 - z2_is_zero);
-  if (is_nontrivial_double) {
+  if (x_equal && y_equal && !z1_is_zero && !z2_is_zero) {
     p224_point_double(x3, y3, z3, x1, y1, z1);
     return;
   }
@@ -873,6 +871,95 @@
   return (in[i >> 3] >> (i & 7)) & 1;
 }
 
+// Interleaved point multiplication using precomputed point multiples:
+// The small point multiples 0*P, 1*P, ..., 16*P are in p_pre_comp, the scalars
+// in p_scalar, if non-NULL. If g_scalar is non-NULL, we also add this multiple
+// of the generator, using certain (large) precomputed multiples in
+// g_p224_pre_comp. Output point (X, Y, Z) is stored in x_out, y_out, z_out
+static void p224_batch_mul(p224_felem x_out, p224_felem y_out, p224_felem z_out,
+                           const uint8_t *p_scalar, const uint8_t *g_scalar,
+                           const p224_felem p_pre_comp[17][3]) {
+  p224_felem nq[3], tmp[4];
+  uint64_t bits;
+  uint8_t sign, digit;
+
+  // set nq to the point at infinity
+  OPENSSL_memset(nq, 0, 3 * sizeof(p224_felem));
+
+  // Loop over both scalars msb-to-lsb, interleaving additions of multiples of
+  // the generator (two in each of the last 28 rounds) and additions of p (every
+  // 5th round).
+  int skip = 1;  // save two point operations in the first round
+  size_t i = p_scalar != NULL ? 220 : 27;
+  for (;;) {
+    // double
+    if (!skip) {
+      p224_point_double(nq[0], nq[1], nq[2], nq[0], nq[1], nq[2]);
+    }
+
+    // add multiples of the generator
+    if (g_scalar != NULL && i <= 27) {
+      // first, look 28 bits upwards
+      bits = p224_get_bit(g_scalar, i + 196) << 3;
+      bits |= p224_get_bit(g_scalar, i + 140) << 2;
+      bits |= p224_get_bit(g_scalar, i + 84) << 1;
+      bits |= p224_get_bit(g_scalar, i + 28);
+      // select the point to add, in constant time
+      p224_select_point(bits, 16, g_p224_pre_comp[1], tmp);
+
+      if (!skip) {
+        p224_point_add(nq[0], nq[1], nq[2], nq[0], nq[1], nq[2], 1 /* mixed */,
+                       tmp[0], tmp[1], tmp[2]);
+      } else {
+        OPENSSL_memcpy(nq, tmp, 3 * sizeof(p224_felem));
+        skip = 0;
+      }
+
+      // second, look at the current position
+      bits = p224_get_bit(g_scalar, i + 168) << 3;
+      bits |= p224_get_bit(g_scalar, i + 112) << 2;
+      bits |= p224_get_bit(g_scalar, i + 56) << 1;
+      bits |= p224_get_bit(g_scalar, i);
+      // select the point to add, in constant time
+      p224_select_point(bits, 16, g_p224_pre_comp[0], tmp);
+      p224_point_add(nq[0], nq[1], nq[2], nq[0], nq[1], nq[2], 1 /* mixed */,
+                     tmp[0], tmp[1], tmp[2]);
+    }
+
+    // do other additions every 5 doublings
+    if (p_scalar != NULL && i % 5 == 0) {
+      bits = p224_get_bit(p_scalar, i + 4) << 5;
+      bits |= p224_get_bit(p_scalar, i + 3) << 4;
+      bits |= p224_get_bit(p_scalar, i + 2) << 3;
+      bits |= p224_get_bit(p_scalar, i + 1) << 2;
+      bits |= p224_get_bit(p_scalar, i) << 1;
+      bits |= p224_get_bit(p_scalar, i - 1);
+      ec_GFp_nistp_recode_scalar_bits(&sign, &digit, bits);
+
+      // select the point to add or subtract
+      p224_select_point(digit, 17, p_pre_comp, tmp);
+      p224_felem_neg(tmp[3], tmp[1]);  // (X, -Y, Z) is the negative point
+      p224_copy_conditional(tmp[1], tmp[3], sign);
+
+      if (!skip) {
+        p224_point_add(nq[0], nq[1], nq[2], nq[0], nq[1], nq[2], 0 /* mixed */,
+                       tmp[0], tmp[1], tmp[2]);
+      } else {
+        OPENSSL_memcpy(nq, tmp, 3 * sizeof(p224_felem));
+        skip = 0;
+      }
+    }
+
+    if (i == 0) {
+      break;
+    }
+    --i;
+  }
+  p224_felem_assign(x_out, nq[0]);
+  p224_felem_assign(y_out, nq[1]);
+  p224_felem_assign(z_out, nq[2]);
+}
+
 // Takes the Jacobian coordinates (X, Y, Z) of a point and returns
 // (X', Y') = (X/Z^2, Y/Z^3)
 static int ec_GFp_nistp224_point_get_affine_coordinates(
@@ -940,197 +1027,49 @@
   p224_felem_to_generic(&r->Z, z);
 }
 
-static void ec_GFp_nistp224_make_precomp(p224_felem out[17][3],
-                                         const EC_RAW_POINT *p) {
-  OPENSSL_memset(out[0], 0, sizeof(p224_felem) * 3);
-
-  p224_generic_to_felem(out[1][0], &p->X);
-  p224_generic_to_felem(out[1][1], &p->Y);
-  p224_generic_to_felem(out[1][2], &p->Z);
-
-  for (size_t j = 2; j <= 16; ++j) {
-    if (j & 1) {
-      p224_point_add(out[j][0], out[j][1], out[j][2], out[1][0], out[1][1],
-                     out[1][2], 0, out[j - 1][0], out[j - 1][1], out[j - 1][2]);
-    } else {
-      p224_point_double(out[j][0], out[j][1], out[j][2], out[j / 2][0],
-                        out[j / 2][1], out[j / 2][2]);
-    }
-  }
-}
-
-static void ec_GFp_nistp224_point_mul(const EC_GROUP *group, EC_RAW_POINT *r,
-                                      const EC_RAW_POINT *p,
-                                      const EC_SCALAR *scalar) {
+static void ec_GFp_nistp224_points_mul(const EC_GROUP *group, EC_RAW_POINT *r,
+                                       const EC_SCALAR *g_scalar,
+                                       const EC_RAW_POINT *p,
+                                       const EC_SCALAR *p_scalar) {
   p224_felem p_pre_comp[17][3];
-  ec_GFp_nistp224_make_precomp(p_pre_comp, p);
+  p224_felem x_out, y_out, z_out;
 
-  // Set nq to the point at infinity.
-  p224_felem nq[3], tmp[4];
-  OPENSSL_memset(nq, 0, 3 * sizeof(p224_felem));
+  if (p != NULL && p_scalar != NULL) {
+    // We treat NULL scalars as 0, and NULL points as points at infinity, i.e.,
+    // they contribute nothing to the linear combination.
+    OPENSSL_memset(&p_pre_comp, 0, sizeof(p_pre_comp));
+    // precompute multiples
+    p224_generic_to_felem(x_out, &p->X);
+    p224_generic_to_felem(y_out, &p->Y);
+    p224_generic_to_felem(z_out, &p->Z);
 
-  int skip = 1;  // Save two point operations in the first round.
-  for (size_t i = 220; i < 221; i--) {
-    if (!skip) {
-      p224_point_double(nq[0], nq[1], nq[2], nq[0], nq[1], nq[2]);
-    }
+    p224_felem_assign(p_pre_comp[1][0], x_out);
+    p224_felem_assign(p_pre_comp[1][1], y_out);
+    p224_felem_assign(p_pre_comp[1][2], z_out);
 
-    // Add every 5 doublings.
-    if (i % 5 == 0) {
-      uint64_t bits = p224_get_bit(scalar->bytes, i + 4) << 5;
-      bits |= p224_get_bit(scalar->bytes, i + 3) << 4;
-      bits |= p224_get_bit(scalar->bytes, i + 2) << 3;
-      bits |= p224_get_bit(scalar->bytes, i + 1) << 2;
-      bits |= p224_get_bit(scalar->bytes, i) << 1;
-      bits |= p224_get_bit(scalar->bytes, i - 1);
-      uint8_t sign, digit;
-      ec_GFp_nistp_recode_scalar_bits(&sign, &digit, bits);
-
-      // Select the point to add or subtract.
-      p224_select_point(digit, 17, (const p224_felem(*)[3])p_pre_comp, tmp);
-      p224_felem_neg(tmp[3], tmp[1]);  // (X, -Y, Z) is the negative point
-      p224_copy_conditional(tmp[1], tmp[3], sign);
-
-      if (!skip) {
-        p224_point_add(nq[0], nq[1], nq[2], nq[0], nq[1], nq[2], 0 /* mixed */,
-                       tmp[0], tmp[1], tmp[2]);
+    for (size_t j = 2; j <= 16; ++j) {
+      if (j & 1) {
+        p224_point_add(p_pre_comp[j][0], p_pre_comp[j][1], p_pre_comp[j][2],
+                       p_pre_comp[1][0], p_pre_comp[1][1], p_pre_comp[1][2], 0,
+                       p_pre_comp[j - 1][0], p_pre_comp[j - 1][1],
+                       p_pre_comp[j - 1][2]);
       } else {
-        OPENSSL_memcpy(nq, tmp, 3 * sizeof(p224_felem));
-        skip = 0;
+        p224_point_double(p_pre_comp[j][0], p_pre_comp[j][1], p_pre_comp[j][2],
+                          p_pre_comp[j / 2][0], p_pre_comp[j / 2][1],
+                          p_pre_comp[j / 2][2]);
       }
     }
   }
 
-  // Reduce the output to its unique minimal representation.
-  p224_felem_to_generic(&r->X, nq[0]);
-  p224_felem_to_generic(&r->Y, nq[1]);
-  p224_felem_to_generic(&r->Z, nq[2]);
-}
+  p224_batch_mul(x_out, y_out, z_out,
+                 (p != NULL && p_scalar != NULL) ? p_scalar->bytes : NULL,
+                 g_scalar != NULL ? g_scalar->bytes : NULL,
+                 (const p224_felem(*)[3])p_pre_comp);
 
-static void ec_GFp_nistp224_point_mul_base(const EC_GROUP *group,
-                                           EC_RAW_POINT *r,
-                                           const EC_SCALAR *scalar) {
-  // Set nq to the point at infinity.
-  p224_felem nq[3], tmp[3];
-  OPENSSL_memset(nq, 0, 3 * sizeof(p224_felem));
-
-  int skip = 1;  // Save two point operations in the first round.
-  for (size_t i = 27; i < 28; i--) {
-    // double
-    if (!skip) {
-      p224_point_double(nq[0], nq[1], nq[2], nq[0], nq[1], nq[2]);
-    }
-
-    // First, look 28 bits upwards.
-    uint64_t bits = p224_get_bit(scalar->bytes, i + 196) << 3;
-    bits |= p224_get_bit(scalar->bytes, i + 140) << 2;
-    bits |= p224_get_bit(scalar->bytes, i + 84) << 1;
-    bits |= p224_get_bit(scalar->bytes, i + 28);
-    // Select the point to add, in constant time.
-    p224_select_point(bits, 16, g_p224_pre_comp[1], tmp);
-
-    if (!skip) {
-      p224_point_add(nq[0], nq[1], nq[2], nq[0], nq[1], nq[2], 1 /* mixed */,
-                     tmp[0], tmp[1], tmp[2]);
-    } else {
-      OPENSSL_memcpy(nq, tmp, 3 * sizeof(p224_felem));
-      skip = 0;
-    }
-
-    // Second, look at the current position/
-    bits = p224_get_bit(scalar->bytes, i + 168) << 3;
-    bits |= p224_get_bit(scalar->bytes, i + 112) << 2;
-    bits |= p224_get_bit(scalar->bytes, i + 56) << 1;
-    bits |= p224_get_bit(scalar->bytes, i);
-    // Select the point to add, in constant time.
-    p224_select_point(bits, 16, g_p224_pre_comp[0], tmp);
-    p224_point_add(nq[0], nq[1], nq[2], nq[0], nq[1], nq[2], 1 /* mixed */,
-                   tmp[0], tmp[1], tmp[2]);
-  }
-
-  // Reduce the output to its unique minimal representation.
-  p224_felem_to_generic(&r->X, nq[0]);
-  p224_felem_to_generic(&r->Y, nq[1]);
-  p224_felem_to_generic(&r->Z, nq[2]);
-}
-
-static void ec_GFp_nistp224_point_mul_public(const EC_GROUP *group,
-                                             EC_RAW_POINT *r,
-                                             const EC_SCALAR *g_scalar,
-                                             const EC_RAW_POINT *p,
-                                             const EC_SCALAR *p_scalar) {
-  // TODO(davidben): If P-224 ECDSA verify performance ever matters, using
-  // |ec_compute_wNAF| for |p_scalar| would likely be an easy improvement.
-  p224_felem p_pre_comp[17][3];
-  ec_GFp_nistp224_make_precomp(p_pre_comp, p);
-
-  // Set nq to the point at infinity.
-  p224_felem nq[3], tmp[3];
-  OPENSSL_memset(nq, 0, 3 * sizeof(p224_felem));
-
-  // Loop over both scalars msb-to-lsb, interleaving additions of multiples of
-  // the generator (two in each of the last 28 rounds) and additions of p (every
-  // 5th round).
-  int skip = 1;  // Save two point operations in the first round.
-  for (size_t i = 220; i < 221; i--) {
-    if (!skip) {
-      p224_point_double(nq[0], nq[1], nq[2], nq[0], nq[1], nq[2]);
-    }
-
-    // Add multiples of the generator.
-    if (i <= 27) {
-      // First, look 28 bits upwards.
-      uint64_t bits = p224_get_bit(g_scalar->bytes, i + 196) << 3;
-      bits |= p224_get_bit(g_scalar->bytes, i + 140) << 2;
-      bits |= p224_get_bit(g_scalar->bytes, i + 84) << 1;
-      bits |= p224_get_bit(g_scalar->bytes, i + 28);
-
-      p224_point_add(nq[0], nq[1], nq[2], nq[0], nq[1], nq[2], 1 /* mixed */,
-                     g_p224_pre_comp[1][bits][0], g_p224_pre_comp[1][bits][1],
-                     g_p224_pre_comp[1][bits][2]);
-      assert(!skip);
-
-      // Second, look at the current position.
-      bits = p224_get_bit(g_scalar->bytes, i + 168) << 3;
-      bits |= p224_get_bit(g_scalar->bytes, i + 112) << 2;
-      bits |= p224_get_bit(g_scalar->bytes, i + 56) << 1;
-      bits |= p224_get_bit(g_scalar->bytes, i);
-      p224_point_add(nq[0], nq[1], nq[2], nq[0], nq[1], nq[2], 1 /* mixed */,
-                     g_p224_pre_comp[0][bits][0], g_p224_pre_comp[0][bits][1],
-                     g_p224_pre_comp[0][bits][2]);
-    }
-
-    // Incorporate |p_scalar| every 5 doublings.
-    if (i % 5 == 0) {
-      uint64_t bits = p224_get_bit(p_scalar->bytes, i + 4) << 5;
-      bits |= p224_get_bit(p_scalar->bytes, i + 3) << 4;
-      bits |= p224_get_bit(p_scalar->bytes, i + 2) << 3;
-      bits |= p224_get_bit(p_scalar->bytes, i + 1) << 2;
-      bits |= p224_get_bit(p_scalar->bytes, i) << 1;
-      bits |= p224_get_bit(p_scalar->bytes, i - 1);
-      uint8_t sign, digit;
-      ec_GFp_nistp_recode_scalar_bits(&sign, &digit, bits);
-
-      // Select the point to add or subtract.
-      OPENSSL_memcpy(tmp, p_pre_comp[digit], 3 * sizeof(p224_felem));
-      if (sign) {
-        p224_felem_neg(tmp[1], tmp[1]);  // (X, -Y, Z) is the negative point
-      }
-
-      if (!skip) {
-        p224_point_add(nq[0], nq[1], nq[2], nq[0], nq[1], nq[2], 0 /* mixed */,
-                       tmp[0], tmp[1], tmp[2]);
-      } else {
-        OPENSSL_memcpy(nq, tmp, 3 * sizeof(p224_felem));
-        skip = 0;
-      }
-    }
-  }
-
-  // Reduce the output to its unique minimal representation.
-  p224_felem_to_generic(&r->X, nq[0]);
-  p224_felem_to_generic(&r->Y, nq[1]);
-  p224_felem_to_generic(&r->Z, nq[2]);
+  // reduce the output to its unique minimal representation
+  p224_felem_to_generic(&r->X, x_out);
+  p224_felem_to_generic(&r->Y, y_out);
+  p224_felem_to_generic(&r->Z, z_out);
 }
 
 static void ec_GFp_nistp224_felem_mul(const EC_GROUP *group, EC_FELEM *r,
@@ -1172,9 +1111,8 @@
       ec_GFp_nistp224_point_get_affine_coordinates;
   out->add = ec_GFp_nistp224_add;
   out->dbl = ec_GFp_nistp224_dbl;
-  out->mul = ec_GFp_nistp224_point_mul;
-  out->mul_base = ec_GFp_nistp224_point_mul_base;
-  out->mul_public = ec_GFp_nistp224_point_mul_public;
+  out->mul = ec_GFp_nistp224_points_mul;
+  out->mul_public = ec_GFp_nistp224_points_mul;
   out->felem_mul = ec_GFp_nistp224_felem_mul;
   out->felem_sqr = ec_GFp_nistp224_felem_sqr;
   out->bignum_to_felem = ec_GFp_nistp224_bignum_to_felem;
diff --git a/src/crypto/fipsmodule/ec/p256-x86_64.c b/src/crypto/fipsmodule/ec/p256-x86_64.c
index b4af544..dd8108d 100644
--- a/src/crypto/fipsmodule/ec/p256-x86_64.c
+++ b/src/crypto/fipsmodule/ec/p256-x86_64.c
@@ -48,8 +48,7 @@
 // Precomputed tables for the default generator
 #include "p256-x86_64-table.h"
 
-// Recode window to a signed digit, see |ec_GFp_nistp_recode_scalar_bits| in
-// util.c for details
+// Recode window to a signed digit, see util-64.c for details
 static unsigned booth_recode_w5(unsigned in) {
   unsigned s, d;
 
@@ -317,57 +316,74 @@
   return booth_recode_w7(wvalue);
 }
 
-static void ecp_nistz256_point_mul(const EC_GROUP *group, EC_RAW_POINT *r,
-                                   const EC_RAW_POINT *p,
-                                   const EC_SCALAR *scalar) {
-  alignas(32) P256_POINT out;
-  ecp_nistz256_windowed_mul(group, &out, p, scalar);
+static void mul_p_add_and_store(const EC_GROUP *group, EC_RAW_POINT *r,
+                                const EC_SCALAR *g_scalar,
+                                const EC_RAW_POINT *p_,
+                                const EC_SCALAR *p_scalar,
+                                p256_point_union_t *t, p256_point_union_t *p) {
+  const int p_is_infinity = g_scalar == NULL;
+  if (p_scalar != NULL) {
+    P256_POINT *out = &t->p;
+    if (p_is_infinity) {
+      out = &p->p;
+    }
 
-  assert(group->field.width == P256_LIMBS);
-  OPENSSL_memcpy(r->X.words, out.X, P256_LIMBS * sizeof(BN_ULONG));
-  OPENSSL_memcpy(r->Y.words, out.Y, P256_LIMBS * sizeof(BN_ULONG));
-  OPENSSL_memcpy(r->Z.words, out.Z, P256_LIMBS * sizeof(BN_ULONG));
-}
-
-static void ecp_nistz256_point_mul_base(const EC_GROUP *group, EC_RAW_POINT *r,
-                                        const EC_SCALAR *scalar) {
-  alignas(32) p256_point_union_t t, p;
-
-  uint8_t p_str[33];
-  OPENSSL_memcpy(p_str, scalar->bytes, 32);
-  p_str[32] = 0;
-
-  // First window
-  unsigned index = 0;
-  unsigned wvalue = calc_first_wvalue(&index, p_str);
-
-  ecp_nistz256_select_w7(&p.a, ecp_nistz256_precomputed[0], wvalue >> 1);
-  ecp_nistz256_neg(p.p.Z, p.p.Y);
-  copy_conditional(p.p.Y, p.p.Z, wvalue & 1);
-
-  // Convert |p| from affine to Jacobian coordinates. We set Z to zero if |p|
-  // is infinity and |ONE| otherwise. |p| was computed from the table, so it
-  // is infinity iff |wvalue >> 1| is zero.
-  OPENSSL_memset(p.p.Z, 0, sizeof(p.p.Z));
-  copy_conditional(p.p.Z, ONE, is_not_zero(wvalue >> 1));
-
-  for (int i = 1; i < 37; i++) {
-    wvalue = calc_wvalue(&index, p_str);
-
-    ecp_nistz256_select_w7(&t.a, ecp_nistz256_precomputed[i], wvalue >> 1);
-
-    ecp_nistz256_neg(t.p.Z, t.a.Y);
-    copy_conditional(t.a.Y, t.p.Z, wvalue & 1);
-
-    // Note |ecp_nistz256_point_add_affine| does not work if |p.p| and |t.a|
-    // are the same non-infinity point.
-    ecp_nistz256_point_add_affine(&p.p, &p.p, &t.a);
+    ecp_nistz256_windowed_mul(group, out, p_, p_scalar);
+    if (!p_is_infinity) {
+      ecp_nistz256_point_add(&p->p, &p->p, out);
+    }
   }
 
   assert(group->field.width == P256_LIMBS);
-  OPENSSL_memcpy(r->X.words, p.p.X, P256_LIMBS * sizeof(BN_ULONG));
-  OPENSSL_memcpy(r->Y.words, p.p.Y, P256_LIMBS * sizeof(BN_ULONG));
-  OPENSSL_memcpy(r->Z.words, p.p.Z, P256_LIMBS * sizeof(BN_ULONG));
+  OPENSSL_memcpy(r->X.words, p->p.X, P256_LIMBS * sizeof(BN_ULONG));
+  OPENSSL_memcpy(r->Y.words, p->p.Y, P256_LIMBS * sizeof(BN_ULONG));
+  OPENSSL_memcpy(r->Z.words, p->p.Z, P256_LIMBS * sizeof(BN_ULONG));
+}
+
+static void ecp_nistz256_points_mul(const EC_GROUP *group, EC_RAW_POINT *r,
+                                    const EC_SCALAR *g_scalar,
+                                    const EC_RAW_POINT *p_,
+                                    const EC_SCALAR *p_scalar) {
+  assert((p_ != NULL) == (p_scalar != NULL));
+
+  alignas(32) p256_point_union_t t, p;
+
+  if (g_scalar != NULL) {
+    uint8_t p_str[33];
+    OPENSSL_memcpy(p_str, g_scalar->bytes, 32);
+    p_str[32] = 0;
+
+    // First window
+    unsigned index = 0;
+    unsigned wvalue = calc_first_wvalue(&index, p_str);
+
+    ecp_nistz256_select_w7(&p.a, ecp_nistz256_precomputed[0], wvalue >> 1);
+
+    ecp_nistz256_neg(p.p.Z, p.p.Y);
+    copy_conditional(p.p.Y, p.p.Z, wvalue & 1);
+
+    // Convert |p| from affine to Jacobian coordinates. We set Z to zero if |p|
+    // is infinity and |ONE| otherwise. |p| was computed from the table, so it
+    // is infinity iff |wvalue >> 1| is zero.
+    OPENSSL_memset(p.p.Z, 0, sizeof(p.p.Z));
+    copy_conditional(p.p.Z, ONE, is_not_zero(wvalue >> 1));
+
+    for (int i = 1; i < 37; i++) {
+      wvalue = calc_wvalue(&index, p_str);
+
+      ecp_nistz256_select_w7(&t.a, ecp_nistz256_precomputed[i], wvalue >> 1);
+
+      ecp_nistz256_neg(t.p.Z, t.a.Y);
+      copy_conditional(t.a.Y, t.p.Z, wvalue & 1);
+
+      // Note |ecp_nistz256_point_add_affine| does not work if |p.p| and |t.a|
+      // are the same non-infinity point, so it is important that we compute the
+      // |g_scalar| term before the |p_scalar| term.
+      ecp_nistz256_point_add_affine(&p.p, &p.p, &t.a);
+    }
+  }
+
+  mul_p_add_and_store(group, r, g_scalar, p_, p_scalar, &t, &p);
 }
 
 static void ecp_nistz256_points_mul_public(const EC_GROUP *group,
@@ -422,13 +438,7 @@
     ecp_nistz256_point_add_affine(&p.p, &p.p, &t.a);
   }
 
-  ecp_nistz256_windowed_mul(group, &t.p, p_, p_scalar);
-  ecp_nistz256_point_add(&p.p, &p.p, &t.p);
-
-  assert(group->field.width == P256_LIMBS);
-  OPENSSL_memcpy(r->X.words, p.p.X, P256_LIMBS * sizeof(BN_ULONG));
-  OPENSSL_memcpy(r->Y.words, p.p.Y, P256_LIMBS * sizeof(BN_ULONG));
-  OPENSSL_memcpy(r->Z.words, p.p.Z, P256_LIMBS * sizeof(BN_ULONG));
+  mul_p_add_and_store(group, r, g_scalar, p_, p_scalar, &t, &p);
 }
 
 static int ecp_nistz256_get_affine(const EC_GROUP *group,
@@ -635,8 +645,7 @@
   out->point_get_affine_coordinates = ecp_nistz256_get_affine;
   out->add = ecp_nistz256_add;
   out->dbl = ecp_nistz256_dbl;
-  out->mul = ecp_nistz256_point_mul;
-  out->mul_base = ecp_nistz256_point_mul_base;
+  out->mul = ecp_nistz256_points_mul;
   out->mul_public = ecp_nistz256_points_mul_public;
   out->felem_mul = ec_GFp_mont_felem_mul;
   out->felem_sqr = ec_GFp_mont_felem_sqr;
diff --git a/src/crypto/fipsmodule/ec/simple_mul.c b/src/crypto/fipsmodule/ec/simple_mul.c
index 4ed6c48..e05f491 100644
--- a/src/crypto/fipsmodule/ec/simple_mul.c
+++ b/src/crypto/fipsmodule/ec/simple_mul.c
@@ -21,8 +21,9 @@
 #include "../../internal.h"
 
 
-void ec_GFp_mont_mul(const EC_GROUP *group, EC_RAW_POINT *r,
-                     const EC_RAW_POINT *p, const EC_SCALAR *scalar) {
+static void ec_GFp_mont_mul_single(const EC_GROUP *group, EC_RAW_POINT *r,
+                                   const EC_RAW_POINT *p,
+                                   const EC_SCALAR *scalar) {
   // This is a generic implementation for uncommon curves that not do not
   // warrant a tuned one. It uses unsigned digits so that the doubling case in
   // |ec_GFp_mont_add| is always unreachable, erring on safety and simplicity.
@@ -78,7 +79,21 @@
   }
 }
 
-void ec_GFp_mont_mul_base(const EC_GROUP *group, EC_RAW_POINT *r,
-                          const EC_SCALAR *scalar) {
-  ec_GFp_mont_mul(group, r, &group->generator->raw, scalar);
+void ec_GFp_mont_mul(const EC_GROUP *group, EC_RAW_POINT *r,
+                     const EC_SCALAR *g_scalar, const EC_RAW_POINT *p,
+                     const EC_SCALAR *p_scalar) {
+  assert(g_scalar != NULL || p_scalar != NULL);
+  if (p_scalar == NULL) {
+    ec_GFp_mont_mul_single(group, r, &group->generator->raw, g_scalar);
+  } else if (g_scalar == NULL) {
+    ec_GFp_mont_mul_single(group, r, p, p_scalar);
+  } else {
+    // Support constant-time two-point multiplication for compatibility.  This
+    // does not actually come up in keygen, ECDH, or ECDSA, so we implement it
+    // the naive way.
+    ec_GFp_mont_mul_single(group, r, &group->generator->raw, g_scalar);
+    EC_RAW_POINT tmp;
+    ec_GFp_mont_mul_single(group, &tmp, p, p_scalar);
+    ec_GFp_mont_add(group, r, r, &tmp);
+  }
 }
diff --git a/src/crypto/fipsmodule/ec/util.c b/src/crypto/fipsmodule/ec/util.c
index 4f39f18..7303a15 100644
--- a/src/crypto/fipsmodule/ec/util.c
+++ b/src/crypto/fipsmodule/ec/util.c
@@ -18,7 +18,6 @@
 
 #include "internal.h"
 
-
 // This function looks at 5+1 scalar bits (5 current, 1 adjacent less
 // significant bit), and recodes them into a signed digit for use in fast point
 // multiplication: the use of signed rather than unsigned digits means that
@@ -44,13 +43,13 @@
 //     of a nonnegative integer (b_k in {0, 1}), rewrite it in digits 0, 1, -1
 //     by using bit-wise subtraction as follows:
 //
-//        b_k     b_(k-1)  ...  b_2  b_1  b_0
-//      -         b_k      ...  b_3  b_2  b_1  b_0
-//       -----------------------------------------
-//        s_(k+1) s_k      ...  s_3  s_2  s_1  s_0
+//        b_k b_(k-1)  ...  b_2  b_1  b_0
+//      -     b_k      ...  b_3  b_2  b_1  b_0
+//       -------------------------------------
+//        s_k b_(k-1)  ...  s_3  s_2  s_1  s_0
 //
 //     A left-shift followed by subtraction of the original value yields a new
-//     representation of the same value, using signed bits s_i = b_(i-1) - b_i.
+//     representation of the same value, using signed bits s_i = b_(i+1) - b_i.
 //     This representation from Booth's paper has since appeared in the
 //     literature under a variety of different names including "reversed binary
 //     form", "alternating greedy expansion", "mutual opposite form", and
@@ -74,7 +73,7 @@
 // (1961), pp. 67-91), in a radix-2^5 setting.  That is, we always combine five
 // signed bits into a signed digit:
 //
-//       s_(5j + 4) s_(5j + 3) s_(5j + 2) s_(5j + 1) s_(5j)
+//       s_(4j + 4) s_(4j + 3) s_(4j + 2) s_(4j + 1) s_(4j)
 //
 // The sign-alternating property implies that the resulting digit values are
 // integers from -16 to 16.
@@ -82,164 +81,14 @@
 // Of course, we don't actually need to compute the signed digits s_i as an
 // intermediate step (that's just a nice way to see how this scheme relates
 // to the wNAF): a direct computation obtains the recoded digit from the
-// six bits b_(5j + 4) ... b_(5j - 1).
+// six bits b_(4j + 4) ... b_(4j - 1).
 //
-// This function takes those six bits as an integer (0 .. 63), writing the
+// This function takes those five bits as an integer (0 .. 63), writing the
 // recoded digit to *sign (0 for positive, 1 for negative) and *digit (absolute
-// value, in the range 0 .. 16).  Note that this integer essentially provides
-// the input bits "shifted to the left" by one position: for example, the input
-// to compute the least significant recoded digit, given that there's no bit
-// b_-1, has to be b_4 b_3 b_2 b_1 b_0 0.
-//
-// DOUBLING CASE:
-//
-// Point addition formulas for short Weierstrass curves are often incomplete.
-// Edge cases such as P + P or P + ∞ must be handled separately. This
-// complicates constant-time requirements. P + ∞ cannot be avoided (any window
-// may be zero) and is handled with constant-time selects. P + P (where P is not
-// ∞) usually is not. Instead, windowing strategies are chosen to avoid this
-// case. Whether this happens depends on the group order.
-//
-// Let w be the window width (in this function, w = 5). The non-trivial doubling
-// case in single-point scalar multiplication may occur if and only if the
-// 2^(w-1) bit of the group order is zero.
-//
-// Note the above only holds if the scalar is fully reduced and the group order
-// is a prime that is much larger than 2^w. It also only holds when windows
-// are applied from most significant to least significant, doubling between each
-// window. It does not apply to more complex table strategies such as
-// |EC_GFp_nistz256_method|.
-//
-// PROOF:
-//
-// Let n be the group order. Let l be the number of bits needed to represent n.
-// Assume there exists some 0 <= k < n such that signed w-bit windowed
-// multiplication hits the doubling case.
-//
-// Windowed multiplication consists of iterating over groups of s_i (defined
-// above based on k's binary representation) from most to least significant. At
-// iteration i (for i = ..., 3w, 2w, w, 0, starting from the most significant
-// window), we:
-//
-//  1. Double the accumulator A, w times. Let A_i be the value of A at this
-//     point.
-//
-//  2. Set A to T_i + A_i, where T_i is a precomputed multiple of P
-//     corresponding to the window s_(i+w-1) ... s_i.
-//
-// Let j be the index such that A_j = T_j ≠ ∞. Looking at A_i and T_i as
-// multiples of P, define a_i and t_i to be scalar coefficients of A_i and T_i.
-// Thus a_j = t_j ≠ 0 (mod n). Note a_i and t_i may not be reduced mod n. t_i is
-// the value of the w signed bits s_(i+w-1) ... s_i. a_i is computed as a_i =
-// 2^w * (a_(i+w) + t_(i+w)).
-//
-// t_i is bounded by -2^(w-1) <= t_i <= 2^(w-1). Additionally, we may write it
-// in terms of unsigned bits b_i. t_i consists of signed bits s_(i+w-1) ... s_i.
-// This is computed as:
-//
-//         b_(i+w-2) b_(i+w-3)  ...  b_i      b_(i-1)
-//      -  b_(i+w-1) b_(i+w-2)  ...  b_(i+1)  b_i
-//       --------------------------------------------
-//   t_i = s_(i+w-1) s_(i+w-2)  ...  s_(i+1)  s_i
-//
-// Observe that b_(i+w-2) through b_i occur in both terms. Let x be the integer
-// represented by that bit string, i.e. 2^(w-2)*b_(i+w-2) + ... + b_i.
-//
-//   t_i = (2*x + b_(i-1)) - (2^(w-1)*b_(i+w-1) + x)
-//       = x - 2^(w-1)*b_(i+w-1) + b_(i-1)
-//
-// Or, using C notation for bit operations:
-//
-//   t_i = (k>>i) & ((1<<(w-1)) - 1) - (k>>i) & (1<<(w-1)) + (k>>(i-1)) & 1
-//
-// Note b_(i-1) is added in left-shifted by one (or doubled) from its place.
-// This is compensated by t_(i-w)'s subtraction term. Thus, a_i may be computed
-// by adding b_l b_(l-1) ... b_(i+1) b_i and an extra copy of b_(i-1). In C
-// notation, this is:
-//
-//   a_i = (k>>(i+w)) << w + ((k>>(i+w-1)) & 1) << w
-//
-// Observe that, while t_i may be positive or negative, a_i is bounded by
-// 0 <= a_i < n + 2^w. Additionally, a_i can only be zero if b_(i+w-1) and up
-// are all zero. (Note this implies a non-trivial P + (-P) is unreachable for
-// all groups. That would imply the subsequent a_i is zero, which means all
-// terms thus far were zero.)
-//
-// Returning to our doubling position, we have a_j = t_j (mod n). We now
-// determine the value of a_j - t_j, which must be divisible by n. Our bounds on
-// a_j and t_j imply a_j - t_j is 0 or n. If it is 0, a_j = t_j. However, 2^w
-// divides a_j and -2^(w-1) <= t_j <= 2^(w-1), so this can only happen if
-// a_j = t_j = 0, which is a trivial doubling. Therefore, a_j - t_j = n.
-//
-// Now we determine j. Suppose j > 0. w divides j, so j >= w. Then,
-//
-//   n = a_j - t_j = (k>>(j+w)) << w + ((k>>(j+w-1)) & 1) << w - t_j
-//                <= k/2^j + 2^w - t_j
-//                 < n/2^w + 2^w + 2^(w-1)
-//
-// n is much larger than 2^w, so this is impossible. Thus, j = 0: only the final
-// addition may hit the doubling case.
-//
-// Finally, we consider bit patterns for n and k. Divide k into k_H + k_M + k_L
-// such that k_H is the contribution from b_(l-1) .. b_w, k_M is the
-// contribution from b_(w-1), and k_L is the contribution from b_(w-2) ... b_0.
-// That is:
-//
-// - 2^w divides k_H
-// - k_M is 0 or 2^(w-1)
-// - 0 <= k_L < 2^(w-1)
-//
-// Divide n into n_H + n_M + n_L similarly. We thus have:
-//
-//   t_0 = (k>>0) & ((1<<(w-1)) - 1) - (k>>0) & (1<<(w-1)) + (k>>(0-1)) & 1
-//       = k & ((1<<(w-1)) - 1) - k & (1<<(w-1))
-//       = k_L - k_M
-//
-//   a_0 = (k>>(0+w)) << w + ((k>>(0+w-1)) & 1) << w
-//       = (k>>w) << w + ((k>>(w-1)) & 1) << w
-//       = k_H + 2*k_M
-//
-//                 n = a_0 - t_0
-//   n_H + n_M + n_L = (k_H + 2*k_M) - (k_L - k_M)
-//                   = k_H + 3*k_M - k_L
-//
-// k_H - k_L < k and k < n, so k_H - k_L ≠ n. Therefore k_M is not 0 and must be
-// 2^(w-1). Now we consider k_H and n_H. We know k_H <= n_H. Suppose k_H = n_H.
-// Then,
-//
-//   n_M + n_L = 3*(2^(w-1)) - k_L
-//             > 3*(2^(w-1)) - 2^(w-1)
-//             = 2^w
-//
-// Contradiction (n_M + n_L is the bottom w bits of n). Thus k_H < n_H. Suppose
-// k_H < n_H - 2*2^w. Then,
-//
-//   n_H + n_M + n_L = k_H + 3*(2^(w-1)) - k_L
-//                   < n_H - 2*2^w + 3*(2^(w-1)) - k_L
-//         n_M + n_L < -2^(w-1) - k_L
-//
-// Contradiction. Thus, k_H = n_H - 2^w. (Note 2^w divides n_H and k_H.) Thus,
-//
-//   n_H + n_M + n_L = k_H + 3*(2^(w-1)) - k_L
-//                   = n_H - 2^w + 3*(2^(w-1)) - k_L
-//         n_M + n_L = 2^(w-1) - k_L
-//                  <= 2^(w-1)
-//
-// Equality would mean 2^(w-1) divides n, which is impossible if n is prime.
-// Thus n_M + n_L < 2^(w-1), so n_M is zero, proving our condition.
-//
-// This proof constructs k, so, to show the converse, let k_H = n_H - 2^w,
-// k_M = 2^(w-1), k_L = 2^(w-1) - n_L. This will result in a non-trivial point
-// doubling in the final addition and is the only such scalar.
-//
-// COMMON CURVES:
-//
-// The group orders for common curves end in the following bit patterns:
-//
-//   P-521: ...00001001; w = 4 is okay
-//   P-384: ...01110011; w = 2, 5, 6, 7 are okay
-//   P-256: ...01010001; w = 5, 7 are okay
-//   P-224: ...00111101; w = 3, 4, 5, 6 are okay
+// value, in the range 0 .. 8).  Note that this integer essentially provides the
+// input bits "shifted to the left" by one position: for example, the input to
+// compute the least significant recoded digit, given that there's no bit b_-1,
+// has to be b_4 b_3 b_2 b_1 b_0 0.
 void ec_GFp_nistp_recode_scalar_bits(uint8_t *sign, uint8_t *digit,
                                      uint8_t in) {
   uint8_t s, d;
diff --git a/src/crypto/fipsmodule/ecdh/ecdh.c b/src/crypto/fipsmodule/ecdh/ecdh.c
index a7b2f08..b9dc237 100644
--- a/src/crypto/fipsmodule/ecdh/ecdh.c
+++ b/src/crypto/fipsmodule/ecdh/ecdh.c
@@ -93,7 +93,7 @@
   EC_RAW_POINT shared_point;
   uint8_t buf[EC_MAX_BYTES];
   size_t buflen;
-  if (!ec_point_mul_scalar(group, &shared_point, &pub_key->raw, priv) ||
+  if (!ec_point_mul_scalar(group, &shared_point, NULL, &pub_key->raw, priv) ||
       !ec_point_get_affine_coordinate_bytes(group, buf, NULL, &buflen,
                                             sizeof(buf), &shared_point)) {
     OPENSSL_PUT_ERROR(ECDH, ECDH_R_POINT_ARITHMETIC_FAILURE);
diff --git a/src/crypto/fipsmodule/ecdsa/ecdsa.c b/src/crypto/fipsmodule/ecdsa/ecdsa.c
index 38771d5..010ee02 100644
--- a/src/crypto/fipsmodule/ecdsa/ecdsa.c
+++ b/src/crypto/fipsmodule/ecdsa/ecdsa.c
@@ -232,7 +232,7 @@
     ec_scalar_from_montgomery(group, out_kinv_mont, out_kinv_mont);
 
     // Compute r, the x-coordinate of generator * k.
-    if (!ec_point_mul_scalar_base(group, &tmp_point, &k) ||
+    if (!ec_point_mul_scalar(group, &tmp_point, &k, NULL, NULL) ||
         !ec_get_x_coordinate_as_scalar(group, out_r, &tmp_point)) {
       goto err;
     }
diff --git a/src/crypto/fipsmodule/fips_shared.lds b/src/crypto/fipsmodule/fips_shared.lds
deleted file mode 100644
index 6d44abc..0000000
--- a/src/crypto/fipsmodule/fips_shared.lds
+++ /dev/null
@@ -1,19 +0,0 @@
-SECTIONS
-{
-  .text : {
-    BORINGSSL_bcm_text_start = .;
-    *(.text)
-    BORINGSSL_bcm_text_end = .;
-  }
-  .rodata : {
-    BORINGSSL_bcm_rodata_start = .;
-    *(.rodata)
-    BORINGSSL_bcm_rodata_end = .;
-  }
-
-  /DISCARD/ : {
-    *(.rela.dyn)
-    *(.data)
-    *(.rel.ro)
-  }
-}
diff --git a/src/crypto/fipsmodule/fips_shared_support.c b/src/crypto/fipsmodule/fips_shared_support.c
deleted file mode 100644
index 2a66a1f..0000000
--- a/src/crypto/fipsmodule/fips_shared_support.c
+++ /dev/null
@@ -1,32 +0,0 @@
-/* Copyright (c) 2019, Google Inc.
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
- * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
- * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
- * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
-
-#include <stdint.h>
-
-
-#if defined(BORINGSSL_FIPS) && defined(BORINGSSL_SHARED_LIBRARY)
-// BORINGSSL_bcm_text_hash is is default hash value for the FIPS integrity check
-// that must be replaced with the real value during the build process. This
-// value need only be distinct, i.e. so that we can safely search-and-replace it
-// in an object file.
-const uint8_t BORINGSSL_bcm_text_hash[64];
-const uint8_t BORINGSSL_bcm_text_hash[64] = {
-    0xae, 0x2c, 0xea, 0x2a, 0xbd, 0xa6, 0xf3, 0xec, 0x97, 0x7f, 0x9b,
-    0xf6, 0x94, 0x9a, 0xfc, 0x83, 0x68, 0x27, 0xcb, 0xa0, 0xa0, 0x9f,
-    0x6b, 0x6f, 0xde, 0x52, 0xcd, 0xe2, 0xcd, 0xff, 0x31, 0x80, 0xa2,
-    0xd4, 0xc3, 0x66, 0x0f, 0xc2, 0x6a, 0x7b, 0xf4, 0xbe, 0x39, 0xa2,
-    0xd7, 0x25, 0xdb, 0x21, 0x98, 0xe9, 0xd5, 0x53, 0xbf, 0x5c, 0x32,
-    0x06, 0x83, 0x34, 0x0c, 0x65, 0x89, 0x52, 0xbd, 0x1f,
-};
-#endif  // FIPS && SHARED_LIBRARY
diff --git a/src/crypto/fipsmodule/md5/asm/md5-586.pl b/src/crypto/fipsmodule/md5/asm/md5-586.pl
index 20c226b..ded9442 100644
--- a/src/crypto/fipsmodule/md5/asm/md5-586.pl
+++ b/src/crypto/fipsmodule/md5/asm/md5-586.pl
@@ -36,7 +36,7 @@
 &md5_block("md5_block_asm_data_order");
 &asm_finish();
 
-close STDOUT or die "error closing STDOUT";
+close STDOUT;
 
 sub Np
 	{
diff --git a/src/crypto/fipsmodule/md5/asm/md5-x86_64.pl b/src/crypto/fipsmodule/md5/asm/md5-x86_64.pl
index 509bcde..6eb33c0 100644
--- a/src/crypto/fipsmodule/md5/asm/md5-x86_64.pl
+++ b/src/crypto/fipsmodule/md5/asm/md5-x86_64.pl
@@ -380,4 +380,4 @@
 
 print $code;
 
-close STDOUT or die "error closing STDOUT";
+close STDOUT;
diff --git a/src/crypto/fipsmodule/modes/asm/aesni-gcm-x86_64.pl b/src/crypto/fipsmodule/modes/asm/aesni-gcm-x86_64.pl
index d3e3763..b9edb79 100644
--- a/src/crypto/fipsmodule/modes/asm/aesni-gcm-x86_64.pl
+++ b/src/crypto/fipsmodule/modes/asm/aesni-gcm-x86_64.pl
@@ -1143,4 +1143,4 @@
 
 print $code;
 
-close STDOUT or die "error closing STDOUT";
+close STDOUT;
diff --git a/src/crypto/fipsmodule/modes/asm/ghash-armv4.pl b/src/crypto/fipsmodule/modes/asm/ghash-armv4.pl
index 54c80f7..778b543 100644
--- a/src/crypto/fipsmodule/modes/asm/ghash-armv4.pl
+++ b/src/crypto/fipsmodule/modes/asm/ghash-armv4.pl
@@ -553,4 +553,4 @@
 
 	print $_,"\n";
 }
-close STDOUT or die "error closing STDOUT"; # enforce flush
+close STDOUT; # enforce flush
diff --git a/src/crypto/fipsmodule/modes/asm/ghash-neon-armv8.pl b/src/crypto/fipsmodule/modes/asm/ghash-neon-armv8.pl
index f57017d..972be41 100644
--- a/src/crypto/fipsmodule/modes/asm/ghash-neon-armv8.pl
+++ b/src/crypto/fipsmodule/modes/asm/ghash-neon-armv8.pl
@@ -284,4 +284,4 @@
 
 	print $_,"\n";
 }
-close STDOUT or die "error closing STDOUT"; # enforce flush
+close STDOUT; # enforce flush
diff --git a/src/crypto/fipsmodule/modes/asm/ghash-ssse3-x86.pl b/src/crypto/fipsmodule/modes/asm/ghash-ssse3-x86.pl
index 45e1ee1..0d9ce15 100644
--- a/src/crypto/fipsmodule/modes/asm/ghash-ssse3-x86.pl
+++ b/src/crypto/fipsmodule/modes/asm/ghash-ssse3-x86.pl
@@ -285,4 +285,4 @@
 
 &asm_finish();
 
-close STDOUT or die "error closing STDOUT";
+close STDOUT;
diff --git a/src/crypto/fipsmodule/modes/asm/ghash-ssse3-x86_64.pl b/src/crypto/fipsmodule/modes/asm/ghash-ssse3-x86_64.pl
index e0e5010..1dd2519 100644
--- a/src/crypto/fipsmodule/modes/asm/ghash-ssse3-x86_64.pl
+++ b/src/crypto/fipsmodule/modes/asm/ghash-ssse3-x86_64.pl
@@ -410,4 +410,4 @@
 }
 
 print $code;
-close STDOUT or die "error closing STDOUT";
+close STDOUT;
diff --git a/src/crypto/fipsmodule/modes/asm/ghash-x86.pl b/src/crypto/fipsmodule/modes/asm/ghash-x86.pl
index a2ab859..02edf03 100644
--- a/src/crypto/fipsmodule/modes/asm/ghash-x86.pl
+++ b/src/crypto/fipsmodule/modes/asm/ghash-x86.pl
@@ -1150,7 +1150,7 @@
 &asciz("GHASH for x86, CRYPTOGAMS by <appro\@openssl.org>");
 &asm_finish();
 
-close STDOUT or die "error closing STDOUT";
+close STDOUT;
 
 # A question was risen about choice of vanilla MMX. Or rather why wasn't
 # SSE2 chosen instead? In addition to the fact that MMX runs on legacy
diff --git a/src/crypto/fipsmodule/modes/asm/ghash-x86_64.pl b/src/crypto/fipsmodule/modes/asm/ghash-x86_64.pl
index 5c4122f..b267698 100644
--- a/src/crypto/fipsmodule/modes/asm/ghash-x86_64.pl
+++ b/src/crypto/fipsmodule/modes/asm/ghash-x86_64.pl
@@ -1803,4 +1803,4 @@
 
 print $code;
 
-close STDOUT or die "error closing STDOUT";
+close STDOUT;
diff --git a/src/crypto/fipsmodule/modes/asm/ghashp8-ppc.pl b/src/crypto/fipsmodule/modes/asm/ghashp8-ppc.pl
index 7a1259b..c46cdb5 100644
--- a/src/crypto/fipsmodule/modes/asm/ghashp8-ppc.pl
+++ b/src/crypto/fipsmodule/modes/asm/ghashp8-ppc.pl
@@ -667,4 +667,4 @@
 	print $_,"\n";
 }
 
-close STDOUT or die "error closing STDOUT"; # enforce flush
+close STDOUT; # enforce flush
diff --git a/src/crypto/fipsmodule/modes/asm/ghashv8-armx.pl b/src/crypto/fipsmodule/modes/asm/ghashv8-armx.pl
index 99124a2..1435db5 100644
--- a/src/crypto/fipsmodule/modes/asm/ghashv8-armx.pl
+++ b/src/crypto/fipsmodule/modes/asm/ghashv8-armx.pl
@@ -425,4 +425,4 @@
     }
 }
 
-close STDOUT or die "error closing STDOUT"; # enforce flush
+close STDOUT; # enforce flush
diff --git a/src/crypto/fipsmodule/modes/ccm.c b/src/crypto/fipsmodule/modes/ccm.c
new file mode 100644
index 0000000..5a153f4
--- /dev/null
+++ b/src/crypto/fipsmodule/modes/ccm.c
@@ -0,0 +1,256 @@
+/* ====================================================================
+ * Copyright (c) 2011 The OpenSSL Project.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * 3. All advertising materials mentioning features or use of this
+ *    software must display the following acknowledgment:
+ *    "This product includes software developed by the OpenSSL Project
+ *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
+ *
+ * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
+ *    endorse or promote products derived from this software without
+ *    prior written permission. For written permission, please contact
+ *    openssl-core@openssl.org.
+ *
+ * 5. Products derived from this software may not be called "OpenSSL"
+ *    nor may "OpenSSL" appear in their names without prior written
+ *    permission of the OpenSSL Project.
+ *
+ * 6. Redistributions of any form whatsoever must retain the following
+ *    acknowledgment:
+ *    "This product includes software developed by the OpenSSL Project
+ *    for use in the OpenSSL Toolkit (http://www.openssl.org/)"
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
+ * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
+ * ====================================================================
+ */
+
+#include <assert.h>
+#include <string.h>
+
+#include <openssl/cpu.h>
+#include <openssl/mem.h>
+
+#include "../../internal.h"
+#include "internal.h"
+
+
+struct ccm128_state {
+  union {
+    uint64_t u[2];
+    uint8_t c[16];
+  } nonce, cmac;
+};
+
+int CRYPTO_ccm128_init(CCM128_CONTEXT *ctx, const AES_KEY *key,
+                       block128_f block, ctr128_f ctr, unsigned M, unsigned L) {
+  if (M < 4 || M > 16 || (M & 1) != 0 || L < 2 || L > 8) {
+    return 0;
+  }
+  ctx->block = block;
+  ctx->ctr = ctr;
+  ctx->M = M;
+  ctx->L = L;
+  return 1;
+}
+
+size_t CRYPTO_ccm128_max_input(const CCM128_CONTEXT *ctx) {
+  return ctx->L >= sizeof(size_t) ? (size_t)-1
+                                  : (((size_t)1) << (ctx->L * 8)) - 1;
+}
+
+static int ccm128_init_state(const CCM128_CONTEXT *ctx,
+                             struct ccm128_state *state, const AES_KEY *key,
+                             const uint8_t *nonce, size_t nonce_len,
+                             const uint8_t *aad, size_t aad_len,
+                             size_t plaintext_len) {
+  const block128_f block = ctx->block;
+  const unsigned M = ctx->M;
+  const unsigned L = ctx->L;
+
+  // |L| determines the expected |nonce_len| and the limit for |plaintext_len|.
+  if (plaintext_len > CRYPTO_ccm128_max_input(ctx) ||
+      nonce_len != 15 - L) {
+    return 0;
+  }
+
+  // Assemble the first block for computing the MAC.
+  OPENSSL_memset(state, 0, sizeof(*state));
+  state->nonce.c[0] = (uint8_t)((L - 1) | ((M - 2) / 2) << 3);
+  if (aad_len != 0) {
+    state->nonce.c[0] |= 0x40;  // Set AAD Flag
+  }
+  OPENSSL_memcpy(&state->nonce.c[1], nonce, nonce_len);
+  for (unsigned i = 0; i < L; i++) {
+    state->nonce.c[15 - i] = (uint8_t)(plaintext_len >> (8 * i));
+  }
+
+  (*block)(state->nonce.c, state->cmac.c, key);
+  size_t blocks = 1;
+
+  if (aad_len != 0) {
+    unsigned i;
+    // Cast to u64 to avoid the compiler complaining about invalid shifts.
+    uint64_t aad_len_u64 = aad_len;
+    if (aad_len_u64 < 0x10000 - 0x100) {
+      state->cmac.c[0] ^= (uint8_t)(aad_len_u64 >> 8);
+      state->cmac.c[1] ^= (uint8_t)aad_len_u64;
+      i = 2;
+    } else if (aad_len_u64 <= 0xffffffff) {
+      state->cmac.c[0] ^= 0xff;
+      state->cmac.c[1] ^= 0xfe;
+      state->cmac.c[2] ^= (uint8_t)(aad_len_u64 >> 24);
+      state->cmac.c[3] ^= (uint8_t)(aad_len_u64 >> 16);
+      state->cmac.c[4] ^= (uint8_t)(aad_len_u64 >> 8);
+      state->cmac.c[5] ^= (uint8_t)aad_len_u64;
+      i = 6;
+    } else {
+      state->cmac.c[0] ^= 0xff;
+      state->cmac.c[1] ^= 0xff;
+      state->cmac.c[2] ^= (uint8_t)(aad_len_u64 >> 56);
+      state->cmac.c[3] ^= (uint8_t)(aad_len_u64 >> 48);
+      state->cmac.c[4] ^= (uint8_t)(aad_len_u64 >> 40);
+      state->cmac.c[5] ^= (uint8_t)(aad_len_u64 >> 32);
+      state->cmac.c[6] ^= (uint8_t)(aad_len_u64 >> 24);
+      state->cmac.c[7] ^= (uint8_t)(aad_len_u64 >> 16);
+      state->cmac.c[8] ^= (uint8_t)(aad_len_u64 >> 8);
+      state->cmac.c[9] ^= (uint8_t)aad_len_u64;
+      i = 10;
+    }
+
+    do {
+      for (; i < 16 && aad_len != 0; i++) {
+        state->cmac.c[i] ^= *aad;
+        aad++;
+        aad_len--;
+      }
+      (*block)(state->cmac.c, state->cmac.c, key);
+      blocks++;
+      i = 0;
+    } while (aad_len != 0);
+  }
+
+  // Per RFC 3610, section 2.6, the total number of block cipher operations done
+  // must not exceed 2^61. There are two block cipher operations remaining per
+  // message block, plus one block at the end to encrypt the MAC.
+  size_t remaining_blocks = 2 * ((plaintext_len + 15) / 16) + 1;
+  if (plaintext_len + 15 < plaintext_len ||
+      remaining_blocks + blocks < blocks ||
+      (uint64_t) remaining_blocks + blocks > UINT64_C(1) << 61) {
+    return 0;
+  }
+
+  // Assemble the first block for encrypting and decrypting. The bottom |L|
+  // bytes are replaced with a counter and all bit the encoding of |L| is
+  // cleared in the first byte.
+  state->nonce.c[0] &= 7;
+  return 1;
+}
+
+static int ccm128_encrypt(const CCM128_CONTEXT *ctx, struct ccm128_state *state,
+                          const AES_KEY *key, uint8_t *out, const uint8_t *in,
+                          size_t len) {
+  // The counter for encryption begins at one.
+  for (unsigned i = 0; i < ctx->L; i++) {
+    state->nonce.c[15 - i] = 0;
+  }
+  state->nonce.c[15] = 1;
+
+  uint8_t partial_buf[16];
+  unsigned num = 0;
+  if (ctx->ctr != NULL) {
+    CRYPTO_ctr128_encrypt_ctr32(in, out, len, key, state->nonce.c, partial_buf,
+                                &num, ctx->ctr);
+  } else {
+    CRYPTO_ctr128_encrypt(in, out, len, key, state->nonce.c, partial_buf, &num,
+                          ctx->block);
+  }
+  return 1;
+}
+
+static int ccm128_compute_mac(const CCM128_CONTEXT *ctx,
+                              struct ccm128_state *state, const AES_KEY *key,
+                              uint8_t *out_tag, size_t tag_len,
+                              const uint8_t *in, size_t len) {
+  block128_f block = ctx->block;
+  if (tag_len != ctx->M) {
+    return 0;
+  }
+
+  // Incorporate |in| into the MAC.
+  union {
+    uint64_t u[2];
+    uint8_t c[16];
+  } tmp;
+  while (len >= 16) {
+    OPENSSL_memcpy(tmp.c, in, 16);
+    state->cmac.u[0] ^= tmp.u[0];
+    state->cmac.u[1] ^= tmp.u[1];
+    (*block)(state->cmac.c, state->cmac.c, key);
+    in += 16;
+    len -= 16;
+  }
+  if (len > 0) {
+    for (size_t i = 0; i < len; i++) {
+      state->cmac.c[i] ^= in[i];
+    }
+    (*block)(state->cmac.c, state->cmac.c, key);
+  }
+
+  // Encrypt the MAC with counter zero.
+  for (unsigned i = 0; i < ctx->L; i++) {
+    state->nonce.c[15 - i] = 0;
+  }
+  (*block)(state->nonce.c, tmp.c, key);
+  state->cmac.u[0] ^= tmp.u[0];
+  state->cmac.u[1] ^= tmp.u[1];
+
+  OPENSSL_memcpy(out_tag, state->cmac.c, tag_len);
+  return 1;
+}
+
+int CRYPTO_ccm128_encrypt(const CCM128_CONTEXT *ctx, const AES_KEY *key,
+                          uint8_t *out, uint8_t *out_tag, size_t tag_len,
+                          const uint8_t *nonce, size_t nonce_len,
+                          const uint8_t *in, size_t len, const uint8_t *aad,
+                          size_t aad_len) {
+  struct ccm128_state state;
+  return ccm128_init_state(ctx, &state, key, nonce, nonce_len, aad, aad_len,
+                           len) &&
+         ccm128_compute_mac(ctx, &state, key, out_tag, tag_len, in, len) &&
+         ccm128_encrypt(ctx, &state, key, out, in, len);
+}
+
+int CRYPTO_ccm128_decrypt(const CCM128_CONTEXT *ctx, const AES_KEY *key,
+                          uint8_t *out, uint8_t *out_tag, size_t tag_len,
+                          const uint8_t *nonce, size_t nonce_len,
+                          const uint8_t *in, size_t len, const uint8_t *aad,
+                          size_t aad_len) {
+  struct ccm128_state state;
+  return ccm128_init_state(ctx, &state, key, nonce, nonce_len, aad, aad_len,
+                           len) &&
+         ccm128_encrypt(ctx, &state, key, out, in, len) &&
+         ccm128_compute_mac(ctx, &state, key, out_tag, tag_len, out, len);
+}
diff --git a/src/crypto/fipsmodule/modes/internal.h b/src/crypto/fipsmodule/modes/internal.h
index 0971a90..dec1e56 100644
--- a/src/crypto/fipsmodule/modes/internal.h
+++ b/src/crypto/fipsmodule/modes/internal.h
@@ -345,6 +345,42 @@
 #endif  // GHASH_ASM
 
 
+// CCM.
+
+typedef struct ccm128_context {
+  block128_f block;
+  ctr128_f ctr;
+  unsigned M, L;
+} CCM128_CONTEXT;
+
+// CRYPTO_ccm128_init initialises |ctx| to use |block| (typically AES) with the
+// specified |M| and |L| parameters. It returns one on success and zero if |M|
+// or |L| is invalid.
+int CRYPTO_ccm128_init(CCM128_CONTEXT *ctx, const AES_KEY *key,
+                       block128_f block, ctr128_f ctr, unsigned M, unsigned L);
+
+// CRYPTO_ccm128_max_input returns the maximum input length accepted by |ctx|.
+size_t CRYPTO_ccm128_max_input(const CCM128_CONTEXT *ctx);
+
+// CRYPTO_ccm128_encrypt encrypts |len| bytes from |in| to |out| writing the tag
+// to |out_tag|. |key| must be the same key that was passed to
+// |CRYPTO_ccm128_init|. It returns one on success and zero otherwise.
+int CRYPTO_ccm128_encrypt(const CCM128_CONTEXT *ctx, const AES_KEY *key,
+                          uint8_t *out, uint8_t *out_tag, size_t tag_len,
+                          const uint8_t *nonce, size_t nonce_len,
+                          const uint8_t *in, size_t len, const uint8_t *aad,
+                          size_t aad_len);
+
+// CRYPTO_ccm128_decrypt decrypts |len| bytes from |in| to |out|, writing the
+// expected tag to |out_tag|. |key| must be the same key that was passed to
+// |CRYPTO_ccm128_init|. It returns one on success and zero otherwise.
+int CRYPTO_ccm128_decrypt(const CCM128_CONTEXT *ctx, const AES_KEY *key,
+                          uint8_t *out, uint8_t *out_tag, size_t tag_len,
+                          const uint8_t *nonce, size_t nonce_len,
+                          const uint8_t *in, size_t len, const uint8_t *aad,
+                          size_t aad_len);
+
+
 // CBC.
 
 // cbc128_f is the type of a function that performs CBC-mode encryption.
diff --git a/src/crypto/fipsmodule/rand/asm/rdrand-x86_64.pl b/src/crypto/fipsmodule/rand/asm/rdrand-x86_64.pl
index eb2a592..76b5f9b 100644
--- a/src/crypto/fipsmodule/rand/asm/rdrand-x86_64.pl
+++ b/src/crypto/fipsmodule/rand/asm/rdrand-x86_64.pl
@@ -84,4 +84,4 @@
 .size CRYPTO_rdrand_multiple8_buf,.-CRYPTO_rdrand_multiple8_buf
 ___
 
-close STDOUT or die "error closing STDOUT";	# flush
+close STDOUT;	# flush
diff --git a/src/crypto/fipsmodule/rsa/rsa_impl.c b/src/crypto/fipsmodule/rsa/rsa_impl.c
index ab2abe9..903ba9a 100644
--- a/src/crypto/fipsmodule/rsa/rsa_impl.c
+++ b/src/crypto/fipsmodule/rsa/rsa_impl.c
@@ -554,7 +554,7 @@
   if (!ret) {
     OPENSSL_PUT_ERROR(RSA, RSA_R_PADDING_CHECK_FAILED);
   } else {
-    CONSTTIME_DECLASSIFY(out, *out_len);
+    CONSTTIME_DECLASSIFY(out, out_len);
   }
 
 err:
diff --git a/src/crypto/fipsmodule/sha/asm/sha1-586.pl b/src/crypto/fipsmodule/sha/asm/sha1-586.pl
index bf42961..87fd361 100644
--- a/src/crypto/fipsmodule/sha/asm/sha1-586.pl
+++ b/src/crypto/fipsmodule/sha/asm/sha1-586.pl
@@ -1483,4 +1483,4 @@
 
 &asm_finish();
 
-close STDOUT or die "error closing STDOUT";
+close STDOUT;
diff --git a/src/crypto/fipsmodule/sha/asm/sha1-armv4-large.pl b/src/crypto/fipsmodule/sha/asm/sha1-armv4-large.pl
index ca82514..27187dd 100644
--- a/src/crypto/fipsmodule/sha/asm/sha1-armv4-large.pl
+++ b/src/crypto/fipsmodule/sha/asm/sha1-armv4-large.pl
@@ -740,4 +740,4 @@
 	print $_,$/;
 }
 
-close STDOUT or die "error closing STDOUT"; # enforce flush
+close STDOUT; # enforce flush
diff --git a/src/crypto/fipsmodule/sha/asm/sha1-armv8.pl b/src/crypto/fipsmodule/sha/asm/sha1-armv8.pl
index c147462..7c8880f 100644
--- a/src/crypto/fipsmodule/sha/asm/sha1-armv8.pl
+++ b/src/crypto/fipsmodule/sha/asm/sha1-armv8.pl
@@ -353,4 +353,4 @@
 	print $_,"\n";
 }
 
-close STDOUT or die "error closing STDOUT";
+close STDOUT;
diff --git a/src/crypto/fipsmodule/sha/asm/sha1-x86_64.pl b/src/crypto/fipsmodule/sha/asm/sha1-x86_64.pl
index df7cbc3..fd4ff2a 100755
--- a/src/crypto/fipsmodule/sha/asm/sha1-x86_64.pl
+++ b/src/crypto/fipsmodule/sha/asm/sha1-x86_64.pl
@@ -2122,4 +2122,4 @@
 
 	print $_,"\n";
 }
-close STDOUT or die "error closing STDOUT";
+close STDOUT;
diff --git a/src/crypto/fipsmodule/sha/asm/sha256-586.pl b/src/crypto/fipsmodule/sha/asm/sha256-586.pl
index 240a604..129a9f4 100644
--- a/src/crypto/fipsmodule/sha/asm/sha256-586.pl
+++ b/src/crypto/fipsmodule/sha/asm/sha256-586.pl
@@ -1287,4 +1287,4 @@
 
 &asm_finish();
 
-close STDOUT or die "error closing STDOUT";
+close STDOUT;
diff --git a/src/crypto/fipsmodule/sha/asm/sha256-armv4.pl b/src/crypto/fipsmodule/sha/asm/sha256-armv4.pl
index 15d78de..e5ecdfd 100644
--- a/src/crypto/fipsmodule/sha/asm/sha256-armv4.pl
+++ b/src/crypto/fipsmodule/sha/asm/sha256-armv4.pl
@@ -735,4 +735,4 @@
 	print $_,"\n";
 }
 
-close STDOUT or die "error closing STDOUT"; # enforce flush
+close STDOUT; # enforce flush
diff --git a/src/crypto/fipsmodule/sha/asm/sha512-586.pl b/src/crypto/fipsmodule/sha/asm/sha512-586.pl
index 01acf67..25a5f25 100644
--- a/src/crypto/fipsmodule/sha/asm/sha512-586.pl
+++ b/src/crypto/fipsmodule/sha/asm/sha512-586.pl
@@ -922,4 +922,4 @@
 
 &asm_finish();
 
-close STDOUT or die "error closing STDOUT";
+close STDOUT;
diff --git a/src/crypto/fipsmodule/sha/asm/sha512-armv4.pl b/src/crypto/fipsmodule/sha/asm/sha512-armv4.pl
index c8c715e..cc247a4 100644
--- a/src/crypto/fipsmodule/sha/asm/sha512-armv4.pl
+++ b/src/crypto/fipsmodule/sha/asm/sha512-armv4.pl
@@ -670,4 +670,4 @@
 close SELF;
 
 print $code;
-close STDOUT or die "error closing STDOUT"; # enforce flush
+close STDOUT; # enforce flush
diff --git a/src/crypto/fipsmodule/sha/asm/sha512-armv8.pl b/src/crypto/fipsmodule/sha/asm/sha512-armv8.pl
index 64306be..3f69071 100644
--- a/src/crypto/fipsmodule/sha/asm/sha512-armv8.pl
+++ b/src/crypto/fipsmodule/sha/asm/sha512-armv8.pl
@@ -457,4 +457,4 @@
 	print $_,"\n";
 }
 
-close STDOUT or die "error closing STDOUT";
+close STDOUT;
diff --git a/src/crypto/fipsmodule/sha/asm/sha512-x86_64.pl b/src/crypto/fipsmodule/sha/asm/sha512-x86_64.pl
index 8c5a5f3..4927850 100755
--- a/src/crypto/fipsmodule/sha/asm/sha512-x86_64.pl
+++ b/src/crypto/fipsmodule/sha/asm/sha512-x86_64.pl
@@ -278,6 +278,7 @@
 	jnz	_shaext_shortcut
 ___
     # XOP codepath removed.
+___
 $code.=<<___ if ($avx>1);
 	and	\$`1<<8|1<<5|1<<3`,%r11d	# check for BMI2+AVX2+BMI1
 	cmp	\$`1<<8|1<<5|1<<3`,%r11d
@@ -2082,4 +2083,4 @@
 
 	print $_,"\n";
 }
-close STDOUT or die "error closing STDOUT";
+close STDOUT;
diff --git a/src/crypto/internal.h b/src/crypto/internal.h
index 76a317a..b80f065 100644
--- a/src/crypto/internal.h
+++ b/src/crypto/internal.h
@@ -240,36 +240,6 @@
 #define CONSTTIME_TRUE_8 ((uint8_t)0xff)
 #define CONSTTIME_FALSE_8 ((uint8_t)0)
 
-// value_barrier_w returns |a|, but prevents GCC and Clang from reasoning about
-// the returned value. This is used to mitigate compilers undoing constant-time
-// code, until we can express our requirements directly in the language.
-//
-// Note the compiler is aware that |value_barrier_w| has no side effects and
-// always has the same output for a given input. This allows it to eliminate
-// dead code, move computations across loops, and vectorize.
-static inline crypto_word_t value_barrier_w(crypto_word_t a) {
-#if !defined(OPENSSL_NO_ASM) && (defined(__GNUC__) || defined(__clang__))
-  __asm__("" : "+r"(a) : /* no inputs */);
-#endif
-  return a;
-}
-
-// value_barrier_u32 behaves like |value_barrier_w| but takes a |uint32_t|.
-static inline uint32_t value_barrier_u32(uint32_t a) {
-#if !defined(OPENSSL_NO_ASM) && (defined(__GNUC__) || defined(__clang__))
-  __asm__("" : "+r"(a) : /* no inputs */);
-#endif
-  return a;
-}
-
-// value_barrier_u64 behaves like |value_barrier_w| but takes a |uint64_t|.
-static inline uint64_t value_barrier_u64(uint64_t a) {
-#if !defined(OPENSSL_NO_ASM) && (defined(__GNUC__) || defined(__clang__))
-  __asm__("" : "+r"(a) : /* no inputs */);
-#endif
-  return a;
-}
-
 // constant_time_msb_w returns the given value with the MSB copied to all the
 // other bits.
 static inline crypto_word_t constant_time_msb_w(crypto_word_t a) {
@@ -382,13 +352,7 @@
 static inline crypto_word_t constant_time_select_w(crypto_word_t mask,
                                                    crypto_word_t a,
                                                    crypto_word_t b) {
-  // Clang recognizes this pattern as a select. While it usually transforms it
-  // to a cmov, it sometimes further transforms it into a branch, which we do
-  // not want.
-  //
-  // Adding barriers to both |mask| and |~mask| breaks the relationship between
-  // the two, which makes the compiler stick with bitmasks.
-  return (value_barrier_w(mask) & a) | (value_barrier_w(~mask) & b);
+  return (mask & a) | (~mask & b);
 }
 
 // constant_time_select_8 acts like |constant_time_select| but operates on
diff --git a/src/crypto/mem.c b/src/crypto/mem.c
index 0ca0e84..14e0bdf 100644
--- a/src/crypto/mem.c
+++ b/src/crypto/mem.c
@@ -79,10 +79,7 @@
 static void __asan_unpoison_memory_region(const void *addr, size_t size) {}
 #endif
 
-// Windows doesn't really support weak symbols as of May 2019, and Clang on
-// Windows will emit strong symbols instead. See
-// https://bugs.llvm.org/show_bug.cgi?id=37598
-#if defined(__GNUC__) || (defined(__clang__) && !defined(_MSC_VER))
+#if defined(__GNUC__) || defined(__clang__)
 // sdallocx is a sized |free| function. By passing the size (which we happen to
 // always know in BoringSSL), the malloc implementation can save work. We cannot
 // depend on |sdallocx| being available so we declare a wrapper that falls back
diff --git a/src/crypto/obj/obj_dat.h b/src/crypto/obj/obj_dat.h
index 1a9bf15..0313a08 100644
--- a/src/crypto/obj/obj_dat.h
+++ b/src/crypto/obj/obj_dat.h
@@ -57,7 +57,7 @@
 /* This file is generated by crypto/obj/objects.go. */
 
 
-#define NUM_NID 961
+#define NUM_NID 960
 
 static const uint8_t kObjectData[] = {
     /* NID_rsadsi */
@@ -8756,7 +8756,6 @@
     {"KxANY", "kx-any", NID_kx_any, 0, NULL, 0},
     {"AuthANY", "auth-any", NID_auth_any, 0, NULL, 0},
     {"CECPQ2", "CECPQ2", NID_CECPQ2, 0, NULL, 0},
-    {"CECPQ2b", "CECPQ2b", NID_CECPQ2b, 0, NULL, 0},
 };
 
 static const unsigned kNIDsInShortNameOrder[] = {
@@ -8819,7 +8818,6 @@
     109 /* CAST5-ECB */,
     111 /* CAST5-OFB */,
     959 /* CECPQ2 */,
-    960 /* CECPQ2b */,
     894 /* CMAC */,
     13 /* CN */,
     141 /* CRLReason */,
@@ -9725,7 +9723,6 @@
     179 /* CA Issuers */,
     785 /* CA Repository */,
     959 /* CECPQ2 */,
-    960 /* CECPQ2b */,
     131 /* Code Signing */,
     783 /* Diffie-Hellman based MAC */,
     382 /* Directory */,
diff --git a/src/crypto/obj/obj_mac.num b/src/crypto/obj/obj_mac.num
index f2d4e8c..5fa839d 100644
--- a/src/crypto/obj/obj_mac.num
+++ b/src/crypto/obj/obj_mac.num
@@ -948,4 +948,3 @@
 kx_any		957
 auth_any		958
 CECPQ2		959
-CECPQ2b		960
diff --git a/src/crypto/obj/objects.txt b/src/crypto/obj/objects.txt
index 6e7ecf0..6dbb7ad 100644
--- a/src/crypto/obj/objects.txt
+++ b/src/crypto/obj/objects.txt
@@ -1337,9 +1337,6 @@
 # NID for CECPQ2 (no corresponding OID).
  : CECPQ2
 
-# NID for CECPQ2 (no corresponding OID).
- : CECPQ2b
-
 # See RFC 8410.
 1 3 101 112 : ED25519
 
diff --git a/src/crypto/perlasm/arm-xlate.pl b/src/crypto/perlasm/arm-xlate.pl
index 655be61..eb8ea59 100755
--- a/src/crypto/perlasm/arm-xlate.pl
+++ b/src/crypto/perlasm/arm-xlate.pl
@@ -168,15 +168,6 @@
     $line =~ s|^\s+||;		# ... and skip white spaces in beginning...
     $line =~ s|\s+$||;		# ... and at the end
 
-    if ($flavour =~ /64/) {
-	my $copy = $line;
-	# Also remove line comments.
-	$copy =~ s|//.*||;
-	if ($copy =~ /\b[wx]18\b/) {
-	    die "r18 is reserved by the platform and may not be used.";
-	}
-    }
-
     {
 	$line =~ s|[\b\.]L(\w{2,})|L$1|g;	# common denominator for Locallabel
 	$line =~ s|\bL(\w{2,})|\.L$1|g	if ($dotinlocallabels);
diff --git a/src/crypto/pkcs7/pkcs7.c b/src/crypto/pkcs7/pkcs7.c
index 1d0b139..c04bffd 100644
--- a/src/crypto/pkcs7/pkcs7.c
+++ b/src/crypto/pkcs7/pkcs7.c
@@ -134,7 +134,7 @@
 int pkcs7_bundle(CBB *out, int (*cb)(CBB *out, const void *arg),
                  const void *arg) {
   CBB outer_seq, oid, wrapped_seq, seq, version_bytes, digest_algos_set,
-      content_info, signer_infos;
+      content_info;
 
   // See https://tools.ietf.org/html/rfc2315#section-7
   if (!CBB_add_asn1(out, &outer_seq, CBS_ASN1_SEQUENCE) ||
@@ -150,8 +150,7 @@
       !CBB_add_asn1(&seq, &content_info, CBS_ASN1_SEQUENCE) ||
       !CBB_add_asn1(&content_info, &oid, CBS_ASN1_OBJECT) ||
       !CBB_add_bytes(&oid, kPKCS7Data, sizeof(kPKCS7Data)) ||
-      !cb(&seq, arg) ||
-      !CBB_add_asn1(&seq, &signer_infos, CBS_ASN1_SET)) {
+      !cb(&seq, arg)) {
     return 0;
   }
 
diff --git a/src/crypto/pkcs7/pkcs7_test.cc b/src/crypto/pkcs7/pkcs7_test.cc
index 948b44f..1ac9af2 100644
--- a/src/crypto/pkcs7/pkcs7_test.cc
+++ b/src/crypto/pkcs7/pkcs7_test.cc
@@ -469,7 +469,7 @@
     "fNQMQoI9So4Vdy88Kow6BBBV3Lu6sZHue+cjxXETrmshNdNk8ABUMQA=\n"
     "-----END PKCS7-----\n";
 
-static void TestCertReparse(const uint8_t *der_bytes, size_t der_len) {
+static void TestCertRepase(const uint8_t *der_bytes, size_t der_len) {
   bssl::UniquePtr<STACK_OF(X509)> certs(sk_X509_new_null());
   ASSERT_TRUE(certs);
   bssl::UniquePtr<STACK_OF(X509)> certs2(sk_X509_new_null());
@@ -638,11 +638,11 @@
 }
 
 TEST(PKCS7Test, CertReparseNSS) {
-  TestCertReparse(kPKCS7NSS, sizeof(kPKCS7NSS));
+  TestCertRepase(kPKCS7NSS, sizeof(kPKCS7NSS));
 }
 
 TEST(PKCS7Test, CertReparseWindows) {
-  TestCertReparse(kPKCS7Windows, sizeof(kPKCS7Windows));
+  TestCertRepase(kPKCS7Windows, sizeof(kPKCS7Windows));
 }
 
 TEST(PKCS7Test, CrlReparse) {
diff --git a/src/crypto/pkcs8/p5_pbev2.c b/src/crypto/pkcs8/p5_pbev2.c
index e58cf44..7497b00 100644
--- a/src/crypto/pkcs8/p5_pbev2.c
+++ b/src/crypto/pkcs8/p5_pbev2.c
@@ -81,10 +81,6 @@
 static const uint8_t kHMACWithSHA1[] = {0x2a, 0x86, 0x48, 0x86,
                                         0xf7, 0x0d, 0x02, 0x07};
 
-// 1.2.840.113549.2.9
-static const uint8_t kHMACWithSHA256[] = {0x2a, 0x86, 0x48, 0x86,
-                                          0xf7, 0x0d, 0x02, 0x09};
-
 static const struct {
   uint8_t oid[9];
   uint8_t oid_len;
@@ -144,18 +140,18 @@
 }
 
 static int pkcs5_pbe2_cipher_init(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher,
-                                  const EVP_MD *pbkdf2_md, unsigned iterations,
-                                  const char *pass, size_t pass_len,
-                                  const uint8_t *salt, size_t salt_len,
-                                  const uint8_t *iv, size_t iv_len, int enc) {
+                                  unsigned iterations, const char *pass,
+                                  size_t pass_len, const uint8_t *salt,
+                                  size_t salt_len, const uint8_t *iv,
+                                  size_t iv_len, int enc) {
   if (iv_len != EVP_CIPHER_iv_length(cipher)) {
     OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_ERROR_SETTING_CIPHER_PARAMS);
     return 0;
   }
 
   uint8_t key[EVP_MAX_KEY_LENGTH];
-  int ret = PKCS5_PBKDF2_HMAC(pass, pass_len, salt, salt_len, iterations,
-                              pbkdf2_md, EVP_CIPHER_key_length(cipher), key) &&
+  int ret = PKCS5_PBKDF2_HMAC_SHA1(pass, pass_len, salt, salt_len, iterations,
+                                   EVP_CIPHER_key_length(cipher), key) &&
             EVP_CipherInit_ex(ctx, cipher, NULL /* engine */, key, iv, enc);
   OPENSSL_cleanse(key, EVP_MAX_KEY_LENGTH);
   return ret;
@@ -205,9 +201,9 @@
     return 0;
   }
 
-  return pkcs5_pbe2_cipher_init(ctx, cipher, EVP_sha1(), iterations, pass,
-                                pass_len, salt, salt_len, iv,
-                                EVP_CIPHER_iv_length(cipher), 1 /* encrypt */);
+  return pkcs5_pbe2_cipher_init(ctx, cipher, iterations, pass, pass_len, salt,
+                                salt_len, iv, EVP_CIPHER_iv_length(cipher),
+                                1 /* encrypt */);
 }
 
 int PKCS5_pbe2_decrypt_init(const struct pbe_suite *suite, EVP_CIPHER_CTX *ctx,
@@ -268,7 +264,6 @@
     }
   }
 
-  const EVP_MD *md = EVP_sha1();
   if (CBS_len(&pbkdf2_params) != 0) {
     CBS alg_id, prf;
     if (!CBS_get_asn1(&pbkdf2_params, &alg_id, CBS_ASN1_SEQUENCE) ||
@@ -278,18 +273,14 @@
       return 0;
     }
 
-    if (CBS_mem_equal(&prf, kHMACWithSHA1, sizeof(kHMACWithSHA1))) {
-      // hmacWithSHA1 is the DEFAULT, so DER requires it be omitted, but we
-      // match OpenSSL in tolerating it being present.
-      md = EVP_sha1();
-    } else if (CBS_mem_equal(&prf, kHMACWithSHA256, sizeof(kHMACWithSHA256))) {
-      md = EVP_sha256();
-    } else {
+    // We only support hmacWithSHA1. It is the DEFAULT, so DER requires it be
+    // omitted, but we match OpenSSL in tolerating it being present.
+    if (!CBS_mem_equal(&prf, kHMACWithSHA1, sizeof(kHMACWithSHA1))) {
       OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_UNSUPPORTED_PRF);
       return 0;
     }
 
-    // All supported PRFs use a NULL parameter.
+    // hmacWithSHA1 has a NULL parameter.
     CBS null;
     if (!CBS_get_asn1(&alg_id, &null, CBS_ASN1_NULL) ||
         CBS_len(&null) != 0 ||
@@ -310,7 +301,7 @@
     return 0;
   }
 
-  return pkcs5_pbe2_cipher_init(ctx, cipher, md, (unsigned)iterations, pass,
+  return pkcs5_pbe2_cipher_init(ctx, cipher, (unsigned)iterations, pass,
                                 pass_len, CBS_data(&salt), CBS_len(&salt),
                                 CBS_data(&iv), CBS_len(&iv), 0 /* decrypt */);
 }
diff --git a/src/crypto/pkcs8/pkcs12_test.cc b/src/crypto/pkcs8/pkcs12_test.cc
index d345006..e6c0e56 100644
--- a/src/crypto/pkcs8/pkcs12_test.cc
+++ b/src/crypto/pkcs8/pkcs12_test.cc
@@ -683,12 +683,9 @@
     0xfe, 0x3a, 0x66, 0x47, 0x40, 0x49, 0x02, 0x02, 0x07, 0xd0,
 };
 
-// kPBES2WithSHA1 is a PKCS#12 file using PBES2 and HMAC-SHA-1 created with:
+// kPBES2 is a PKCS#12 file using PBES2 created with:
 // openssl pkcs12 -export -inkey key.pem -in cert.pem -keypbe AES-128-CBC -certpbe AES-128-CBC
-//
-// This was generated with an older OpenSSL, which used hmacWithSHA1 as the PRF.
-// (There is currently no way to specify the PRF in the pkcs12 command.)
-static const uint8_t kPBES2WithSHA1[] = {
+static const uint8_t kPBES2[] = {
   0x30, 0x82, 0x0a, 0x03, 0x02, 0x01, 0x03, 0x30, 0x82, 0x09, 0xc9, 0x06,
   0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x07, 0x01, 0xa0, 0x82,
   0x09, 0xba, 0x04, 0x82, 0x09, 0xb6, 0x30, 0x82, 0x09, 0xb2, 0x30, 0x82,
@@ -904,318 +901,6 @@
   0xc3, 0x8c, 0xc6, 0x69, 0xdc, 0xc6, 0x7f, 0x54, 0xef, 0x04, 0x08, 0xf8,
   0x9c, 0x8b, 0x12, 0x27, 0xe8, 0xec, 0x65, 0x02, 0x02, 0x08, 0x00};
 
-// kPBES2WithSHA256 is a PKCS#12 file using PBES2 and HMAC-SHA-256. It was
-// generated in the same way as |kPBES2WithSHA1|, but using OpenSSL 1.1.1b,
-// which uses hmacWithSHA256 as the PRF.
-static const uint8_t kPBES2WithSHA256[] = {
-    0x30, 0x82, 0x0a, 0x7f, 0x02, 0x01, 0x03, 0x30, 0x82, 0x0a, 0x45, 0x06,
-    0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x07, 0x01, 0xa0, 0x82,
-    0x0a, 0x36, 0x04, 0x82, 0x0a, 0x32, 0x30, 0x82, 0x0a, 0x2e, 0x30, 0x82,
-    0x04, 0xa2, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x07,
-    0x06, 0xa0, 0x82, 0x04, 0x93, 0x30, 0x82, 0x04, 0x8f, 0x02, 0x01, 0x00,
-    0x30, 0x82, 0x04, 0x88, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d,
-    0x01, 0x07, 0x01, 0x30, 0x57, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7,
-    0x0d, 0x01, 0x05, 0x0d, 0x30, 0x4a, 0x30, 0x29, 0x06, 0x09, 0x2a, 0x86,
-    0x48, 0x86, 0xf7, 0x0d, 0x01, 0x05, 0x0c, 0x30, 0x1c, 0x04, 0x08, 0xb2,
-    0x5e, 0x0d, 0x6d, 0xda, 0xaa, 0x2f, 0xbe, 0x02, 0x02, 0x08, 0x00, 0x30,
-    0x0c, 0x06, 0x08, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x02, 0x09, 0x05,
-    0x00, 0x30, 0x1d, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04,
-    0x01, 0x02, 0x04, 0x10, 0x3c, 0x04, 0x78, 0x37, 0xb3, 0xb2, 0x24, 0xd3,
-    0xb5, 0x46, 0x20, 0xb7, 0xd2, 0xdd, 0x5d, 0x2e, 0x80, 0x82, 0x04, 0x20,
-    0x3a, 0x01, 0xe4, 0xf4, 0x57, 0xd3, 0xed, 0x14, 0xd0, 0x42, 0x3f, 0xd3,
-    0x61, 0xee, 0x84, 0xcd, 0x2b, 0x08, 0x60, 0x30, 0xbd, 0x72, 0xa7, 0xd5,
-    0xa4, 0xf2, 0x13, 0xe9, 0xf0, 0x44, 0x66, 0x26, 0x34, 0xe7, 0x2c, 0x5d,
-    0xc9, 0xb0, 0x4b, 0xab, 0x47, 0x16, 0xab, 0xe6, 0x06, 0xa6, 0x3b, 0x79,
-    0x41, 0x0c, 0x79, 0xd5, 0x9b, 0x02, 0x67, 0xd8, 0x7f, 0xc8, 0x36, 0x37,
-    0x27, 0xb4, 0x44, 0xa2, 0x5e, 0x0d, 0x38, 0xb8, 0x41, 0x8e, 0x3a, 0xf1,
-    0xe9, 0xab, 0xe0, 0x19, 0xd0, 0xe1, 0xc7, 0x92, 0xd4, 0x5b, 0x35, 0xf3,
-    0x79, 0x48, 0x3b, 0xfc, 0x25, 0xfc, 0xc6, 0x9f, 0xed, 0x35, 0x28, 0x5b,
-    0xfa, 0xee, 0x50, 0x42, 0xa3, 0xc3, 0x96, 0xee, 0xe0, 0x87, 0x33, 0x5e,
-    0xa7, 0xc7, 0x0a, 0xfe, 0xda, 0xe5, 0xd5, 0x29, 0x6a, 0x57, 0x08, 0x7f,
-    0x56, 0x37, 0x2a, 0x1a, 0xa0, 0x6d, 0xe9, 0x84, 0xac, 0xed, 0x0e, 0xd8,
-    0xc0, 0xd8, 0xc6, 0x77, 0xb1, 0xdd, 0x1b, 0xa1, 0xed, 0xa7, 0x79, 0x13,
-    0x2e, 0x5b, 0x9b, 0x80, 0x44, 0x9e, 0xff, 0x0a, 0x6e, 0x99, 0x33, 0xcf,
-    0xf1, 0x47, 0x24, 0xaa, 0x48, 0xe7, 0x2c, 0xb3, 0xe6, 0xdc, 0xd4, 0x1e,
-    0xe4, 0xb8, 0x5e, 0x72, 0xaf, 0x3f, 0xd3, 0x25, 0x4a, 0xac, 0x7b, 0x35,
-    0xb1, 0x82, 0xa5, 0xd9, 0xf8, 0x01, 0x12, 0x92, 0x49, 0x4c, 0x17, 0x07,
-    0xb2, 0xb1, 0x3e, 0xcb, 0xfd, 0xd1, 0x17, 0xb5, 0x65, 0x3d, 0x0c, 0x2b,
-    0x2b, 0xc0, 0x37, 0x9c, 0xe7, 0x04, 0x9b, 0x71, 0x5a, 0x10, 0xc0, 0xba,
-    0x3b, 0x31, 0xde, 0x0d, 0x66, 0x6c, 0x0d, 0x4c, 0x99, 0x22, 0x76, 0x2a,
-    0x75, 0x7f, 0x84, 0xd1, 0x07, 0x1f, 0x57, 0xf0, 0x0b, 0x71, 0x41, 0xea,
-    0x38, 0xe2, 0xe7, 0xbe, 0x11, 0x3c, 0x92, 0x8c, 0x7b, 0x0e, 0xb4, 0x7e,
-    0x76, 0xc4, 0x80, 0x41, 0xae, 0x4c, 0xe2, 0x38, 0x36, 0xcb, 0x82, 0x39,
-    0x38, 0x3a, 0x55, 0xb4, 0xe2, 0x35, 0x94, 0xc3, 0xae, 0x3d, 0xd1, 0x03,
-    0xf3, 0xdb, 0x00, 0xd9, 0xfa, 0x96, 0x62, 0x25, 0x97, 0x51, 0xc5, 0xcf,
-    0x84, 0xe8, 0xf7, 0x8b, 0x2f, 0x31, 0xeb, 0xa7, 0x0a, 0x22, 0x6f, 0xad,
-    0xf5, 0x28, 0x25, 0xaa, 0x99, 0x0e, 0xb1, 0x83, 0x9f, 0x70, 0x79, 0xaf,
-    0x10, 0x7c, 0x2c, 0x55, 0xfe, 0x24, 0x7d, 0xea, 0x85, 0x48, 0x8e, 0x7a,
-    0xf7, 0x47, 0xd8, 0x0c, 0x64, 0x97, 0xe0, 0x8f, 0x62, 0x5e, 0xd0, 0x4f,
-    0x21, 0xa4, 0x46, 0x8e, 0x28, 0xb0, 0xb1, 0x90, 0xec, 0x01, 0x7d, 0xc4,
-    0xc8, 0x6f, 0xf2, 0xe2, 0xb7, 0xc4, 0x35, 0x6c, 0xa9, 0xf6, 0xaf, 0xc2,
-    0xb6, 0xa9, 0x02, 0x6d, 0xb2, 0x8b, 0x43, 0x6b, 0x41, 0x80, 0x9d, 0x5e,
-    0x51, 0xa7, 0x31, 0x00, 0x1b, 0xb5, 0x24, 0xed, 0x40, 0x99, 0x33, 0xde,
-    0x87, 0xd1, 0x4b, 0x76, 0x78, 0x57, 0x4c, 0x33, 0x79, 0x89, 0xd3, 0xfa,
-    0x70, 0x0f, 0x2f, 0x31, 0x42, 0x8c, 0xce, 0xe9, 0xc0, 0x58, 0xe1, 0x30,
-    0x30, 0xf1, 0xe9, 0xab, 0xc8, 0x60, 0x7c, 0xe0, 0x6a, 0x99, 0xe7, 0xd3,
-    0x21, 0x1a, 0xcc, 0x98, 0x60, 0x44, 0xaa, 0xff, 0xee, 0xec, 0x34, 0x20,
-    0x19, 0xba, 0x03, 0x3b, 0x67, 0x6f, 0xee, 0xd5, 0xb3, 0xa7, 0x21, 0x57,
-    0xd6, 0x49, 0xaf, 0x91, 0x8f, 0xec, 0x70, 0xd0, 0x59, 0x1a, 0x79, 0xe2,
-    0xd2, 0x94, 0x82, 0x53, 0xfb, 0xea, 0xd6, 0x83, 0x49, 0x4a, 0x6f, 0xd6,
-    0xed, 0x15, 0xc3, 0x71, 0x08, 0x3a, 0xbf, 0xde, 0xa8, 0x2d, 0x54, 0xaf,
-    0x4a, 0x40, 0xbc, 0xe5, 0x53, 0xae, 0x4b, 0x3d, 0x70, 0xfe, 0x1c, 0x03,
-    0x1e, 0xb2, 0x9d, 0x1c, 0x35, 0xbd, 0x9a, 0xf8, 0xc5, 0xd1, 0xa5, 0x4a,
-    0x63, 0x18, 0x02, 0xd4, 0xff, 0xdd, 0xcd, 0xb3, 0x6c, 0x38, 0xd1, 0x9a,
-    0xad, 0x16, 0x71, 0xf1, 0xc6, 0x1d, 0x8f, 0x6c, 0x30, 0xfa, 0x2e, 0x13,
-    0x9d, 0x0b, 0x4e, 0xe6, 0xd3, 0x37, 0x80, 0x58, 0x26, 0x0d, 0x04, 0x97,
-    0xe6, 0x8d, 0xcc, 0x63, 0x3c, 0x39, 0x38, 0x2f, 0x7a, 0x73, 0x01, 0x0f,
-    0x22, 0x69, 0x47, 0x54, 0x9e, 0x42, 0xc8, 0x59, 0xb5, 0x35, 0x43, 0xb4,
-    0x37, 0x45, 0x59, 0x85, 0xf2, 0x47, 0xc3, 0xfb, 0x23, 0x13, 0x18, 0xef,
-    0xd8, 0x11, 0x70, 0x74, 0xce, 0x97, 0xcf, 0xbf, 0xd5, 0x2d, 0x99, 0x00,
-    0x86, 0x56, 0x9b, 0xdf, 0x05, 0x67, 0xf4, 0x49, 0x1e, 0xb5, 0x12, 0x23,
-    0x46, 0x04, 0x83, 0xf3, 0xc1, 0x59, 0xc7, 0x7b, 0xc3, 0x22, 0x0c, 0x2c,
-    0x1b, 0x7d, 0x18, 0xb6, 0xd2, 0xfa, 0x28, 0x36, 0x8b, 0x51, 0x6d, 0x58,
-    0xf4, 0xd6, 0xdf, 0x38, 0x94, 0xcf, 0x6c, 0x50, 0x4f, 0x0a, 0xf3, 0xc3,
-    0x91, 0x39, 0xa5, 0xc9, 0xbc, 0xa8, 0xeb, 0x24, 0x1a, 0xdd, 0x58, 0x9e,
-    0xdc, 0xb2, 0xee, 0xe1, 0xa5, 0x16, 0x68, 0xc2, 0x63, 0x8c, 0xc9, 0xa7,
-    0xbe, 0x1e, 0x30, 0x84, 0xa6, 0x28, 0xeb, 0x50, 0xd9, 0xdd, 0x15, 0xea,
-    0x64, 0x34, 0xf0, 0x7a, 0x56, 0x6a, 0xdd, 0xb2, 0x70, 0x2e, 0xea, 0x72,
-    0x66, 0x39, 0x54, 0xaa, 0x36, 0xfa, 0x68, 0xaa, 0x06, 0x5d, 0x48, 0xca,
-    0xad, 0x4e, 0xfe, 0x4b, 0x40, 0xdf, 0x43, 0x46, 0xd6, 0xdf, 0x3f, 0xa1,
-    0x9e, 0x4c, 0xdc, 0xfe, 0x4c, 0x01, 0x09, 0x7f, 0xd8, 0x00, 0x84, 0x94,
-    0x29, 0x17, 0x67, 0x00, 0xd3, 0x46, 0xd2, 0xba, 0xb9, 0x62, 0x66, 0x50,
-    0xcd, 0x7c, 0x7a, 0x70, 0x46, 0x4a, 0x32, 0x62, 0xc2, 0x6e, 0xe7, 0x5e,
-    0x04, 0x24, 0xc5, 0xfd, 0x9d, 0xf4, 0x9b, 0xc8, 0xe9, 0xeb, 0x73, 0xf9,
-    0xaa, 0xa4, 0xcc, 0x63, 0xa3, 0xdc, 0x63, 0xe0, 0x30, 0xec, 0x70, 0x40,
-    0x9e, 0x7c, 0x63, 0x79, 0xae, 0xba, 0xfd, 0x95, 0x4c, 0x46, 0xf1, 0xc4,
-    0xae, 0xb9, 0x03, 0xe8, 0xd4, 0xe4, 0x90, 0x29, 0x3a, 0xbb, 0xdb, 0xd8,
-    0x8f, 0x40, 0xc3, 0x39, 0x9a, 0x4c, 0x70, 0x54, 0x9f, 0xc9, 0x0a, 0x04,
-    0x23, 0x98, 0x6b, 0x9c, 0xc2, 0xe0, 0xad, 0xae, 0x30, 0xef, 0xff, 0x44,
-    0x5b, 0x73, 0x2e, 0x8f, 0xd7, 0x2b, 0x12, 0xf0, 0x31, 0x08, 0xfb, 0xb9,
-    0x55, 0xf0, 0xc3, 0x62, 0xbb, 0x5f, 0x6d, 0xa7, 0x1d, 0x61, 0xc2, 0x26,
-    0xce, 0xab, 0xb6, 0x88, 0x25, 0xce, 0x8b, 0x02, 0xb6, 0xc5, 0xa2, 0xcc,
-    0xd4, 0xa3, 0x74, 0x5b, 0x76, 0xf7, 0xb4, 0xd9, 0x9c, 0x93, 0x86, 0x7e,
-    0xac, 0x82, 0xe0, 0x0d, 0x83, 0xe1, 0xc9, 0x7f, 0x2a, 0x86, 0xbb, 0xaa,
-    0xfe, 0xdc, 0x17, 0x9c, 0x28, 0x77, 0xe1, 0x58, 0x18, 0x15, 0x09, 0xe3,
-    0xda, 0xdb, 0x8d, 0xee, 0x55, 0xf6, 0xda, 0xad, 0xe5, 0x52, 0x84, 0xb4,
-    0xf0, 0x24, 0xce, 0xa1, 0x54, 0x4b, 0x9f, 0xea, 0x5d, 0x4d, 0x7f, 0x53,
-    0x0b, 0x79, 0x1d, 0x87, 0xcb, 0x0b, 0xa8, 0xef, 0x03, 0xfa, 0x58, 0x57,
-    0xf6, 0x02, 0x70, 0xdb, 0x7a, 0x64, 0x89, 0x1f, 0xc7, 0xca, 0x87, 0x02,
-    0x27, 0x33, 0xc5, 0x5b, 0x2a, 0x50, 0xc5, 0xb5, 0x7b, 0x2d, 0x3d, 0xa9,
-    0xbc, 0x21, 0x7b, 0xf2, 0xbe, 0x9c, 0x56, 0x35, 0x83, 0xba, 0xce, 0x34,
-    0x8d, 0xec, 0x7b, 0xaa, 0xe4, 0xcb, 0xd1, 0x4f, 0x4a, 0x31, 0x00, 0xd1,
-    0xb8, 0x30, 0x38, 0xaf, 0xe8, 0xe3, 0xd7, 0xc2, 0x8c, 0xe3, 0xb4, 0x23,
-    0xb3, 0x27, 0x07, 0xc6, 0x88, 0xec, 0x58, 0xe9, 0x59, 0xfb, 0xa9, 0x11,
-    0xa2, 0xc8, 0x77, 0x22, 0x6a, 0x5b, 0x86, 0xde, 0xdc, 0xed, 0x76, 0x6e,
-    0x73, 0x79, 0x5c, 0xb4, 0xcf, 0x19, 0x76, 0x5c, 0x6b, 0x1c, 0x4b, 0x03,
-    0xcb, 0x35, 0x08, 0x94, 0x37, 0x01, 0x98, 0x52, 0xd8, 0x31, 0x42, 0x3d,
-    0x7f, 0xa1, 0x11, 0x06, 0x07, 0x88, 0xb8, 0x31, 0x35, 0xb2, 0x49, 0x28,
-    0xc6, 0x2c, 0x44, 0x43, 0xb6, 0xbc, 0x58, 0x76, 0x6c, 0x4f, 0xc8, 0xb6,
-    0x30, 0x82, 0x05, 0x84, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d,
-    0x01, 0x07, 0x01, 0xa0, 0x82, 0x05, 0x75, 0x04, 0x82, 0x05, 0x71, 0x30,
-    0x82, 0x05, 0x6d, 0x30, 0x82, 0x05, 0x69, 0x06, 0x0b, 0x2a, 0x86, 0x48,
-    0x86, 0xf7, 0x0d, 0x01, 0x0c, 0x0a, 0x01, 0x02, 0xa0, 0x82, 0x05, 0x31,
-    0x30, 0x82, 0x05, 0x2d, 0x30, 0x57, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86,
-    0xf7, 0x0d, 0x01, 0x05, 0x0d, 0x30, 0x4a, 0x30, 0x29, 0x06, 0x09, 0x2a,
-    0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x05, 0x0c, 0x30, 0x1c, 0x04, 0x08,
-    0x79, 0x31, 0xf9, 0xe2, 0x42, 0x33, 0xf1, 0xaa, 0x02, 0x02, 0x08, 0x00,
-    0x30, 0x0c, 0x06, 0x08, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x02, 0x09,
-    0x05, 0x00, 0x30, 0x1d, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03,
-    0x04, 0x01, 0x02, 0x04, 0x10, 0xc9, 0xda, 0x5f, 0x96, 0xc8, 0x2c, 0x85,
-    0x5d, 0xa0, 0x30, 0x82, 0x16, 0x6b, 0xf4, 0xfd, 0x91, 0x04, 0x82, 0x04,
-    0xd0, 0xc3, 0x89, 0x6a, 0x56, 0x6a, 0x84, 0x58, 0x76, 0xd7, 0x23, 0xd5,
-    0xa8, 0xc1, 0x2f, 0x43, 0x38, 0x99, 0xf8, 0x64, 0x97, 0xe7, 0xe8, 0xd2,
-    0xcf, 0x36, 0x9b, 0x7e, 0x04, 0xe5, 0x87, 0x80, 0xff, 0xd5, 0x58, 0x50,
-    0x5a, 0xb3, 0xc0, 0x15, 0xc9, 0xd5, 0x61, 0xd6, 0x3b, 0x7f, 0x2f, 0x3b,
-    0x98, 0x50, 0x55, 0x09, 0xcf, 0xc3, 0xdd, 0xbd, 0x8b, 0xcd, 0xdf, 0x20,
-    0x90, 0xe1, 0xd2, 0xcd, 0x22, 0x9f, 0xa7, 0x3e, 0x10, 0xd3, 0xb7, 0x26,
-    0x54, 0x65, 0xfb, 0x18, 0x12, 0x58, 0x81, 0xd8, 0xe6, 0x97, 0xdf, 0x32,
-    0xd1, 0x04, 0x4a, 0xdb, 0x05, 0xb4, 0x13, 0xa9, 0x86, 0x62, 0x20, 0x94,
-    0xdc, 0xaf, 0x98, 0x53, 0x16, 0xc7, 0xb2, 0x9c, 0x44, 0x30, 0xc5, 0xaa,
-    0x14, 0x7a, 0x2d, 0x93, 0x20, 0xff, 0x6d, 0x8d, 0x47, 0x69, 0x6f, 0x39,
-    0xd4, 0x15, 0x81, 0x6b, 0x85, 0x36, 0xf9, 0x59, 0xa5, 0x8e, 0x5c, 0x40,
-    0x62, 0xf8, 0xfe, 0xf7, 0xe6, 0x75, 0xf7, 0x37, 0xfe, 0x5d, 0x53, 0xa6,
-    0x66, 0xe5, 0x0e, 0x4a, 0x23, 0xa9, 0x80, 0x4b, 0x04, 0x11, 0x0e, 0x50,
-    0xef, 0x9e, 0x88, 0xed, 0x39, 0xd1, 0x5f, 0xfa, 0x90, 0x22, 0xa3, 0x70,
-    0x0c, 0x8b, 0x20, 0x9c, 0x80, 0x2c, 0x90, 0x2e, 0x2c, 0xe0, 0xe6, 0x26,
-    0x84, 0xd8, 0x6a, 0xe4, 0x20, 0x1e, 0xbc, 0x96, 0xba, 0x07, 0x9d, 0x1d,
-    0x3d, 0x6c, 0xd1, 0x04, 0xc8, 0xd1, 0x79, 0x2c, 0x96, 0x0f, 0xe8, 0xa5,
-    0x6b, 0x03, 0x06, 0x51, 0xfd, 0x7b, 0x44, 0xab, 0x66, 0x4a, 0x41, 0x04,
-    0x02, 0x64, 0x5a, 0x40, 0x7d, 0x6b, 0x1a, 0xbc, 0x6e, 0xee, 0x68, 0x70,
-    0x3c, 0x10, 0x32, 0x73, 0x76, 0x28, 0x48, 0xd9, 0xa4, 0xe1, 0x21, 0xf6,
-    0xe4, 0x03, 0x94, 0x10, 0xef, 0x82, 0xe0, 0x76, 0x7c, 0x99, 0x30, 0x26,
-    0x9a, 0x95, 0xa2, 0xc5, 0xb9, 0xa7, 0xae, 0x9f, 0x85, 0xcb, 0xf1, 0x82,
-    0xcd, 0x3d, 0x06, 0xec, 0xaf, 0x72, 0xc1, 0x33, 0x09, 0xf9, 0x51, 0x94,
-    0x42, 0xf0, 0x69, 0xb9, 0xc6, 0x04, 0xe6, 0x7a, 0xfb, 0x1c, 0xee, 0xac,
-    0x95, 0x9b, 0x88, 0x67, 0x19, 0xa8, 0x79, 0x67, 0xc7, 0x1b, 0xcc, 0x72,
-    0xe9, 0x18, 0xd2, 0x96, 0xcf, 0x3d, 0xf8, 0x98, 0x20, 0x53, 0xc9, 0x37,
-    0x0f, 0x92, 0xb1, 0xbc, 0xaf, 0xc6, 0xec, 0x4f, 0x25, 0xda, 0x95, 0x14,
-    0xed, 0xb8, 0x3e, 0xaf, 0xd1, 0x52, 0x4c, 0x28, 0x3b, 0x84, 0x8c, 0x49,
-    0x34, 0x63, 0x2b, 0xd4, 0xf4, 0x78, 0xb1, 0x8f, 0xb0, 0x35, 0x7b, 0xd5,
-    0x44, 0xc3, 0x98, 0x9e, 0x85, 0x86, 0xae, 0xee, 0x05, 0xdd, 0xa1, 0x6f,
-    0x53, 0xe4, 0xdc, 0x6f, 0xf5, 0x7c, 0x7e, 0xd8, 0x7a, 0x9b, 0x18, 0x43,
-    0x3f, 0x7b, 0x2a, 0xf3, 0xb5, 0x39, 0x5a, 0x1c, 0x72, 0x3b, 0xdd, 0x01,
-    0x79, 0x97, 0xff, 0xdb, 0x58, 0xe5, 0x4d, 0x61, 0xde, 0xcf, 0x2f, 0x13,
-    0x7b, 0xaf, 0x6b, 0xa4, 0xf2, 0x59, 0x0a, 0x13, 0x56, 0x1c, 0x05, 0x00,
-    0x0f, 0x18, 0x66, 0x33, 0x72, 0xbd, 0x62, 0x8d, 0x11, 0xf7, 0x20, 0x52,
-    0x29, 0x42, 0x83, 0x33, 0xc1, 0x0f, 0x07, 0x80, 0xd4, 0x58, 0xe2, 0x22,
-    0x94, 0xad, 0xec, 0xbf, 0x01, 0xb6, 0x71, 0x7d, 0x92, 0xb1, 0x75, 0x14,
-    0xf2, 0xfb, 0x77, 0x39, 0x0d, 0x82, 0xb5, 0x51, 0xba, 0x1f, 0x65, 0x57,
-    0xaa, 0x68, 0x6a, 0x17, 0x41, 0x13, 0x38, 0xc0, 0xe5, 0xeb, 0xcc, 0x8c,
-    0xdd, 0xb7, 0x00, 0x4e, 0x01, 0x06, 0x25, 0xab, 0x87, 0x1c, 0x30, 0x69,
-    0xc4, 0x15, 0x0e, 0xf8, 0xf0, 0x72, 0xb6, 0x1d, 0x92, 0x7e, 0xe2, 0xe6,
-    0x77, 0xed, 0xb8, 0x3f, 0xcf, 0x57, 0x8d, 0x90, 0xe4, 0xa3, 0x79, 0x49,
-    0x9a, 0xe0, 0x1f, 0x4a, 0xde, 0xe9, 0x44, 0x8d, 0xd5, 0x23, 0x3b, 0x07,
-    0x63, 0x92, 0x9f, 0xde, 0xba, 0x7e, 0x67, 0xb0, 0x82, 0x41, 0x2a, 0xcd,
-    0xe1, 0xbb, 0x40, 0xf1, 0x8a, 0x66, 0x70, 0x74, 0xf1, 0x99, 0x7d, 0xb0,
-    0x0b, 0x6a, 0xa2, 0x5e, 0x7e, 0xc0, 0x8c, 0xb2, 0x71, 0xda, 0xcf, 0xbc,
-    0xfb, 0x9c, 0x03, 0x0e, 0x33, 0x5e, 0x13, 0xb2, 0x34, 0x38, 0xc1, 0x83,
-    0x95, 0xdf, 0x46, 0xfc, 0xe0, 0xe0, 0xaf, 0x93, 0xe0, 0x70, 0xd5, 0x15,
-    0x8c, 0x2f, 0xae, 0x4b, 0xa6, 0xeb, 0x13, 0x8f, 0xaf, 0x1b, 0xf5, 0x71,
-    0xc4, 0x62, 0x71, 0x08, 0x97, 0x10, 0x52, 0xfe, 0xbd, 0x60, 0xd7, 0x9f,
-    0xdf, 0x3d, 0xc5, 0xdd, 0xcd, 0xe7, 0x8e, 0x85, 0x60, 0xdf, 0x61, 0x79,
-    0x5b, 0x90, 0xd9, 0xaa, 0x56, 0x30, 0x6d, 0x0f, 0xfb, 0x27, 0x84, 0xdd,
-    0x3d, 0x04, 0x6a, 0xe0, 0x70, 0x7e, 0xbb, 0x59, 0xf4, 0xeb, 0xe8, 0xc0,
-    0x62, 0xaa, 0xf6, 0xed, 0xca, 0xae, 0xb2, 0x2b, 0x0f, 0xc1, 0x56, 0x45,
-    0xe7, 0x24, 0x6b, 0xaf, 0xeb, 0x15, 0x26, 0xb2, 0xcd, 0xae, 0x1f, 0xe7,
-    0x11, 0xc0, 0x1c, 0x19, 0x4a, 0xc7, 0x51, 0x2a, 0x29, 0xdf, 0x14, 0x82,
-    0x43, 0xfe, 0x52, 0x39, 0xba, 0xe6, 0x6c, 0xa5, 0x76, 0x8b, 0xb1, 0x21,
-    0x9c, 0x20, 0xb0, 0x10, 0x0c, 0x44, 0xf2, 0xd4, 0x6e, 0x41, 0x1b, 0x8f,
-    0x90, 0x23, 0xe3, 0x87, 0xfc, 0xf1, 0x46, 0xc6, 0x5b, 0xae, 0xd0, 0x2a,
-    0x2b, 0x78, 0xf5, 0x2b, 0xb9, 0x9f, 0x46, 0x4b, 0x30, 0xf8, 0x49, 0x57,
-    0x7e, 0xb4, 0xff, 0xca, 0xad, 0x4d, 0xf3, 0xc1, 0x7b, 0x42, 0xe0, 0xa4,
-    0x37, 0x2f, 0xe2, 0xb2, 0x60, 0xe8, 0xaf, 0xd7, 0x39, 0x23, 0x4c, 0x67,
-    0x44, 0xe5, 0x6d, 0xb3, 0x25, 0x11, 0x9f, 0x2b, 0xea, 0x23, 0xfb, 0x1e,
-    0xce, 0xbf, 0xa4, 0x2f, 0x88, 0xec, 0x18, 0x40, 0x16, 0x43, 0x9f, 0x71,
-    0x9c, 0x8d, 0xbd, 0x5d, 0x55, 0x3b, 0x92, 0x4e, 0x23, 0x3c, 0x87, 0xed,
-    0x5f, 0x2e, 0x8f, 0xde, 0x83, 0xad, 0x30, 0x42, 0x7e, 0x1a, 0x5e, 0xf5,
-    0xc5, 0x75, 0xbb, 0x99, 0x6e, 0xf1, 0x87, 0xe0, 0xf3, 0x51, 0x1e, 0x7d,
-    0xe8, 0xfc, 0xc6, 0x88, 0xf2, 0x39, 0x6d, 0xae, 0x73, 0x9f, 0xad, 0x9b,
-    0x7b, 0x67, 0x99, 0xdb, 0x90, 0x0e, 0xa0, 0xfc, 0xaf, 0xcc, 0xdb, 0x8b,
-    0xaa, 0xc2, 0x54, 0xd5, 0x2d, 0xb3, 0x5f, 0xa3, 0x0a, 0x3e, 0xd6, 0x8d,
-    0x40, 0x4d, 0x3b, 0xe5, 0x2d, 0x31, 0xd8, 0xb2, 0x12, 0x07, 0xca, 0x36,
-    0x56, 0xd9, 0x2f, 0x55, 0x82, 0xdc, 0x8e, 0x92, 0xa9, 0x6c, 0x91, 0x9e,
-    0x22, 0xe4, 0xc6, 0x27, 0x8b, 0x1a, 0xa2, 0x78, 0x56, 0x2c, 0x5a, 0x19,
-    0xdf, 0x40, 0xf9, 0xfb, 0x44, 0x21, 0x5b, 0xdf, 0x2f, 0x99, 0x84, 0x49,
-    0xcf, 0x1a, 0x15, 0xa5, 0x59, 0x3a, 0x66, 0x09, 0x4d, 0xc1, 0xf2, 0xb1,
-    0x24, 0x33, 0xbd, 0x86, 0x41, 0xdc, 0x33, 0x9b, 0x03, 0xc0, 0xa8, 0xf8,
-    0x94, 0x78, 0x2e, 0x16, 0x97, 0xef, 0x23, 0xee, 0xa4, 0xac, 0x3a, 0x90,
-    0xb6, 0xd9, 0xc0, 0xda, 0x5e, 0x26, 0x34, 0x26, 0xce, 0xc9, 0xf8, 0x45,
-    0x37, 0x83, 0x7c, 0xbd, 0x9c, 0x60, 0x40, 0x61, 0x28, 0xcd, 0x9c, 0xb4,
-    0xe4, 0xe6, 0x5c, 0x4f, 0xd1, 0x79, 0x42, 0x13, 0xa9, 0x6f, 0x26, 0x23,
-    0xc2, 0x6c, 0x8e, 0x8d, 0x7e, 0x3f, 0xee, 0x2b, 0x4d, 0xd2, 0x5b, 0x80,
-    0xdc, 0x74, 0xda, 0x1f, 0xbc, 0x26, 0x54, 0xc5, 0xfe, 0xee, 0xa9, 0x4f,
-    0xce, 0x46, 0xaf, 0x90, 0xb0, 0x12, 0x9a, 0x18, 0x0e, 0x06, 0x05, 0xc7,
-    0x98, 0xef, 0xcc, 0x6d, 0xa3, 0x46, 0x91, 0xa5, 0x0e, 0xe7, 0x35, 0x1a,
-    0x7f, 0x9d, 0xae, 0xa0, 0xb4, 0x0a, 0x32, 0x3b, 0xe4, 0xcd, 0x4b, 0x3e,
-    0x89, 0x73, 0xc9, 0x97, 0x38, 0xe5, 0x86, 0x4f, 0x24, 0xed, 0x4a, 0x43,
-    0x04, 0x02, 0xc1, 0x29, 0x8d, 0x85, 0xa2, 0xdd, 0xb2, 0x61, 0x3c, 0xce,
-    0x8b, 0x47, 0x2e, 0xed, 0x4b, 0x24, 0x94, 0xb7, 0xbf, 0x9d, 0x55, 0x42,
-    0x95, 0xc2, 0x27, 0xe5, 0x09, 0xd4, 0x20, 0x03, 0x20, 0x21, 0x3a, 0xd8,
-    0xd2, 0xa2, 0xb3, 0x47, 0x93, 0x4f, 0x5a, 0x39, 0xca, 0xd8, 0x74, 0xa9,
-    0x19, 0xa6, 0x9a, 0x23, 0xb1, 0x21, 0xa3, 0xb3, 0x14, 0xcc, 0xe2, 0x12,
-    0x91, 0x30, 0xdb, 0x50, 0xf8, 0x44, 0x74, 0xd6, 0x70, 0xdd, 0x7d, 0x26,
-    0x7f, 0xbf, 0x32, 0x93, 0x1f, 0x3d, 0x40, 0xbf, 0x2e, 0xec, 0x28, 0xf5,
-    0xb1, 0xaf, 0x11, 0xc7, 0x4e, 0x64, 0x13, 0x3c, 0xbf, 0x2e, 0x19, 0x81,
-    0xfe, 0x35, 0xba, 0xec, 0x6e, 0xb6, 0xa9, 0xfe, 0xc6, 0x85, 0x33, 0x41,
-    0x58, 0xab, 0x06, 0xae, 0x2b, 0x96, 0x62, 0x1f, 0x2c, 0x6c, 0xad, 0xec,
-    0x1a, 0x59, 0x55, 0x5a, 0x6f, 0xe0, 0xeb, 0x71, 0x8d, 0xb5, 0x0c, 0x81,
-    0x2a, 0x39, 0xbd, 0x67, 0x39, 0x48, 0xfb, 0x91, 0x64, 0xad, 0x01, 0x4c,
-    0x4a, 0x0f, 0x30, 0x29, 0xa0, 0xcf, 0x30, 0x96, 0x43, 0xe9, 0xfc, 0x22,
-    0x4b, 0xf3, 0x4f, 0xab, 0xec, 0xbc, 0x5a, 0xfb, 0x7f, 0x20, 0xd9, 0xd5,
-    0xc7, 0xce, 0x93, 0xa3, 0x2e, 0x82, 0xd1, 0xa0, 0xc6, 0x16, 0xd5, 0x64,
-    0x2d, 0x3f, 0x69, 0x15, 0xfd, 0xf3, 0x28, 0x3d, 0x4e, 0x61, 0x01, 0x2c,
-    0xd4, 0x2b, 0x40, 0x51, 0x6e, 0x95, 0x00, 0xa4, 0x34, 0x31, 0x25, 0x30,
-    0x23, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x09, 0x15,
-    0x31, 0x16, 0x04, 0x14, 0x47, 0xf4, 0x18, 0xa5, 0x4b, 0x85, 0xb7, 0x02,
-    0xc1, 0x97, 0xff, 0x57, 0xb6, 0x6f, 0x21, 0x45, 0x34, 0x3d, 0x92, 0x22,
-    0x30, 0x31, 0x30, 0x21, 0x30, 0x09, 0x06, 0x05, 0x2b, 0x0e, 0x03, 0x02,
-    0x1a, 0x05, 0x00, 0x04, 0x14, 0x17, 0x45, 0x0c, 0xdf, 0x53, 0x76, 0x9b,
-    0xce, 0x3b, 0x12, 0xdd, 0x47, 0x05, 0x6d, 0x16, 0x90, 0x9d, 0x29, 0x9b,
-    0xe1, 0x04, 0x08, 0xa1, 0xf2, 0x82, 0x1c, 0xd1, 0xd1, 0x7b, 0x5c, 0x02,
-    0x02, 0x08, 0x00,
-};
-
-// kNoEncryption is a PKCS#12 file with neither the key or certificate is
-// encrypted. It was generated with:
-//
-//   openssl pkcs12 -export -inkey ecdsa_p256_key.pem -in ecdsa_p256_cert.pem -keypbe NONE -certpbe NONE -password pass:foo
-static const uint8_t kNoEncryption[] = {
-    0x30, 0x82, 0x03, 0x6e, 0x02, 0x01, 0x03, 0x30, 0x82, 0x03, 0x34, 0x06,
-    0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x07, 0x01, 0xa0, 0x82,
-    0x03, 0x25, 0x04, 0x82, 0x03, 0x21, 0x30, 0x82, 0x03, 0x1d, 0x30, 0x82,
-    0x02, 0x3e, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x07,
-    0x01, 0xa0, 0x82, 0x02, 0x2f, 0x04, 0x82, 0x02, 0x2b, 0x30, 0x82, 0x02,
-    0x27, 0x30, 0x82, 0x02, 0x23, 0x06, 0x0b, 0x2a, 0x86, 0x48, 0x86, 0xf7,
-    0x0d, 0x01, 0x0c, 0x0a, 0x01, 0x03, 0xa0, 0x82, 0x01, 0xeb, 0x30, 0x82,
-    0x01, 0xe7, 0x06, 0x0a, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x09,
-    0x16, 0x01, 0xa0, 0x82, 0x01, 0xd7, 0x04, 0x82, 0x01, 0xd3, 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, 0x31, 0x25, 0x30,
-    0x23, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x09, 0x15,
-    0x31, 0x16, 0x04, 0x14, 0x3f, 0x31, 0x38, 0xec, 0xb9, 0xf1, 0x45, 0xe1,
-    0x3e, 0x90, 0x71, 0x0d, 0xc1, 0x28, 0xba, 0x4e, 0x6f, 0xa0, 0x9c, 0xed,
-    0x30, 0x81, 0xd8, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01,
-    0x07, 0x01, 0xa0, 0x81, 0xca, 0x04, 0x81, 0xc7, 0x30, 0x81, 0xc4, 0x30,
-    0x81, 0xc1, 0x06, 0x0b, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x0c,
-    0x0a, 0x01, 0x01, 0xa0, 0x81, 0x8a, 0x30, 0x81, 0x87, 0x02, 0x01, 0x00,
-    0x30, 0x13, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02, 0x01, 0x06,
-    0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x03, 0x01, 0x07, 0x04, 0x6d, 0x30,
-    0x6b, 0x02, 0x01, 0x01, 0x04, 0x20, 0x07, 0x0f, 0x08, 0x72, 0x7a, 0xd4,
-    0xa0, 0x4a, 0x9c, 0xdd, 0x59, 0xc9, 0x4d, 0x89, 0x68, 0x77, 0x08, 0xb5,
-    0x6f, 0xc9, 0x5d, 0x30, 0x77, 0x0e, 0xe8, 0xd1, 0xc9, 0xce, 0x0a, 0x8b,
-    0xb4, 0x6a, 0xa1, 0x44, 0x03, 0x42, 0x00, 0x04, 0xe6, 0x2b, 0x69, 0xe2,
-    0xbf, 0x65, 0x9f, 0x97, 0xbe, 0x2f, 0x1e, 0x0d, 0x94, 0x8a, 0x4c, 0xd5,
-    0x97, 0x6b, 0xb7, 0xa9, 0x1e, 0x0d, 0x46, 0xfb, 0xdd, 0xa9, 0xa9, 0x1e,
-    0x9d, 0xdc, 0xba, 0x5a, 0x01, 0xe7, 0xd6, 0x97, 0xa8, 0x0a, 0x18, 0xf9,
-    0xc3, 0xc4, 0xa3, 0x1e, 0x56, 0xe2, 0x7c, 0x83, 0x48, 0xdb, 0x16, 0x1a,
-    0x1c, 0xf5, 0x1d, 0x7e, 0xf1, 0x94, 0x2d, 0x4b, 0xcf, 0x72, 0x22, 0xc1,
-    0x31, 0x25, 0x30, 0x23, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d,
-    0x01, 0x09, 0x15, 0x31, 0x16, 0x04, 0x14, 0x3f, 0x31, 0x38, 0xec, 0xb9,
-    0xf1, 0x45, 0xe1, 0x3e, 0x90, 0x71, 0x0d, 0xc1, 0x28, 0xba, 0x4e, 0x6f,
-    0xa0, 0x9c, 0xed, 0x30, 0x31, 0x30, 0x21, 0x30, 0x09, 0x06, 0x05, 0x2b,
-    0x0e, 0x03, 0x02, 0x1a, 0x05, 0x00, 0x04, 0x14, 0xd0, 0xb4, 0x17, 0x1a,
-    0xdb, 0xa3, 0x27, 0xd8, 0x9e, 0xd3, 0xf2, 0xb3, 0x3e, 0x96, 0x07, 0x3a,
-    0xf2, 0x6a, 0xc2, 0x1c, 0x04, 0x08, 0xb5, 0xa8, 0xb9, 0xdb, 0x2f, 0xf1,
-    0xa4, 0xcd, 0x02, 0x02, 0x08, 0x00,
-};
-
 static const char kPassword[] = "foo";
 
 // Generated with
@@ -1545,12 +1230,7 @@
 }
 
 TEST(PKCS12Test, TestPBES2) {
-  TestImpl("kPBES2WithSHA1", kPBES2WithSHA1, kPassword, nullptr);
-  TestImpl("kPBES2WithSHA256", kPBES2WithSHA256, kPassword, nullptr);
-}
-
-TEST(PKCS12Test, TestNoEncryption) {
-  TestImpl("kNoEncryption", kNoEncryption, kPassword, nullptr);
+  TestImpl("PBES2", kPBES2, kPassword, nullptr);
 }
 
 TEST(PKCS12Test, TestEmptyPassword) {
@@ -1826,152 +1506,3 @@
                 NID_pbe_WithSHA1And3_Key_TripleDES_CBC,
                 NID_pbe_WithSHA1And3_Key_TripleDES_CBC, 100, 100);
 }
-
-static bssl::UniquePtr<EVP_PKEY> MakeTestKey() {
-  bssl::UniquePtr<EC_KEY> ec_key(
-      EC_KEY_new_by_curve_name(NID_X9_62_prime256v1));
-  if (!ec_key ||
-      !EC_KEY_generate_key(ec_key.get())) {
-    return nullptr;
-  }
-  bssl::UniquePtr<EVP_PKEY> evp_pkey(EVP_PKEY_new());
-  if (!evp_pkey ||
-      !EVP_PKEY_assign_EC_KEY(evp_pkey.get(), ec_key.release())) {
-    return nullptr;
-  }
-  return evp_pkey;
-}
-
-static bssl::UniquePtr<X509> MakeTestCert(EVP_PKEY *key) {
-  bssl::UniquePtr<X509> x509(X509_new());
-  if (!x509) {
-    return nullptr;
-  }
-  X509_NAME* subject = X509_get_subject_name(x509.get());
-  if (!X509_gmtime_adj(X509_get_notBefore(x509.get()), 0) ||
-      !X509_gmtime_adj(X509_get_notAfter(x509.get()), 60 * 60 * 24) ||
-      !X509_NAME_add_entry_by_txt(subject, "CN", MBSTRING_ASC,
-                                  reinterpret_cast<const uint8_t *>("Test"), -1,
-                                  -1, 0) ||
-      !X509_set_issuer_name(x509.get(), subject) ||
-      !X509_set_pubkey(x509.get(), key) ||
-      !X509_sign(x509.get(), key, EVP_sha256())) {
-    return nullptr;
-  }
-  return x509;
-}
-
-static bool PKCS12CreateVector(std::vector<uint8_t> *out, EVP_PKEY *pkey,
-                               const std::vector<X509 *> &certs) {
-  bssl::UniquePtr<STACK_OF(X509)> chain(sk_X509_new_null());
-  if (!chain) {
-    return false;
-  }
-
-  for (X509 *cert : certs) {
-    if (!bssl::PushToStack(chain.get(), bssl::UpRef(cert))) {
-      return false;
-    }
-  }
-
-  bssl::UniquePtr<PKCS12> p12(PKCS12_create(kPassword, nullptr /* name */, pkey,
-                                            nullptr /* cert */, chain.get(), 0,
-                                            0, 0, 0, 0));
-  if (!p12) {
-    return false;
-  }
-
-  int len = i2d_PKCS12(p12.get(), nullptr);
-  if (len < 0) {
-    return false;
-  }
-  out->resize(static_cast<size_t>(len));
-  uint8_t *ptr = out->data();
-  return i2d_PKCS12(p12.get(), &ptr) == len;
-}
-
-static void ExpectPKCS12Parse(bssl::Span<const uint8_t> in,
-                              EVP_PKEY *expect_key, X509 *expect_cert,
-                              const std::vector<X509 *> &expect_ca_certs) {
-  bssl::UniquePtr<BIO> bio(BIO_new_mem_buf(in.data(), in.size()));
-  ASSERT_TRUE(bio);
-
-  bssl::UniquePtr<PKCS12> p12(d2i_PKCS12_bio(bio.get(), nullptr));
-  ASSERT_TRUE(p12);
-
-  EVP_PKEY *key = nullptr;
-  X509 *cert = nullptr;
-  STACK_OF(X509) *ca_certs = nullptr;
-  ASSERT_TRUE(PKCS12_parse(p12.get(), kPassword, &key, &cert, &ca_certs));
-
-  bssl::UniquePtr<EVP_PKEY> delete_key(key);
-  bssl::UniquePtr<X509> delete_cert(cert);
-  bssl::UniquePtr<STACK_OF(X509)> delete_ca_certs(ca_certs);
-
-  if (expect_key == nullptr) {
-    EXPECT_FALSE(key);
-  } else {
-    ASSERT_TRUE(key);
-    EXPECT_EQ(1, EVP_PKEY_cmp(key, expect_key));
-  }
-
-  if (expect_cert == nullptr) {
-    EXPECT_FALSE(cert);
-  } else {
-    ASSERT_TRUE(cert);
-    EXPECT_EQ(0, X509_cmp(cert, expect_cert));
-  }
-
-  ASSERT_EQ(expect_ca_certs.size(), sk_X509_num(ca_certs));
-  for (size_t i = 0; i < expect_ca_certs.size(); i++) {
-    EXPECT_EQ(0, X509_cmp(expect_ca_certs[i], sk_X509_value(ca_certs, i)));
-  }
-}
-
-// Test that |PKCS12_parse| returns values in the expected order.
-TEST(PKCS12Test, Order) {
-  bssl::UniquePtr<EVP_PKEY> key1 = MakeTestKey();
-  ASSERT_TRUE(key1);
-  bssl::UniquePtr<X509> cert1 = MakeTestCert(key1.get());
-  ASSERT_TRUE(cert1);
-  bssl::UniquePtr<X509> cert1b = MakeTestCert(key1.get());
-  ASSERT_TRUE(cert1b);
-  bssl::UniquePtr<EVP_PKEY> key2 = MakeTestKey();
-  ASSERT_TRUE(key2);
-  bssl::UniquePtr<X509> cert2 = MakeTestCert(key2.get());
-  ASSERT_TRUE(cert2);
-  bssl::UniquePtr<EVP_PKEY> key3 = MakeTestKey();
-  ASSERT_TRUE(key3);
-  bssl::UniquePtr<X509> cert3 = MakeTestCert(key3.get());
-  ASSERT_TRUE(cert3);
-
-  // PKCS12_parse uses the key to select the main certificate.
-  std::vector<uint8_t> p12;
-  ASSERT_TRUE(PKCS12CreateVector(&p12, key1.get(),
-                                 {cert1.get(), cert2.get(), cert3.get()}));
-  ExpectPKCS12Parse(p12, key1.get(), cert1.get(), {cert2.get(), cert3.get()});
-
-  ASSERT_TRUE(PKCS12CreateVector(&p12, key1.get(),
-                                 {cert3.get(), cert1.get(), cert2.get()}));
-  ExpectPKCS12Parse(p12, key1.get(), cert1.get(), {cert3.get(), cert2.get()});
-
-  ASSERT_TRUE(PKCS12CreateVector(&p12, key1.get(),
-                                 {cert2.get(), cert3.get(), cert1.get()}));
-  ExpectPKCS12Parse(p12, key1.get(), cert1.get(), {cert2.get(), cert3.get()});
-
-  // In case of duplicates, the last one is selected. (It is unlikely anything
-  // depends on which is selected, but we match OpenSSL.)
-  ASSERT_TRUE(
-      PKCS12CreateVector(&p12, key1.get(), {cert1.get(), cert1b.get()}));
-  ExpectPKCS12Parse(p12, key1.get(), cert1b.get(), {cert1.get()});
-
-  // If there is no key, all certificates are returned as "CA" certificates.
-  ASSERT_TRUE(PKCS12CreateVector(&p12, nullptr,
-                                 {cert1.get(), cert2.get(), cert3.get()}));
-  ExpectPKCS12Parse(p12, nullptr, nullptr,
-                    {cert1.get(), cert2.get(), cert3.get()});
-
-  // The same happens if there is a key, but it does not match any certificate.
-  ASSERT_TRUE(PKCS12CreateVector(&p12, key1.get(), {cert2.get(), cert3.get()}));
-  ExpectPKCS12Parse(p12, key1.get(), nullptr, {cert2.get(), cert3.get()});
-}
diff --git a/src/crypto/pkcs8/pkcs8.c b/src/crypto/pkcs8/pkcs8.c
index a19b4a3..ee25ee2 100644
--- a/src/crypto/pkcs8/pkcs8.c
+++ b/src/crypto/pkcs8/pkcs8.c
@@ -486,10 +486,6 @@
     goto err;
   }
 
-  // TODO(davidben): OpenSSL has since extended |pbe_nid| to control either the
-  // PBES1 scheme or the PBES2 PRF. E.g. passing |NID_hmacWithSHA256| will
-  // select PBES2 with HMAC-SHA256 as the PRF. Implement this if anything uses
-  // it. See 5693a30813a031d3921a016a870420e7eb93ec90 in OpenSSL.
   int alg_ok;
   if (pbe_nid == -1) {
     alg_ok = PKCS5_pbe2_encrypt_init(&epki, &ctx, cipher, (unsigned)iterations,
diff --git a/src/crypto/pkcs8/pkcs8_test.cc b/src/crypto/pkcs8/pkcs8_test.cc
index beb532f..df275fb 100644
--- a/src/crypto/pkcs8/pkcs8_test.cc
+++ b/src/crypto/pkcs8/pkcs8_test.cc
@@ -22,15 +22,14 @@
 #include "../internal.h"
 
 
-// kEncryptedPBES2WithDESAndSHA1 is a PKCS#8 encrypted private key using PBES2
-// with DES-EDE3-CBC and HMAC-SHA-1. It was generated with:
+// kDER is a PKCS#8 encrypted private key. It was generated with:
 //
 // openssl genrsa 512 > test.key
-// openssl pkcs8 -topk8 -in test.key -out test.key.encrypted -v2 des3 -v2prf hmacWithSHA1 -outform der
+// openssl pkcs8 -topk8 -in test.key -out test.key.encrypted -v2 des3 -outform der
 // hexdump -Cv test.key.encrypted
 //
 // The password is "testing".
-static const uint8_t kEncryptedPBES2WithDESAndSHA1[] = {
+static const uint8_t kDER[] = {
   0x30, 0x82, 0x01, 0x9e, 0x30, 0x40, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x05,
   0x0d, 0x30, 0x33, 0x30, 0x1b, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x05, 0x0c,
   0x30, 0x0e, 0x04, 0x08, 0x06, 0xa5, 0x4b, 0x0c, 0x0c, 0x50, 0x8c, 0x19, 0x02, 0x02, 0x08, 0x00,
@@ -60,55 +59,6 @@
   0xd6, 0x2d,
 };
 
-// kEncryptedPBES2WithAESAndSHA256 is a PKCS#8 encrypted private key using PBES2
-// with AES-128-CBC and HMAC-SHA-256. It was generated with:
-//
-// openssl genrsa 512 > test.key
-// openssl pkcs8 -topk8 -in test.key -out test.key.encrypted -v2 aes-128-cbc -v2prf hmacWithSHA256 -outform der
-// hexdump -Cv test.key.encrypted
-//
-// The password is "testing".
-static const uint8_t kEncryptedPBES2WithAESAndSHA256[] = {
-    0x30, 0x82, 0x01, 0xbd, 0x30, 0x57, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86,
-    0xf7, 0x0d, 0x01, 0x05, 0x0d, 0x30, 0x4a, 0x30, 0x29, 0x06, 0x09, 0x2a,
-    0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x05, 0x0c, 0x30, 0x1c, 0x04, 0x08,
-    0xd0, 0x39, 0xb7, 0x6d, 0xd0, 0xff, 0x85, 0xa8, 0x02, 0x02, 0x08, 0x00,
-    0x30, 0x0c, 0x06, 0x08, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x02, 0x09,
-    0x05, 0x00, 0x30, 0x1d, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03,
-    0x04, 0x01, 0x02, 0x04, 0x10, 0x95, 0xc6, 0x49, 0xc1, 0x61, 0x70, 0x74,
-    0x36, 0xfe, 0xc0, 0x98, 0x19, 0x26, 0x32, 0x9e, 0x1a, 0x04, 0x82, 0x01,
-    0x60, 0x87, 0xe3, 0x4d, 0xff, 0x33, 0x2b, 0x25, 0x07, 0x5f, 0x99, 0x24,
-    0x70, 0x40, 0x29, 0xb4, 0xaa, 0xce, 0xdd, 0x93, 0x60, 0x5c, 0x65, 0xec,
-    0xba, 0xee, 0xf8, 0x5e, 0xc7, 0x8f, 0x3e, 0x49, 0x00, 0xdf, 0xa7, 0xb2,
-    0xbb, 0xa7, 0xf7, 0x74, 0x56, 0xe0, 0xeb, 0x33, 0xe2, 0x30, 0x60, 0x3b,
-    0xd3, 0x34, 0x7b, 0xb0, 0x76, 0xc0, 0xed, 0xa2, 0x7d, 0x51, 0x99, 0x4d,
-    0x52, 0x1c, 0x9e, 0xd7, 0x28, 0x58, 0x32, 0xcf, 0x55, 0xf0, 0x19, 0x87,
-    0x5e, 0x66, 0x69, 0x00, 0x75, 0xd7, 0x68, 0x98, 0x64, 0x6a, 0x1e, 0x8c,
-    0xef, 0x7b, 0xbc, 0x9e, 0xed, 0xaf, 0x67, 0xcf, 0xc4, 0x6c, 0x40, 0x8a,
-    0x23, 0x73, 0xe6, 0x79, 0x5f, 0x7a, 0x15, 0x53, 0x2c, 0x70, 0x3b, 0x69,
-    0xba, 0x3d, 0xfb, 0x6e, 0xb9, 0x27, 0x78, 0x9b, 0xc3, 0x4b, 0xb8, 0xe3,
-    0xe7, 0x31, 0x82, 0x43, 0xee, 0x81, 0x5b, 0x01, 0x3b, 0x7e, 0x23, 0xb1,
-    0xcc, 0x20, 0xc9, 0xe0, 0xca, 0x9d, 0xaa, 0x9c, 0xe9, 0x47, 0x96, 0x0d,
-    0xc4, 0x1e, 0x1b, 0x1f, 0xb1, 0xee, 0x2b, 0x99, 0xaf, 0x2a, 0xb4, 0x9f,
-    0x29, 0xb5, 0x9b, 0x83, 0x5e, 0xe5, 0x7e, 0xf7, 0xf7, 0x58, 0x31, 0x54,
-    0xf6, 0x29, 0x6b, 0xfc, 0x85, 0x1d, 0x8a, 0x5f, 0x22, 0x03, 0xed, 0xce,
-    0x06, 0x5b, 0x93, 0x57, 0x23, 0x4e, 0x0e, 0x5b, 0xf8, 0x29, 0x29, 0x7c,
-    0x2d, 0x4a, 0xc6, 0x9a, 0x97, 0x64, 0x4c, 0x15, 0x72, 0xee, 0xaa, 0xd9,
-    0xed, 0xfd, 0x8f, 0xa2, 0x36, 0xf5, 0xf8, 0xe7, 0xf7, 0xfe, 0x67, 0x4b,
-    0xbe, 0x85, 0xe3, 0xda, 0x3a, 0xcc, 0x5f, 0x17, 0xbe, 0xa6, 0x1a, 0x38,
-    0xed, 0x85, 0x4a, 0xd6, 0x05, 0x4b, 0x5f, 0x54, 0x0e, 0xfd, 0xdc, 0x32,
-    0x9a, 0x0d, 0xca, 0xec, 0x02, 0x3f, 0x78, 0x23, 0x6e, 0x6a, 0xfa, 0x2c,
-    0x04, 0x86, 0xc8, 0x74, 0xa6, 0xf7, 0x2f, 0x1a, 0xf1, 0x1a, 0x51, 0x09,
-    0x2b, 0x04, 0xdc, 0x53, 0xaf, 0x39, 0x85, 0x35, 0x81, 0xc3, 0x11, 0xf0,
-    0x7d, 0xb7, 0xb3, 0x77, 0x0e, 0x8e, 0x22, 0xda, 0x1f, 0xb0, 0x3d, 0x59,
-    0xca, 0xa9, 0x70, 0xc3, 0x33, 0x66, 0xcb, 0x81, 0xfc, 0x85, 0x2a, 0xf0,
-    0xbc, 0xd0, 0x30, 0x85, 0x1b, 0xe6, 0x9b, 0x76, 0x88, 0xca, 0xf1, 0xf5,
-    0xc8, 0x19, 0x8a, 0x62, 0x16, 0x7b, 0x01, 0xc1, 0x1d, 0x80, 0xc0, 0xf7,
-    0xc2, 0x0b, 0xe3, 0xbf, 0x83, 0x9a, 0x3c, 0xc0, 0x0f, 0x5e, 0xea, 0xf7,
-    0xb2, 0x4c, 0xcd, 0x5e, 0xf0, 0xad, 0xa5, 0x98, 0x25, 0x62, 0x69, 0xba,
-    0xd7, 0xab, 0x78, 0x59, 0xd0,
-};
-
 // kNullPassword is a PKCS#8 encrypted private key using the null password.
 static const uint8_t kNullPassword[] = {
     0x30, 0x81, 0xb0, 0x30, 0x1b, 0x06, 0x0a, 0x2a, 0x86, 0x48, 0x86, 0xf7,
@@ -268,10 +218,7 @@
 }
 
 TEST(PKCS8Test, DecryptString) {
-  TestDecrypt(kEncryptedPBES2WithDESAndSHA1,
-              sizeof(kEncryptedPBES2WithDESAndSHA1), "testing");
-  TestDecrypt(kEncryptedPBES2WithAESAndSHA256,
-              sizeof(kEncryptedPBES2WithAESAndSHA256), "testing");
+  TestDecrypt(kDER, sizeof(kDER), "testing");
 }
 
 TEST(PKCS8Test, DecryptNull) {
diff --git a/src/crypto/pkcs8/pkcs8_x509.c b/src/crypto/pkcs8/pkcs8_x509.c
index 4458b56..2c7841e 100644
--- a/src/crypto/pkcs8/pkcs8_x509.c
+++ b/src/crypto/pkcs8/pkcs8_x509.c
@@ -293,10 +293,6 @@
   return ret;
 }
 
-// 1.2.840.113549.1.12.10.1.1
-static const uint8_t kKeyBag[] = {0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d,
-                                  0x01, 0x0c, 0x0a, 0x01, 0x01};
-
 // 1.2.840.113549.1.12.10.1.2
 static const uint8_t kPKCS8ShroudedKeyBag[] = {
     0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x0c, 0x0a, 0x01, 0x02};
@@ -396,20 +392,16 @@
     return 0;
   }
 
-  const int is_key_bag = CBS_mem_equal(&bag_id, kKeyBag, sizeof(kKeyBag));
-  const int is_shrouded_key_bag = CBS_mem_equal(&bag_id, kPKCS8ShroudedKeyBag,
-                                                sizeof(kPKCS8ShroudedKeyBag));
-  if (is_key_bag || is_shrouded_key_bag) {
-    // See RFC 7292, section 4.2.1 and 4.2.2.
+  if (CBS_mem_equal(&bag_id, kPKCS8ShroudedKeyBag,
+                    sizeof(kPKCS8ShroudedKeyBag))) {
+    // See RFC 7292, section 4.2.2.
     if (*ctx->out_key) {
       OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_MULTIPLE_PRIVATE_KEYS_IN_PKCS12);
       return 0;
     }
 
-    EVP_PKEY *pkey =
-        is_key_bag ? EVP_parse_private_key(&wrapped_value)
-                   : PKCS8_parse_encrypted_private_key(
-                         &wrapped_value, ctx->password, ctx->password_len);
+    EVP_PKEY *pkey = PKCS8_parse_encrypted_private_key(
+        &wrapped_value, ctx->password, ctx->password_len);
     if (pkey == NULL) {
       return 0;
     }
@@ -910,25 +902,9 @@
     return 0;
   }
 
-  // OpenSSL selects the last certificate which matches the private key as
-  // |out_cert|.
-  //
-  // TODO(davidben): OpenSSL additionally reverses the order of the
-  // certificates, which was likely originally a bug, but may be a feature by
-  // now. See https://crbug.com/boringssl/250 and
-  // https://github.com/openssl/openssl/issues/6698.
   *out_cert = NULL;
-  size_t num_certs = sk_X509_num(ca_certs);
-  if (*out_pkey != NULL && num_certs > 0) {
-    for (size_t i = num_certs - 1; i < num_certs; i--) {
-      X509 *cert = sk_X509_value(ca_certs, i);
-      if (X509_check_private_key(cert, *out_pkey)) {
-        *out_cert = cert;
-        sk_X509_delete(ca_certs, i);
-        break;
-      }
-      ERR_clear_error();
-    }
+  if (sk_X509_num(ca_certs) > 0) {
+    *out_cert = sk_X509_shift(ca_certs);
   }
 
   if (out_ca_certs) {
diff --git a/src/crypto/siphash/siphash.c b/src/crypto/siphash/siphash.c
deleted file mode 100644
index 7e4e9c5..0000000
--- a/src/crypto/siphash/siphash.c
+++ /dev/null
@@ -1,80 +0,0 @@
-/* Copyright (c) 2019, Google Inc.
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
- * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
- * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
- * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
-
-#include <stdint.h>
-#include <string.h>
-
-#include <openssl/siphash.h>
-
-
-static void siphash_round(uint64_t v[4]) {
-  v[0] += v[1];
-  v[2] += v[3];
-  v[1] = (v[1] << 13) | (v[1] >> (64 - 13));
-  v[3] = (v[3] << 16) | (v[3] >> (64 - 16));
-  v[1] ^= v[0];
-  v[3] ^= v[2];
-  v[0] = (v[0] << 32) | (v[0] >> 32);
-  v[2] += v[1];
-  v[0] += v[3];
-  v[1] = (v[1] << 17) | (v[1] >> (64 - 17));
-  v[3] = (v[3] << 21) | (v[3] >> (64 - 21));
-  v[1] ^= v[2];
-  v[3] ^= v[0];
-  v[2] = (v[2] << 32) | (v[2] >> 32);
-}
-
-uint64_t SIPHASH_24(const uint64_t key[2], const uint8_t *input,
-                    size_t input_len) {
-  const size_t orig_input_len = input_len;
-
-  uint64_t v[4];
-  v[0] = key[0] ^ UINT64_C(0x736f6d6570736575);
-  v[1] = key[1] ^ UINT64_C(0x646f72616e646f6d);
-  v[2] = key[0] ^ UINT64_C(0x6c7967656e657261);
-  v[3] = key[1] ^ UINT64_C(0x7465646279746573);
-
-  while (input_len >= sizeof(uint64_t)) {
-    uint64_t m;
-    memcpy(&m, input, sizeof(m));
-    v[3] ^= m;
-    siphash_round(v);
-    siphash_round(v);
-    v[0] ^= m;
-
-    input += sizeof(uint64_t);
-    input_len -= sizeof(uint64_t);
-  }
-
-  union {
-    uint8_t bytes[8];
-    uint64_t word;
-  } last_block;
-  last_block.word = 0;
-  memcpy(last_block.bytes, input, input_len);
-  last_block.bytes[7] = orig_input_len & 0xff;
-
-  v[3] ^= last_block.word;
-  siphash_round(v);
-  siphash_round(v);
-  v[0] ^= last_block.word;
-
-  v[2] ^= 0xff;
-  siphash_round(v);
-  siphash_round(v);
-  siphash_round(v);
-  siphash_round(v);
-
-  return v[0] ^ v[1] ^ v[2] ^ v[3];
-}
diff --git a/src/crypto/siphash/siphash_test.cc b/src/crypto/siphash/siphash_test.cc
deleted file mode 100644
index 6d8f9e7..0000000
--- a/src/crypto/siphash/siphash_test.cc
+++ /dev/null
@@ -1,59 +0,0 @@
-/* Copyright (c) 2019, Google Inc.
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
- * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
- * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
- * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
-
-#include <stdint.h>
-
-#include <gtest/gtest.h>
-
-#include <openssl/siphash.h>
-
-#include "../test/file_test.h"
-#include "../test/test_util.h"
-
-TEST(SipHash, Basic) {
-  // This is the example from appendix A of the SipHash paper.
-  union {
-    uint8_t bytes[16];
-    uint64_t words[2];
-  } key;
-
-  for (unsigned i = 0; i < 16; i++) {
-    key.bytes[i] = i;
-  }
-
-  uint8_t input[15];
-  for (unsigned i = 0; i < sizeof(input); i++) {
-    input[i] = i;
-  }
-
-  EXPECT_EQ(UINT64_C(0xa129ca6149be45e5),
-            SIPHASH_24(key.words, input, sizeof(input)));
-}
-
-TEST(SipHash, Vectors) {
-  FileTestGTest("crypto/siphash/siphash_tests.txt", [](FileTest *t) {
-    std::vector<uint8_t> key, msg, hash;
-    ASSERT_TRUE(t->GetBytes(&key, "KEY"));
-    ASSERT_TRUE(t->GetBytes(&msg, "IN"));
-    ASSERT_TRUE(t->GetBytes(&hash, "HASH"));
-    ASSERT_EQ(16u, key.size());
-    ASSERT_EQ(8u, hash.size());
-
-    uint64_t key_words[2];
-    memcpy(key_words, key.data(), key.size());
-    uint64_t result = SIPHASH_24(key_words, msg.data(), msg.size());
-    EXPECT_EQ(Bytes(reinterpret_cast<uint8_t *>(&result), sizeof(result)),
-              Bytes(hash));
-  });
-}
diff --git a/src/crypto/siphash/siphash_tests.txt b/src/crypto/siphash/siphash_tests.txt
deleted file mode 100644
index ce45c30..0000000
--- a/src/crypto/siphash/siphash_tests.txt
+++ /dev/null
@@ -1,1081 +0,0 @@
-# Random test vectors generated from another implementation of SipHash-2-4.
-
-KEY: 5a174c22c487d0c5c1161e570d10d145
-IN:
-HASH: 9f06a76d8ae7ff05
-
-KEY: d56745469ae42734c2ad87e7c13ea101
-IN: 3c
-HASH: 9698cd8e2620362f
-
-KEY: cc7c78ae24ca106c5d771742b530cbce
-IN: 6cfb
-HASH: a94c8f359a6034d0
-
-KEY: c8de6d120462739b29b25913f75f8be4
-IN: 8bff10
-HASH: 5f12329867deb530
-
-KEY: c435d95c06085dc26060e488f0691013
-IN: f575791b
-HASH: 38824fa193583e1c
-
-KEY: 5d5853675bbe37b0034e019c8703bbea
-IN: 20be54d583
-HASH: 5586f5ed0a52d560
-
-KEY: 77fdc2467cb5cfadba4dcb02f08d5de0
-IN: 58ff9d2af71e
-HASH: acc2bf8eb5308b5b
-
-KEY: 3f1abc8a74470e697aade7bb409d8c36
-IN: 2a0d12d99b8c10
-HASH: 2349992cbb601e73
-
-KEY: ad977640b6902db5fb05c35bde85e221
-IN: 336ddbba25fc15fd
-HASH: c7a610c0743b7f8c
-
-KEY: 9eeb5f0ce1545597c93fcd236e022df9
-IN: 123569d0a53d5399cf
-HASH: 7f25736f962974ce
-
-KEY: 56d9ecda6345127adbf79e4ec0871116
-IN: b472f565c1370a620c66
-HASH: 3f3acf72be80cb20
-
-KEY: 4b5a67fad0b4c6dd41656e79e47e4ccc
-IN: 317e7ef64c39cf111212cd
-HASH: 4c8ee337c7103c0b
-
-KEY: e0e04322fb57cf43fb6809a33d392565
-IN: a783aca573cb07e82829eb47
-HASH: 3d5ca090c68d3a94
-
-KEY: 2895c38788e064541584f222900a45fb
-IN: 6381894b7947f3cdb6eca1e8c5
-HASH: 8ee7682323bbf06b
-
-KEY: c3a0b4ea71d4e824459acac0aa2caa9d
-IN: 6a9257065f991f36ba175ec177b8
-HASH: 078b76ac3dc840e2
-
-KEY: 56e7c5dc7ba9c37095117d3b78b6be0c
-IN: d9a8402bc9303b5a67c3aa0f1975ac
-HASH: f5fc32c55915e9ff
-
-KEY: ffcd0ca31dbb4c0a64bce83d4a876e2f
-IN: 4c50fca688dcc34a62bf77554af22fca
-HASH: 9e266efdc2b55efa
-
-KEY: a358acb475fe3a545aba172e6a2e606b
-IN: e2e6007adac976736a222ad2a607d4d15d
-HASH: c4bb7312a7d39486
-
-KEY: cc611d043067a99cb5572bb0121beac8
-IN: 7428cfc5fd76f0ffc59a216b142576d9ee5d
-HASH: 67dc4aa8a52069df
-
-KEY: 19c44128e61c992e625a1187036566b5
-IN: f6b8f9422f6eda5c70999737573142bd0d503f
-HASH: 35d6199bb8b26627
-
-KEY: cc690d64cbbd6766af28d5e8809804e2
-IN: 80b9e15766ecf0fd988658701328a266220528f9
-HASH: 8da47f7d2c8a24b9
-
-KEY: d097c32707d111358a8f6470c4bbd3bb
-IN: 4a174edf086a5406f36aa20f1dc5f854df264ec159
-HASH: 8dab02709978b647
-
-KEY: 79a047071edd76cc634f9510dd0113c7
-IN: 247ba72455b9a97dabab6905b0a1227635f79f3e530e
-HASH: 1364c8043fb9baac
-
-KEY: b3092acdd6023215701aa9c99ae4e218
-IN: ce36b755300273c22805eebdfe7dadb59fff0bf8167fba
-HASH: c8e50f39c0605ecb
-
-KEY: db6c7ce746a0431f8269407f8c35a4cd
-IN: 40dbedc0f4c351a6ffc058a2ff63794419b1c2ecb4759f6d
-HASH: 9f46bd8f53a03217
-
-KEY: 110301071f6676fc2ae41a5cea83b10f
-IN: 7947c7e55c5fe0fd584ade5a30f8af69cfbcc4825ca4e45fd8
-HASH: 7305e77b0e3dd8bb
-
-KEY: 976c2ee47783766ea8235001f65d256b
-IN: 912be0ef8e0e7becfa176ed4006ee8f2e77107f022e42351cc20
-HASH: 2f05ddca521adcf1
-
-KEY: 58b1de6e33ffea228e144b4f25e5762e
-IN: 02e8b89312479f1b0a6da0f7f35e6ccb50ade322e70ba2f5b0a354
-HASH: dd0547e80e8505e1
-
-KEY: bc57f28c8f461d9714b48c087164a695
-IN: 990ceb64628bbafa3c0c4bdabf465a19d075fb66918dd240ebef176f
-HASH: 7ce492853fc22eb8
-
-KEY: 16c2ffc4e03d5f17064f22fe0512eebc
-IN: 42e78f029eaaa1474268d534d1542e6019af7c311b70a3b80d89fc8394
-HASH: 5830bdb3f6cdbf80
-
-KEY: 546cec4ec1ccdd1dec16ffd684fba160
-IN: 36fa97e2d20f91a56389c84d3c2670c25afd2d551de8930c735f30dc0f8e
-HASH: cc29ae6a40051fa9
-
-KEY: dc04255c1214077c60ed57c00719c4ae
-IN: f6eddb62225c75e47636587d992abb31fb1429cf0e4bdf7ca7610833c6c145
-HASH: 8959c817d89057b1
-
-KEY: 66fa7b74c5d112044e6e26a8f056672e
-IN: 9c303c5097358b4671f2b282d2286ccb9925e22717f3e1bb16a2a7f088c89efb
-HASH: ef44eb07b3dabf20
-
-KEY: e68c0b8b0fc194402a074069fa79bcc9
-IN: 68740dd32b54ab57313b7aba7212eeaeedcd00fc34b5a295c3742361acb450c331
-HASH: 31c38d85506f95e2
-
-KEY: 5a9bda075c2c3756bb03637b833a2c7c
-IN: 0a20ae05077a2775accf3e93197c2cbe58ec0c8cb2d666a6d1c5ab8f6a88921b33a6
-HASH: 83ac7417ef2f78cc
-
-KEY: bddb529beb2c89ee5f3e6b91c786f7be
-IN: a963b7e8a6ab9ebce913d39af035540d1172488c29b85217edf02143c23183da52a3ba
-HASH: 87bfacf3844aa239
-
-KEY: 65bf6deca182d55e94ebbf8fe0df1e01
-IN: 7c95a702ffec11b19ddafcb53feb2571214b06219feae9b8a058509fde4b54e1f16cb89b
-HASH: 170b6b574e480859
-
-KEY: 7ef0aa07183687c13f800f268a00ea86
-IN: 8c2b513a5facec6f5a34f49eedcdcda7bccf99fd9de0526ceff7c81ee11797d451d62cb689
-HASH: 5d0f521bc4b1c1e1
-
-KEY: 490cc83d84a0102cd83c11f8123733d2
-IN: 1f7312100fe65f082abecc08f276ff81164b21ad7ea83d7729dfd1ef622b5c39c884b3f82e49
-HASH: 2b72bb41af9f002a
-
-KEY: 81e1981c81e5c3010ca4b048eea1cc72
-IN: 012273854b89fb3c66e4427d460e8493927d71f44ba7ed7dc2b3cd3178faeb6f0471bc31436a85
-HASH: 6d67485ebe1e15ad
-
-KEY: b47f522fa34143dbccffc3b1f4093b09
-IN: ba235ce1ad78f2566f78270021fe9f31417c3f65f1533c43ef71d6d281d17722ae4bc8eb87636c2c
-HASH: 390e3fe50119cac3
-
-KEY: 9a3fedb06d1e550dbbb4c4c6c42c7b58
-IN: 95f641d66e88414ee49060d1b7bbb2d62f326eaf6cc3c77a359ea2dbcb0526f737b4a1797e7026d813
-HASH: a58b6f3f1df212fb
-
-KEY: 9111abb078f38c77eed9ff96e25ec5ea
-IN: e1476ccebc8fd7a5f5d1b944bd488bafa08caa713795f87e0364227b473b1cd5d83d0c72ce4ebab3e187
-HASH: 30527d54ef667563
-
-KEY: 42808b700fca9f85fddfb5d590807f0a
-IN: 5f81bd275320d97416e5e50d5d185d5542a157778b2d05521f27805b925e4f187d06829a2efd407ba11691
-HASH: e58617ceafeab62f
-
-KEY: b609075989500f06abed2bfc45c83d13
-IN: dfedfc41d8a98c617adab43f94b8d55a4fb1c02bd9c4939f8517e7207d3b8227d2bb8af086dc37e2ac24f437
-HASH: 0037588ae129b9e4
-
-KEY: c9afb75085e1759dc2bb6790ae29ff1d
-IN: 01a06ae550215331ad34fc87c2e9597d2a369753009c5a5fa2044481c6126bbbeab1a9f3d49f6198565fc6db9b
-HASH: 236763204e7ce6be
-
-KEY: ca4a9f84ef63e8b62514d34f2d74b4b6
-IN: 5f670e9e199c590700b7a7fd6b777f325ceb90f05b611ab77a970dda67db8636ba82bfc8770f742a22e66d39a59c
-HASH: bb3bd93cf471803a
-
-KEY: bbb3452a0a57a75460a77f238bdde048
-IN: 6279c2ee80f83cfc3074f24e5026a3fdbbc29e95f46a4e2862af2dda8e0c49b896f8186e0a3aa527dc4fad02a7c21b
-HASH: 823931f402c9d3ae
-
-KEY: c1f2268a501653c08ce64a34b1eda186
-IN: 2b55a854ed9125c148e97ed0fd128ab7a48bd0abf150aa86f60292feb3cb02da159698a01adc48bea1bd38a8f0339496
-HASH: 050afb47067c73d4
-
-KEY: b4a12074ce0969ae5de1cbd25e4f6f5d
-IN: a1543098dc8e85c7319269c590513eafae8bc5bec292b7718ea49018e3a0ce80843ce1aa644732eb083cfdb418582a4a7f
-HASH: 7c0fb55d3f5e8363
-
-KEY: 598233eb95280098c909e3dd3f93dcc7
-IN: af6e57e39dbfe09b91e57c212977b9b5ef48d30bf8bc8764e3796b5aa82680fb590d7ec73f4ef2357c34aaf2e12b45dd1f47
-HASH: 78ab42112974448c
-
-KEY: a91a39cfbfd3a01ba163294d96d99477
-IN: 092c683817c7484996b32e6c1fb46f3754b829b1b46120bfe1bb9123d139d46f5565c8dbc11a60273bf6b8e1bc38bc9a6f1995
-HASH: 7fa74c95642f9644
-
-KEY: 0b564ed2eee9e3649ccf53fe50d8b1c6
-IN: 05f42bd7cc89c80fb6eb8d09d4f4968fc47aabc0db6ebdbdf70a416815622d6e92de69cc675671db24d021be0b6c7545aab0becd
-HASH: 708bebc79de07dc6
-
-KEY: bae7c48ecb04834a577ad26c87022cd3
-IN: 9f5af8c66983938b16fe3a2de4d59faef425ca769d3a31c62330aafa1aba57e53bfc3d61357b618f1ae01bba3efecc65a70edcc8b8
-HASH: e9d43d98f790f1e9
-
-KEY: ac86394cf9e8668900fc3e731e5573d2
-IN: b832f6c610c6f3bc5ae50b656709f26777a9cfa6266faa80d788376d7a4b0af3c84e2f14a4b538bcde23e45f0554e7a333a95224b474
-HASH: 689de641675e6b3c
-
-KEY: dd60e6ec34522428fe517767fd94a5cf
-IN: 3ed67357449c3b24b6d8a381d92a443d333532aafd1c90411a29b80ffb6566cb13762c5c8c8ef87741023ffafe8ca473f77934acbd25c6
-HASH: 30ff83beb6a4eb30
-
-KEY: 9f5c48c10551808854f2c5965f2b8402
-IN: 9b160f17162a71a9aebbca3a32939cf09ea4aaaeb98c75aa5fe0c15a8a94cdbfb7716ea37b7f0aaa9e058d93ef5800e9ec863a5df85d51ff
-HASH: 987b4b16546765bc
-
-KEY: df955ec1e84432fec581bc446b10ba8a
-IN: 44ae821f9ddb1e1bfbec2259fad2042558fb216dee7c56af074d24b94a61074f37a011a46fc7542907af3a5c03ad64b34f1940219e3c129b8f
-HASH: ed3e957005bf498a
-
-KEY: 5a901ece66329a9488bd17ad3f350ec9
-IN: 3e404145993bf0c296c97729f9f2e6eb3bf22010fe642312c8136c0da176ed4c314eaee878047cfe0705a835a8a22e7d2b29c9328370032d4824
-HASH: b5e479243d036ead
-
-KEY: 6835a439c331ce630ef771f866f045a5
-IN: 5f2d95f898406fce05b36d1cfe21c57541bcbbb9293c3dd56e6fa8519e1ee76b40c2db8097ed008e84dd47b8aaae3c2b33037f9f7af38f3f41c9c4
-HASH: 7ce56ef8daac6676
-
-KEY: 84b224c92018a348dba300d4e17cd139
-IN: 9c520b111bb008086c5815f450a6b7b6daec0925c4b0c8cf99f9f9ddb6198000a379fcb62527d7c361ccbda2597deecdd055850abc6a17251c08577b
-HASH: 3e5ab339d1f90e72
-
-KEY: b3af10ef15d3e728b36171cd7e0bfc54
-IN: b0c30990fa7d8451403c84c7cbd650847dab3e087fdf2985eda79c48deda583bc9c4957e24b0502ab6004a85bbaaba74efe9bdf2377043d008ae14e169
-HASH: 0821d1f9e241ca1d
-
-KEY: 3f0dfe713054af061ab05dec911b8895
-IN: 0d3ee8fcd134e9814641fdff20b22ddf17ffcf3f23af7327e203cf1971329f92e99622d1b8329f9a8f9244c5efbd4ce3e07f1b9779f1d84927e8fb16c030
-HASH: 0a5fe889f9475d8e
-
-KEY: 62663e655ae3a122b869b11182f16a11
-IN: 82696187d910792ac92d50900677a1a0238d91cee3cd72ad949b50c53a0613add3bf0ab02c78e87f96847d5bda2bb31e4e19d92c933b1637aa00be18eec696
-HASH: a2c05353cb689240
-
-KEY: 1d3f1977fc1aaa27f459cb4de22a736e
-IN: 935e1cd9a08b1d0b57dbbc640915c6de3eec62f481cc64a27cda6a08db9e7dfa58d13dedad1ce2abfa967f059185b41f2b72114a4ba51a9a5d279f067ed9fba6
-HASH: f64a0fe86b7dffa1
-
-KEY: 96bf9034f02772a5150b0f2dfdd49c88
-IN: 2315e242205287d3e9dc5cbe317ddf3f286ad02fc4385c82bfdbd43ff6d5f425347e229faf0521acf9bbf3eb6f3abc2029c7af2506972444425e1b92aa1d6601ea
-HASH: 2ceb3eded2754829
-
-KEY: 5e2d0b77b3478b1d041b9b6784bd4e0c
-IN: f10b956532deea1838bebcb192cf256817525cb95242e5295830db8cee586e5cf3fdd0d9a5277d5a50a8dc6e4878d2cc6a549eb52bdc5beeb89ce870e65a87702eee
-HASH: 8fc78a2ca1ba1f7f
-
-KEY: b2c34273ff91123facb2e3f4ac03952d
-IN: a43e581d35caf54ece5b668df2f4a77e29bee3e1fe26add027b07e814991bc538da16f1649886e42be0a5be8b221ad155eb7489e81330ee91b194904086f91e9e71a78
-HASH: 36ea4accc3181075
-
-KEY: 828238257380186239aad56fda379060
-IN: 46f7fce30d03f04bee6559ace020e6ce72379001c20e5fb30bc7a500ce91262e0d7af70d8be30c61fee623e67a5e46db55d1dec64bd4be6af45bfff65050800194ba175c
-HASH: 7a1a36cfdd778b12
-
-KEY: aa751839cf5a43613a3b686bb22f9e02
-IN: e0848a835142871c489c772d01ca0115f226d39f94efde92178a38f87fbb371d4791f13954feb4f493bc0707c4dca732e24642cc6effa26da527ee7472c1c34c4b0b4834a2
-HASH: e144d10851a7e0da
-
-KEY: e3d027fcfc629cc735fdb70912799363
-IN: 08a51183fb0396a1633bf7a2c6ce4abd1e44d9153d7bc2a269f478269181df5ff29346366cea689a8301efca949693e1836d27d9cff181099e878b2bd53da75866f4abe0b64f
-HASH: 4a935a091f380fbe
-
-KEY: c9852a9cdd185cb16fd88ef793bdf598
-IN: 49cb5ab1bbb45afb32878b059685a40016f3add53623e23859c9384641c537e13aff631d814deed607bb6abc375c855f98744e455e937ee1c9e478c4878854166c30d0b686328b
-HASH: f2df3a49621a40ad
-
-KEY: a713bd5752e392d99947a0a0fef98da9
-IN: 15064ba012aa36887257f3f84261ac66134c36dc02d4d8688e2fb10ea36974c4fd3963144f8ff01e3132d2c69e5b57cdba82f98453238a51653facc718467ca781e73044aa368879
-HASH: f187bacabe914603
-
-KEY: 5292ed7c7317c2aa71831d03b905d0c2
-IN: e3eea270140e52ee204c78b9a4d86c0be9c74127acb4f3957b1fd380417dbd57f91fe69509126e531a62144cf7ec147b36aee7931b883a028f93993bb8068552e1ac9736775038c8cf
-HASH: a9a8c0bc50104e8d
-
-KEY: c3117a19ed788199add874b10f62190c
-IN: 112a91dad631502ec6d9a569d14cc009779bcf2ffa489ea4df85c275ec37148b25a133dcb6d4c3dbea8ed4375e7cf26885b991f96ad984880bff76a62568fc115d3762dccb4522f1a27c
-HASH: 4fc2a87b168477a8
-
-KEY: 45862eabc24e2b62acfd8833595b329c
-IN: 921a7d233720992b5d767b61f86b4d6857caa99d39e18656de8c5571f2a7295af7e0d703467e4c0b83f6f7079c63b55657776d3020424443756388ea217c2407284fc8657d3935a9b34573
-HASH: c1cc6da484446857
-
-KEY: d185262e194717d27be06c1297b8f27b
-IN: 7804f030a6d67847f53cc93052953516f66c915affba735df79df7da6d70bd511e4edb33fd712b58bfdff47d98b8acfaff064bd4e1f64828d61a82a5e72ad97573f4631fcec0ebfcbd16e67e
-HASH: f9d37ca5a7750584
-
-KEY: 53ea30bf7b1aeba84ae8e0b434a8657e
-IN: 65ffe0a087ce955a6170462711dd53fc057aeee9fb5e7a8cd866527fdce70aa4b8acc65ee4a366cdae649cb5342120cd7cbb9d536b1697cc45326a44494aedefb4f7d96fa5d0ddd104bdc6a84c
-HASH: 965ba9830abddee5
-
-KEY: 79bad8d7ff51922ef1d540b7d8d7663d
-IN: ed536d02d21049bfe6c1428ebb6a8faa481321a4977a685409b0fb2ca39d72c92d3db0ac406d56e2f15d6b6b62c73246807215bae613d283b8a35678df263fdbb6d3172c16909deb8e97d78694f3
-HASH: 4841b9dd5502f605
-
-KEY: 104104e76e645e83c7b40c6674906d55
-IN: a7546cb4e6b1b1c112aa28563028e910915c6b44b668bb57bd6623b941af4c3e22c7cf6eff2f6c474657fc5ee293db60a84944bafed2acabdbe6a6e7f0804ebed61786c2cf29cdfb0c62e8d41df81b
-HASH: d21db84542deb383
-
-KEY: 8d3c174a295a9d859e009f73e113403e
-IN: 16ed05c2b7b0c54df274bb67804c5d7671b915d899e15b2e166c3f1e4d9e990ab5be59c5e9fd70e1967a8021797ed8b2e40182f860dab2d0208dcc7c9fdb7bdcaabbc81f5b9b8751c558c5418dd654b2
-HASH: 0c4d09f8827c0c37
-
-KEY: 55bc19da3d5e60a3308379d5900165d9
-IN: d18ece72cd2f5fafe52fd55def2e6af0370e420d7aff7968f9cb5efc44ebb161a6bdd22132aad0aa9685e9168ebb9578209e51865625a4cc86c8f7898ad629b64e400a7d4687a5c3c000ad724a281440f2
-HASH: 7c47369a6d8387ff
-
-KEY: 58a3165308ef3c5e2a7c05070085455e
-IN: d9382554d5b633afa16065e6dbc0d472ee26629e6217a293b63af73cbd4a5dc3cf61ef7ebd5b6900a34bf4ade833c0dab9afe9d2d97369bf2814d03349d6e917adb5e0e1388772fad1a4baf64d7836fe3ffc
-HASH: 2ba3e3082bdd312b
-
-KEY: b636290e491b0ac22476c91c958ab313
-IN: 3d27f5c20db62e3abe1068c018fe8e09e4823b8c1209b74a50dbc19302e190350dba1c5ad616007c72be04bc21d7ef0a82804f266ba95fb3047a6a05de3f0d7ca3cc7c4633a02dda4f367051685535d8e1a155
-HASH: d14da7a2dc3b015c
-
-KEY: 667094c06354337178e646e23e453403
-IN: 215f856c43336295b5e4d625d8cf5b37c4a5b07a39eff2b42427d5df683982ae78ec85ba085740a28446c7928bce24be1b66a087898634a3f6260a3926c9a8f953e235e469c4de23fd32dde181168525b716a2cb
-HASH: 2f7cb69c5e4f942d
-
-KEY: 52eebf5170c603985982122bd8eeb1d6
-IN: da1ac8ccb4c66979633092524e42ca05df667ecc3921849a24c8fbf6aee70a01504ee2a80a000ffbc7b7629843f15270982a59ff9f3f081963a109ae8eee0a1d59baac5207f44071e51c64535b6920bc07bbc9048b
-HASH: d3a5fe4ac656bef1
-
-KEY: 1c1515cae3eba8cc9ed94c10f8a1c211
-IN: 4348d387039f7fe59a1d94a9e6d894241d62eb3ee91c19ebb09064792abb126710a619073fd293b59fecae7d90655d651e542be56a01ae5d419f14b1cee06cd90ee68e0106cd48130dd6e0d73db8fedbad3b00ada87e
-HASH: 57a4daa6abfb5a2d
-
-KEY: 8a8680122ba96ad89992741a8802f79e
-IN: 6ae10dfa31e5d06aeed3bf640591b9810245ccc175a8ff9f36893ad6e10c6dd9347d001f37c41123e4ea16b86b08aa3498c75bf5b8702228fb654595fb930cea2bb9ec97ffe1fba10fdbb7e8b16a2495df30abdfe1fc4f
-HASH: fc353ccf54b8c294
-
-KEY: 40d3e4941056b2585e1ed3bbd3196b24
-IN: e1764c110b024e2c406a18d6a6cb1b2d8dc05f8cbf635d9c6b59f8c54f7cfa1c9022f719d28979dfd75f6a221687690a046404fb1204cb27ab6502f6f24ac6d9c272852acfccb2d51948ddb427950c95ae4045699ec002c1
-HASH: 47108a5f3f664b98
-
-KEY: aa377b72cf2c282946fb87e6f3f16fbe
-IN: 4bf7833eb1e828df6fc190ecb568e3e175307408c4f851532afe731986d05c2e0a6d21c40b0228af69a0cf4f30293ba119462f3f95200386c70a4c49ad7251bc797be0b504efd50c98c3099b1119772deb764ba799bed28d35
-HASH: 6afdff80d074b585
-
-KEY: 304b7a8d2825ab0b4c78a82b202b1942
-IN: 43094418f2f65b85acacf5b3190711332fd3fa7c1e471a49a7d5134ab7f22def6fa973cb135a0add46fa482e7e29976abff74c3bc33af797b46540c85eecca45b848b55d3e412970c8937fb97d2b61af68ff3f2876bf8cb72dc3
-HASH: 8f89c9b9a3b9bf62
-
-KEY: 1b54ae53fbea3567a9678350ae934303
-IN: 8d02b02800d9605227fa73cc920962339645c72b560ba8c266b0b9e94eb8be0c9748718ba9cc48f1afd12e8b458d745596b763c7e65cb8a0fcc3d937c56e04a6873ceeefd3a77f3c545eb957a9a7bfbefabd47dca867ea92203c9a
-HASH: 86f09b1edb5f7934
-
-KEY: ada9526398c0ffe64b200ec1823a0d16
-IN: f6fcdf72c13acae3886dbf6a842806fc9ad021d0329e595748a8cf82f375fd357e1cc37a7d995d869373cad1dd8ecb8dbf0e5333767470378fd7e5b0d1fefedc18fcf045cfac7d883e67a8a32efbccc1a87a8e089f34186f7ea4ac41
-HASH: 64e098ae04f9e06b
-
-KEY: 30f08a4322a8c71e1e1a6353b371fd4d
-IN: 80df14c6bb51846621cd95b57c02e34afe6a96eeba8bc29002b2514f26c3ce53dc81330ebdfe8bce32d4e789f5bc354b03b4d10a64a10248dd1626726ff607529386f7becf9d716664bed65656629cef7fc7482e9046af09aa7ed60072
-HASH: 746b10b00aafaf2c
-
-KEY: 9bfa27a589f425dd70390c6ca1e1760b
-IN: 79fc7caea4cf78001a8d601de3438584517972e81d55c8e00b5c8ffd1e1aa5896058a56e636a4e66842d31f5287e01587601a9f79488db6f28f0a5644b34de163831cf462493ec579ee0c7631adda09f5e135cd70e6a4504e52823c1cbc5
-HASH: 1899998766305ccb
-
-KEY: fab33b56c2b97f9899438d8c4448a721
-IN: fb7e625072c6dedcf31d0fbdaaac81585465f6227d1a37d60befeb9662823d2bfb70f0dca67af4c1c60f72a524fef0c243a758f8b2883f17f2b113277fd71d28378c027cc9aa8c79d5dadcd65c2ff275f29a428437f424ab2171c33f819df4
-HASH: 208be5482e6ebba2
-
-KEY: 6ede0e899a0dacffa8c8ae3cf7552310
-IN: 9865e6577b8811c937447194caf30ca9db318f3949a0a095a148fa0fe0fe7a0ef4efd7c04c7f0ac13206841ab8b30b6b1a55b1555da37a40d5abf1543d59f1331309c1ce5f2adb39259c152628dfbe10c0c5e81ab172c025f9b84abc2d996834
-HASH: e46838d2cbfe6c33
-
-KEY: 2f0b8714a8f0454f62db8dc4fa506a6b
-IN: 6c45eb8e88bf9e63db9d1558e381f4a6f831727d866daaff9d402ba1c3ec6911aa4c62dff1bfac2fb00a50be2c2d945b4c1cd10d1ab0d96d201a5e38d80a5ac2cbee6b2945091e91aa40ccff6f37656392758bbb7da5ce2ef3c933b1bf83f82201
-HASH: 433657c53e5fa081
-
-KEY: 85cf9b7e4bd9af87f8fff9d854fb894a
-IN: 0e808570f9bfa7fde488e3fedfd61905b232a2e6c512ff4659b6b03722d4d1a8ab0b757de0eb114c52620054364d51d6087417f2ecc73bfc78caa8dc5c3063722b8c7387f5cf1eea7369baf108092b1736f34f3c85a1a64caaf188753cc348ac0934
-HASH: 25272780593c358a
-
-KEY: 903764f0b9bcab23a0d1e7b0d8248711
-IN: e63b264edf7a3ab19e8f38ae22fb9e00ed7c80d25e3a9d76def3c3cc7975ed5a19aeb552a559da1cc6d6f4d7ad5ade44bd7bb57ad1910a469fc7082267ce9644e9d4e24f1ce5afe6cb3886172485df77b3e47dce36e549c62129788648c3738f836caf
-HASH: e995824b960f3012
-
-KEY: 902dea339b29a5a4c54c71ac3486b509
-IN: e33910d372dedb9a154cd8b1ffd4d98c58c4b8c93b5d7ff59a87a40730547ffb145a820aea56bca4f7c043c40aa2f5e0099b9a91683d2d2927febca53c727ecfd8dca77830012c0d33135a2d1a5665c013c4126acec9073cee84f429c2a1d57abff643aa
-HASH: 7a6d533f1d13f598
-
-KEY: d760372d5a2224bdd096ca9c317b315d
-IN: 868257422e5898c7de261682a088bf97a19bddba87650eaef967e4085d5145787dd8a2236859c67b1d96e64a81934210b63ee44adeb5cedae03cf3598496f7b77caa7f2a2f123778e3720229ee7eeef87837a0d5de7ced3baf40114d663bc0e576ce6cec70
-HASH: 05eeed619f335b0b
-
-KEY: d443db5067af5681f8b61a489400d3b3
-IN: 2f69ba36de9d7f2489ad092263f06e04b87179dbbdc3725a8478abf6930f19ebfd1a23823d41f851618f6d533ca56273e602918c27926cd77e7380de5af322bfa2704ec669ef402971bf606da799b85c8d51ea8e2f8b8df3e9e4ecd9cb03f9c1bc387fb69a02
-HASH: 3b54dfef0537f65a
-
-KEY: ff85c309dd953710c4c450015a92db7d
-IN: 3b4cc08fb998a83c0bcfda112957646e708a5e7f457c33a4e31fcfeba9fb5bc37be521bf351eb5ac1bf11144c3fd4837cf9d9728b02b75c51fef0342140e3a0d199fe0a67710a3a7131c6d3c33e0ca00259cab1b7cd1d6de7ef81e97dee7ecaba9e2073c08096f
-HASH: 0880d53fcd40525d
-
-KEY: 50703fdb1e055a0f72353a13de243741
-IN: e94047f4276abc898fa1e268b53ba5effecad744a315d93f1218a47725ac6512bbf0e418681cb15e6a98c3a82bb3fff9f64583ba39268a70a45d91f432baabf3f38335b1e9f52a4141bfaa1c55570ab0ecdfccd5d7cee5bbf692277849891625deb64a8850a477bc
-HASH: 758c1f2f92b68e49
-
-KEY: 2b022fdf4bb13146ba014e1f2abd73d3
-IN: af723b77807c45b4aaea43e9d79a9149fcd1fdc59849b1bffa88abf27c6a779fd8172f325909ae43e49c2a44d3991350a377d58643e5f6ca9d8743c7842d58cb8706814d783e2c7855b8d63e55164cbc1fd7a13bb963d6c5bf4be737a0159c1347a72b88c0c5115a4f
-HASH: 2275a762396e6942
-
-KEY: d6c230457b3494e373c113c4fbfc8fef
-IN: 7820e1b5f75780ae7e6360c6708ec8bb5f82f948e656deb214a29d7887162c67aa1dc547b9b1b878f870cb44b22c61f804c6a9bfefd38588253360532a558c4176c98b63872df3741a718d8487e9bf17d5da3ca9145cb76a9ace837fc9b1f3065b8a777e10fa95dcfbb3
-HASH: 53b8f6e69f5a89d7
-
-KEY: 17f7716d7d49fbabdf1583287dda7802
-IN: 96ab47e1979e30b418b98f8b0f86ee5f5a773b3ab1d062274a4335f2f8cec6a0586aeaae7dc4d0da82e52c3b4b670b0ccd724b0100af58ddc74899995bf000fc626490b19b8bbf4f6352879a0530e97f9bd2418104a1a27e7252df3a6b996b27f54503ef8a718a8123d580
-HASH: 8aedf4fc510a8fe7
-
-KEY: b12168e2e46319863bc595aa421cb4ba
-IN: 0ce0a170319192d56484fc847a8285abe28b3ba3f8aef58702df5bf50e4d0ad2320946d8256dbf2338c8c0a6a1da48496adf9941a4d38d74e0c8aa52dbb5c757e28fe3756421964a3e4eeb9fdecf2529d70216b00515d5869087b611ed0ca1607a650ed6a3707ec6bdfa4d5b
-HASH: 4d85e666f836edcd
-
-KEY: b05bd753656eae367d8f37b4907e4fa7
-IN: fa2a52f77554506d25e8847bfe613139565cedbce07110a7a5af53d024204af9e0bb08c8266616dfc1e21bd5c651de626e1303b08c0c90ab709613caf2713848ff1ba3310852a575d07e12c7691cb081157147a413e80d53a55248240eb5dc566b8dd67d616c5d4dd8199d5d69
-HASH: 885116def6316c20
-
-KEY: 0bb368a25169217504ce1bbce5820394
-IN: 34b4df9ec90072e91548fb40a35128349986b7e50e425d894664a270f919456abc031284b29b6bebd734e53d5241919a8dccb05c38c633fcbad53979d92eb7cfe111584155a4c352f06c29242178ed4d904ed739a04d4ebedd27b7043d79afa9b740df4ad58c5640da67eb121997
-HASH: fd965ec9c1ef4449
-
-KEY: fdaec5633f8d54859574792bcda87468
-IN: ed96b9cd567f55d1d9e087bd63abccd07baaacca8a6d375d2576f00b1e09b5d920200a74cb12e8721e550c80b8c61ac7a8e733e1a14ad0311c30afc83f5aa7a8cd9fca47aafa84babbef5f93a86eacb5d50f696b7a60f0ac48f9b57dcab2168ce26f6390ce3c091a947397db050ce5
-HASH: e92615340f232b12
-
-KEY: d529ce056cb054580b538c81752d63b5
-IN: 75677757aa8eec8e44411d238aac77fbf1158c1c9c3174b78eab4a70034c325e52cd1a275fc0a24c432f82a10b5920a922981dac43571500263c0bbfb95d08bf20acb526bc6a180e6519499cd571414f7bf69d704b476d62083d53049674c46fb616b028bd269e1b822daae40ae4ec31
-HASH: 9d6ee722d9af0ac1
-
-KEY: 28b413218335bcc2f9031dc3554b0585
-IN: e4ac05d0860d28f45b7dde35028dfa67c25c8364545bf27a016228c4f1b5cbdacc418806d229d1fd2d30570fdb1304e38c7443c02d2e55ddd20718dd09d0b3a667df71c2040f079c9798a7f5ca7b09186df6c44edf4740433ec17873180038f7c5e0d4220d3755e264b0543ad5a5c1d537
-HASH: 7d6d8be4026abd19
-
-KEY: ab31c8820d2d02f63dc3ac5acac3828b
-IN: dae9931233787d476b472cb8e7ca4f86c2f8b9cdc38f49a50857f99e4e64b89d451e1bc8e5afacae36579d51b8bf67a4be36a65f9b464a150c1fc012c115bec08e45bea214b80ad39e1a705cb9b0b759901133d6619812ded8abf7848a67758f483aacd11297315dc190746a44e9ed56708b
-HASH: c9cd54ada0139758
-
-KEY: 145d3281341d26c75cbffbaab06d783a
-IN: 9859eb836c49cb41beb29eb493988b459f5d0b22a4dac9e64c34f93a71a700612cd568f76b84cf71966edfebaf6b27ef52524208e4905b83f8d52e879618180101c1ea0e326a44bb4d59539f779a0157af835c5bd7009882f16bb2aa2c87d49b6db49e996390a3ace578794c4d0f1802dc0a82
-HASH: 219b0dfe6c21ff2a
-
-KEY: db21409aca53c06e34752eaf651ae7ec
-IN: 962ec5dbe61976d91eca580b50d3b21c478bb8139da94be0a90e68f89b26b8b28d3484cb938791cf729a269c54af470e528a72ac9122ea10c08e836f8f32f1c1bbcf10716ef243d2abbe31bbf52dfd6c6884b81d6c48f18f087842b055432e5f67de978a2e7bdcd645dec43feb33f2be7fc8bb5d
-HASH: b31faaa12c80d2b3
-
-KEY: 0a92a6dce6418f53cd3823b9a40c5183
-IN: d1f4d53bd0409a3127ef19482d47964197bc061bc779b32ca5ca6f546c18180dfabd32b5a8519f868ac3ab67cd72c3bfea3ad96f5e40fc09a64046ff818928ef87ed043d0a0994c1adb8b0bdf446188b98b20dc65ada689654c5fcf8fe26d66baba8c02d8b39ee2be9217c09a62a4fce8236eda6f7
-HASH: 3e9be4b24cd3f47f
-
-KEY: 868dfe7c81ff02bded7c42a242d4c1bd
-IN: dea44a7466a4910b89fe6abcd824e65603a17ac436890fecbf4f6bc6809be8b13c0a6d593840d48ac59de059787dab1c1ca09a6834114cbf7ff2686a71ec12921aff5e13e9cd80c77ba7adbd361e72429c2b46eccbe27b25068cf457f865bd0149da14383317bcf8fbf949e36eabc7f8dde08c5483a4
-HASH: a0b3afbcb9412ad0
-
-KEY: bc662a2870b8baf74a1153e5d24b4832
-IN: 503401e821133e2ec69942d28503993e0337ac43502466f788fde4821e5bb2be6b0aa80a6886eb10dceec3225762a1357992b740d5ada6f6acb26761c57532599c66c9b55812ced61bc0293781f600fa1b2d211a7556702f41203b7824654207894feb9e2f744e03f5d79682ba4570756050e42eecb3e0
-HASH: 285affa883d1597e
-
-KEY: a51217e323aaa13dc0debaa2d26a7141
-IN: 52c40d6b8dfd5fc99158481dd889643452c533643534298382d2f3d159a7c0f019cb614d8773299451ff87520d9680e5f283e9e9a2fe9a8a7b5e4bda6b94e578b97948eb9bd868ac3c33ba79df325c141eb83ad6be7c1b5c9001d59f88a4bb2208ac62dace5922b6df16f09092b48d432bcdd79b4eb484cc
-HASH: 5aae64a7fcaf3072
-
-KEY: 89c8b8541be48278ee4cafed6616a581
-IN: 86a7c752d913e379429724ff0358994fb8ccc6605573437ed5742fd1b2934c6943259c2eefc5000f5292901a154e856df3c8b7fdf370bc72ffae5957f104fb3b07ed448def575680bc637e3804ce9cca9ce1d85fb79b33e8e4c45f1f974d0613d40c63734b9c927fd0e6e16bb4d288204bb759b199269fa7cf
-HASH: 339b0843b05f2652
-
-KEY: e8b664ce32d35f060e5a015caa287b7f
-IN: c9d496f2e1c2141154bfeb0c4a4347fa7fa002ab2573c634b2c2a376fd270c7d45d2fd6078e4d997aed34bd4dbfb308e2c1a14d07f58e1363c3fc4bf32adf4af4a6d1bcb79e4c5c3db2ed2c68fd2229b6b5fc831d7a2cce989d2ef8dce13f9e076aeabb5a30c7ae72f4e98874f885cdb52518e71a020e0bfb7c9
-HASH: 254a78254aa531f7
-
-KEY: 1ce06b6d7f0c15734448e53a4fa52fb3
-IN: fda649ace37b9fe4f4d572d8b1b74e28ba13db46f6b0f42ba9ac940d379d6d50623fc1ef7545763651818347ce38a3d86828148b14ef090dea626c5c3d1379341704f719ffbb234e423b0024ee635ccd2ee50c501d8689f84c929d689745a05bba54f99a23fb248366ab05e31bfbc18be87110d419ac43834476f2
-HASH: e5d2f7f9315945d9
-
-KEY: 84c2f71ddfa145332dabe73460c7e03d
-IN: a8a162a8b39975a998568ede08dac2c98a7da7021711e159356c13cd39f5080fbfe7f9f2ffd75174ed6bcd82fe0cb158a83d10bd64639f0c6a10335635c4aab34bc0986b898b9b4dbc013fa456a34374aee1a0d437f1de697f5fd2b87c9ad39017434d66761c0f26e81e9c99a9dd57f390f2488ebbfe7d1666cfda65
-HASH: 7c416c3bb889ff8b
-
-KEY: 63ab163cdeda549ba268896b9a677d89
-IN: 64be9cb0aadb6544d4401ba45a3d2b7d766d7d67e09bb2f141e743fa72b8dd14d7427fa2ec37ca6dc5c32861962c7744b1afeea8f28f878420cf67268281ab9ad6dcf0aacdbb52a6983cb91ebfafd294aefce90c6f3628376d7afaf4fd5818602328e215cf1aa3c9510ce53f42dc04288accde985e90224260e318d589
-HASH: 21cb18940175042b
-
-KEY: 2f8057e7a18f356d187ac98e43127515
-IN: f5c76f7b6d6cf30342c1f4673ac063091c9c02862238549255bfc2530f743c69cf4943a9d4035fa1912826673b3c9892a489e0afc011abc45bb5a251f2c80ec97962f366376841939e9997637ee1a2dc0655e9e8a1d262b046cc4c0eccb981ffb46d494d5537cdb202b840601380212f67e728cf9c3867cbc53c0a825f61
-HASH: 843747a123971b2c
-
-KEY: 2e764495a9e9d8ce7dce2a634a374423
-IN: 7c7b09631d3e04123eed9efc8ffa34f3182e40ef700f2f0989627d667719a7004a4f0be4fd987400ee12216dd7ce4b57b889b8d5747e5c0c00dfd4eb9011bcd848070ad0d6dee431c50caf613125f9165ad05c69b4859f7ef55869892385cf2fe40dd3c4051a056980805e816e86e28493f7bfd16218e523b2c72ae478d0b8
-HASH: 65fb43b58c02946d
-
-KEY: 1f2aabaf8e9f8a8a428a564020d44b46
-IN: a2af9818cad478d6384f541cd1ed9dfb764f6953c641a6ce40ba2adcdca047eba021f5593b48d18bcbd6581f776614dfd3c6765fd22fc6e76baf6464d377b1b6607dc3329475c999f8f6683b22ab7f0ba1c8d0867656a0cb3840cc80c543acc598a5df3f14dd3d7de2554c837fbcbdeae84529170e5927c5a737c11b92d36470
-HASH: 256afb4a3c5c11bc
-
-KEY: 6613048242a353b7a908c3c1d137a289
-IN: cb24d4c11dbc1adc4f4b65a04b1e9ad37b5257d314c091b2ef870556cfdebb4ac2e4c1348ab5ba2047ff9d62e9b78d6b8a29858dd105549d943d2fbe4c96c78c07b864756a9445a0235cdec30c191e86912d83ee0bd1fa094431fe7cca2ae73e2b611b11f67883812914524f5872011d52514b340c6ff107ae2bd65a1792cd9875
-HASH: 6bc58dc448c8bfec
-
-KEY: a8496ceffa962e684541790ea6a43b6b
-IN: 96c08d385c2eb59b806b9ce99b82f28abbe3ee3dcd481073ce17301029454c7ddc303f84a019c99ba45b339e4f7a25852508c364fd6d6fd507d9e1d77a7e9f71f4df72ecf9d197a31d40b379c576a0dce84c7121c368cf8da052782059ad80f47b0b8cdc6e6c986aba78b6fe8171d830dd4540aa95e8b122961d9191182ff57453a7
-HASH: 56771e9dec77ba8a
-
-KEY: c97c5bcf612aad1b71528b6af8f5a160
-IN: 8761e3d8f78ed3f66ddf9733dc8db84e7c1a0c268e91b6c071d4570272d9bf6d40c76752a745b304ae09506a8b751b76663dc85e48fc52df8df8aa978d082ef1a527d55d3cabd2007eda751dd2589bc4d86b69ce8ec9d0e790ea486168a0fb621861c9c9d4aa76fd67217a9c1fc9eb329160208616d5f491c46fb5159a68bf376df2e1
-HASH: 3e3d191e902ffbfe
-
-KEY: 0300b9d764049d7976f2c54ac2b0ddf8
-IN: a95265b3049332c4de454f08c0ad3c2eddc62b01b6aa111a2900ebb4ab126a6739157d84895e96214cb5353653f880bcd04a6410277991baf42fe34aaf131c3c84a83b6c29899180b1f67b76d7b327a1816c4236ee9d6306fb986bedd21570ebf9efa8e676cb723f91ee14857c186c80725f35d9ad0da73b1e07a1b935c29fe08e6af0cc
-HASH: bf8fdf47f81bbb66
-
-KEY: f93caa15e37c8785f1f4d06a7a318f6f
-IN: 06c1ffceef712559ccf22ff74eb33df2dc03230886b3b76f54c8dad4a6129e5472e4e9491d2ca5fdaa9be2c5fcafe80f957b99d3e98537e67bb6742901fd442e06fa4cfc906f46dca20182f07fa6f92ac75ef53562468288eba37d6e449026c26f08cf49333e7056f9eb29694bb68b4cd2375e409c8b470a77ea9e207c10578cbb1069da88
-HASH: d8ef7ea4f58a0dc7
-
-KEY: 127bc3d3828482fd62dc36ec9a558edd
-IN: 98578efde5a93aeb470503b3400c28c513530c7cef901d7c335b30edeaab40b6cfe429d6ddbf4b32701bb5924c82fd8c683d77bb41ff056e3f325c107493b00b4cf5288d2b364027713aa4f0bf67b77356ca36b5a77f1ddce1ef04b8b7569ea816647849e6eda1d51073a076a9c7eb5b21a3f392b35d1930d0a90de0a28e5e14d4b90f054e16
-HASH: 2fd51c80624ffa26
-
-KEY: 938dbdca5b04ce705fcfa14f2829430b
-IN: 77b7e8762402e4feb7bbb5c68b44003ebefad025c844f62feebdd82b0f221e1efb92bf831e6d0bac80c97234a4f59593bf209f2169a410935c52215928c56d6ebb6cd2ea78b3e497feca2f90f9053607626fd8572f08158a2596247330ee57f58f57eaced51682848f7a979cf95c65b84e9b8d0daf8aa0987c51eaf5b887339c70f00099e65eab
-HASH: faecf6c8febda350
-
-KEY: 8aa112a940a8855fbaa384623b949a22
-IN: 77be78dab861a36e7f7511d0b10866b9b04da12c4d4ffb6126081e8ec26ddbf41bb72f883a1136bc0adec7d6b848472a0037316515a70ce899e3636cfcbb548799371a52dc68551c4636f9aaf358f294aa1ead08ef78c21afa2f5b93fbee8d92ca2829ef1fa1396cd6cab03ed18d85a6250fabfc7cd538afaf2a014ffef82a63646a0e2025db9c89
-HASH: fadfb08f99d573ed
-
-KEY: 3219a0421a7369f055c9d5f7766eb1c2
-IN: db47f97f5d4d49aee4e5145172818736158676bc1bf7bc075bf76aa97af680ef81d2e2a1fab5fa83bf4cdf88bd7aa7610483150ef7046414772157921d0d01a495f35c1f262f4679990a1dfb4839c3085cf716fe040216febbb974ae49650fc7e9b7c30e354bde856888beb4bcaf8d4b14aa4bce08ebdd742f3074aaa6e742c4864d48c94e5e6574e0
-HASH: 0034c746323cf711
-
-KEY: 7197a414a48b2ce83a992351965bd6c5
-IN: 1be7cbb6274e2b1e6b588c6d70fd1ef929bd9ab0649003a69fd7cadd2b9b9917cbc89a069ec9944455e944b4c1bb520bdb97740d9174e6f9eed4fca24a7253ebbf8cfb15e56a352eff8fda4b0823a6b52ea28f214af0caf568c750cb43c2f39219a57b930cf8f5151543194b0f8e68c78ad7a50b08b642333b6f3b674c4ae4879c8d3ed5c9ba7dc16455
-HASH: 89daef38d2d0b92b
-
-KEY: 57e780c523aee814bbf98f6359a23caa
-IN: 44908bdfa0d5fd1f5ba1bf253b20c16c3e2c5834da8e8fc7eeadd21835efcf45ab6d42447bee2530db303bd6821f1b1f1010afb192fe818574e292ac430ed5b6d712b9bccbd235ccef4dc618dc7192f4b80de5ce5088ec3aed940b80c84efd4c6f31ab9053da0f84e39dc9718401c0231f9e13ecfe4f4b731c8b24c6a8f9a9bfda9ececc2eec200ff742d0
-HASH: 5ae9f9dc3920c206
-
-KEY: b0d51d3ade35641688f258adea74e9d1
-IN: a522a571bdb8904928f1c4e79aa00e791cab00e426d94d0bfac5a9af48f340531fc0c256aa799240befbce757f314ff9a38ad1e994431e11b771687c06e0a345085a5bc3f95a76af6600f217cb66ff85f60b39c120a86ba012e86d43811347ff37b61908e65542a102747daca5d3558118d3ce2ca2dad1c38131df27e42fccbcfee78eed2f87f2bb250159e5
-HASH: 4bc688bb42425151
-
-KEY: 49980eb295bb6997555a0504ba4754f5
-IN: 31e9b2ac04a1cbaf9f7c03cf2d70f90f683bbc0eb2ddcddedea917d14414f7e90fa09be64ac18492e2d90d6977675976cd5abf0e0556284a5edd773d6e4af29b326cd2be4e16c7293ab0af09fccb9d16701e6db5a81d42ea0575531c51cb5ea076b7c957a94401da78d43076515343db0816fa20c38ec5d35413924c70fa0157b280b02dbf982614984427d950
-HASH: 1d70036369da4147
-
-KEY: 67a590f4b8c902865a25e380a81cd630
-IN: 35423f98b55467adf90e372f516483fc3ef1d72a001e190c7a29545c9c993267be0757fca45ba1495f65218702a5f617ec8237710aaf030dc9264afa9c7da8ccc16f2c6775ba1c65a1a91f4eaa4ff035508fcd4cae9faf3223e97f3d84ff0897025a25c687d58b2876395647d7489d1fd714688f64ff47f97720f4ec5b0becedecb3da35949b40d9bfedc35dba7a
-HASH: 92b8f8135b61c24e
-
-KEY: 5542c4636e7c3067df8a15c873bbce77
-IN: be24fea7363b5f0a72a850c79d709e3a990b416082c4c33fbb0b09c97649fa1c56d15abaf14cc3c2c34d2a9cfa30e67988b697b7d3362cb07c460555ebf1f5e1c03eb905c8d0262880aebaca524bb7edaf79bd3aaf888be6d11e511d7bf6db5b89b0a2d2c1e42baece57345055b6de9eb67c2befe8ced5b4e2184d46342f3f2ff24bb38899ab974d71d2548f50d21d
-HASH: 5236a88232eb5ab1
-
-KEY: 2147fb23cfb2f82fb93cfe405cc89f22
-IN: a65cf5b4dc2eb1973009838bb3815749f4f3644a43057ddfd61edd942c4192ede85787193bf707d6bad890ace02c94b4ee2348a159e61172305eccf50e7cf8559cff42fbaf7a100c234df85422d6d9c0b8699f25b58e991a1be64d537566c602fbe54980398c238a2e87425eb7c74adc6d2f76162412b358978ced512bf26e7507d671c393729a9ac3a07c7436dc9cba
-HASH: 2da3b7beed2821f4
-
-KEY: d429971af1d1f3ddc043dd56bea43ecc
-IN: 3a28e01bb245cb6435025bef500ddf08593d7b3c7a8be01651be6363dce1e7a3a59f49c0f9403b072664700e74f4599b92f21d57886d97013a24d1c6a49db7de84176be8eda33a373f347ea8664aab786b337ac1d88148bdb4dc456a92b2a36621dabf7107e39e4b499e931bdcd21a1949f0e9eedb716fa94752d2a565592523960700187aed35e490f45da2d7ba382258
-HASH: 838d68d92d6af47e
-
-KEY: fed60ab1233c909413a7f8de9a641c8e
-IN: d46c4556b5031479e01d40cdeae3adcd14fc6ea6e1515ce7c976ad6e62a97df03b786ff0e7a66604de5d935256e550853609aa6498af380d2ac609723f949f01662240c3925eeffd16793c1b589e25cbe6ba00bf437e4ac6c56d96db33b17bf54530480588adcb14d8b8eebf1e6a5dc796907239bca7fa2f43e1c51ceffbde22a61eed45aca9ec48f7ae11ea798c16b903ce
-HASH: 4cbc3c663ef52c50
-
-KEY: 2d2231ab61372d4b93421dddb351467a
-IN: cf9d2b12f0d61a9ed081b308fbac0ed639285ce379d6c37aa4acb97a675a13bd2a0acab0ca4f06e557aa670f7cf2208cd5e37981f4c09dd37ed4677cf8d2206f0b09aa6185d152263b8636ab1f439c39d33ff2e6ff433e3d19231f07853dc2b762f527be9eb3640af960743f2500731b7f4593bc4c6a322434dccbe808aab7f0936a1fde0c10d8aa0c856d782ffeacc3e2e768
-HASH: 832d6dbe4d2ec17e
-
-KEY: bb1310e68d324c65d8d1269d60acd39d
-IN: 8a8091da5940bf6ba16eef2ea3cc5d4728128e0684fd453f6527d330abc2ca8374004f1f10a54bfa4be8b39d4f77b6c89d481e0fee2604d402c1593dfb930e7da4d314c70d4312dc2051cd05f16680b5a5748f81a1a448fe4e51b9184e6515f3dc61a2ed6d3866d8aef1df5610c41a3515420c6d5ffa9a89f9b64a8a73f0275ac63d5c09e60e3446ee888869e42a8ba3b849dfb6
-HASH: 342bc4c512c02b30
-
-KEY: 20d58e0da885103776f5147b19bb948c
-IN: 02b2b75f81589f8948471cf477f22765729a7b75368e3955662cc3938e05f0c5a33ef9e99877a5bdf2ad758165d5ba9b3e6646eb0e53a07aae5abaf73654747a9163038ab35c1303e28320d26ef8aa56df8f3d83c10863c5364acbb8d4a11b8a881524876e7eedfe087a76d19ccb4af14ead8390327b5b878f93758a665fd330d7923c9e2d56a20fc8896bfe5a3533df613ea95717
-HASH: 2fe22c1ba3676005
-
-KEY: 2ec216c155f5e259a96fdcdb37f40028
-IN: fe8d46bdcfdb671a2eaedffea8c9a454a5556c41b0cc25d688ef101117707c14f9d1c1410c15e895bbd90170d3a2b910af074b40d8eb426c588a2121dc2d952a200c364a31dd919d7792645ac3e1534ca5cbceac7a95eeca04b5cffbac9b9f3b58e6a60d9d1f1bc7a961975b8f52532fa7ec0a9c7250cc383f6b772be31bfe86accb6d2cc9a32ae42b80dfd723a401ea668774d41086
-HASH: c0c1c1dd9b39ca84
-
-KEY: c43d26f4654e21ef41fa72e94bd6d887
-IN: 8425382252dacdba8ec398cc247232f3fae06c2efe5b19401c4671f2664bb4a97e5987e31ae32ee0004ec4c8d0abf10c35bff9e6052d490f1578054ceee87f9eb7d14e0511cc65bff05bff59893781b8a81d58ad072d8e84fb8295210e0ab19cb4b2acaf63e6fbe79b74bcdf569e35aa14c66897d98a9b548e65ddbf5e50f3360666bf3099b8bff1d7ffb9a14bf6ecd12227c504fd0b68
-HASH: 2333bacf5cfe1865
-
-KEY: 9b564f82baa0817b7d29c809f724f776
-IN: 1d3b1a79ae01ca377affeb064b11bcc87499c9b1d1ed9b953c80fd54ee703117705e673ed099d4578cb46f717bca43847c6e98c3784dd69a5298b4e93739d5e8f2c216cf0added49d4a0d9ffa38bfa9558a71b5c43edf6868b295cc020ca0bcaccabe0ac3f4d9d1c6af44e26d8fda776665d2fe26ef1f3b45fe25b4fa2bb6b14632673694f76bc83faa20636f11be7f20fa349006f5d6e4c
-HASH: 911924aacd551b6b
-
-KEY: a52a368bf2f969a1a37d793ed929111c
-IN: af15d675299a6b3a5088ba60d36494a5445d8d3eecf2225290cfbef8e86b1fb333db105d24f10eeb9b132a2bb9f5aa754d593a1bf96995a3e5ad900d9b6b2e202ed87777238ec6a717ff2323c9df32845bbe0e89a1f71e22a1b603929782e3f70e09de5e18d47f07ff481f8ef04b0e6e2c4fe6f3d76f24123083b25e15fca632d83c66fb474d649815d75139dee141c96942b4b9940d10e3fb
-HASH: a3f506fe42dbdeea
-
-KEY: 6a7f1c676caba982cdd659f531b20c07
-IN: d3a37b3f01de3a0497cf16531f4887c2e62afe87b80859329c24f76ebd3cbb1f4ddd1d9960b19308dde72ea1c6bb5b5884a9acd93c5041986fd7ba8e8717c66f675141db28098523e1af51d6b31ea372c8a7eecd9a9bd7597ec7c270ff5dc04851dade76a6439aa7b5a1a4257413f6996ce2f4093cc70aa26b0418749808f11460f02ca76076e558664115fd627eeff45241e11842f406a56f8f
-HASH: 8ea572557b7fc5ee
-
-KEY: 045745caf81790221ff9f8acb4bba8f0
-IN: 260d7c94a27aa378db8d6a2a9da9d477d4880631d5b1741810f8b56db31aa1ad16d7c6f956f4460a2b1d99405c1fd51fb6749dd87cbd0df18ac4b6daeb46572e26a5bcd5e5db1b8e8b59ccc78883ca734320b0835275fd9a8bfa35f7ecca13025b603369e449e2c1f35a506f72b24b021aff6ffed29abd07478b5af22223a889017ec4db768f1ac65d6bd0618bb5b5af4721ce797626e12e0b600a
-HASH: 832ec0dcece0b555
-
-KEY: 72bf12388602a326c7cc1c9939495847
-IN: d3fb27b0d7a06d49c5fe54f085bedd948bca58314854dae941bdfeca2ff34d17d8df38faea4945795e7527bca957585e0f461e6f08ed8575693490f047edc22d04e4a3c77a9447179b2885dfc22f602da9fa0f17ed17f83ee422bb6dd72a7eba32a85017a275dec1174dee0fb88264a65761a812d74ad9375c415d843a9ac00b7c55d8afa324ac9f29cde5c3cfb73174d95671e7742917bcf1a40318
-HASH: b4f1eb30f213d07a
-
-KEY: b01c6a8a5c49380e00bc20c6c506ad00
-IN: 127d4caa813734f023cb302861fece4f776a46a1732fb0c9131c311ff977935451cb5efa232c4bdb7cf7723f4b9aed17231444131cf97c97dd0ca77f4f7ca88663d17ed60d0937fc0361383c3d7ee9fcac18811d36b7e49b2ea6e6c36bab906a11a25ef73b4a4417f716945dad3b6f18e25ae62511d5d2ec760d3deb77b7b6a9b1b5cbc855841c883c598dbb407a546b999fc31c26ce6e94f8a9a16c47
-HASH: 0931c8aab2db6545
-
-KEY: c495ae680fcbc9cd7759e3e14ff143a3
-IN: 0c1ce9df5a85811cbc326c0746fd6ff0d1f501746fe0c2c2f18312c8c8625df7b57e0333972fd0988bfb5dc827a72321391f6c4cae82007b0402dfe4d47e42f8677d2f134044a4e12375e185d02008e4fe81c6558afec5de8844e7c4eb64922b2ff968cc3f58d0a90666e4f840185ec72f0b52514cad7ac2f8087551f05a9753b9a52d8c8bac82d598e145313eafcd44570a170ccad306b0c146296b8ceb
-HASH: 2a93ef0059f5c80c
-
-KEY: 926bf63e73343bee34936da2401499fd
-IN: 8194c53c998266d9d0c158bba46f4849b399e72b786131cec217d2da503bd8d35a5625cfe92752069d5e4f738669bf1c26029398397609bd2d5a85ee6bbd3a244630bb5ee6986680296db1aa64d1d7b9d35629d239bf31bdc3a4a3984b4e0904b034c746c8e4d6d2a49cc6597aa0357df845a00a37c924deb62b77f3a15389c3188de0bda3623168607b3ea827d62b53453df4d54ea3f2a4b6f017a4959901
-HASH: 98be298ca4415fd8
-
-KEY: de5c7a655882d27c37ca279616de0b33
-IN: e93570ef6bf14f46669bbb6fbcacf70462b7a71aeb777966a5722b3dc1432362f84b952627a0f32d6fa6be2e1dab80eacdf5dfadf55db54c2e8c93a38991fd7d728f3427b6de778e12ac63e1a914f68e7841b01c322ce2f16edd00c74b828eeeda4a2cf7367e668501fac1f3308e3d2b51555c62622275c48f0aca93d8cc8756ed9bf936ca17b6821a98a8ef21934a7944bae99362d0fca7f0c2f83e0afcd554
-HASH: 562d46195b277315
-
-KEY: d666f70660c76d1aa3cbf1a0956fbf4a
-IN: db25c93ba0b4101123ba569bbd02b72271f9cd53e1ce0a278196e2577373ef4d8a6101620e80059178c246549a0ba044de308892f57f10364833fbe4217d3075b8c1cae540118fcf1ba8fefcb8ea62644461b9e59ed12aff0e097614e111226e42615ea3bcf5f80b1f1eeb5335d156beb0dab7877a646199c55a36dc53bc4b44276b5e698df21075d4b49ddd50d0deb12d953b5f90432d5afaad25833baf978947
-HASH: c34b39849d9c589d
-
-KEY: 7a5fa32e27e1f28d306844fb734fc755
-IN: 10ecc8fdbf72e80f52dc49e927a9303c890c0b31173a96ba10e3afcaebf25167a251fc824b8699d665dddc8230b960ed6431ef13778d4e5f940db1418d794e012c6b9b351d046948faed0198e2c1603d32f33cfb43f67599a850bc7579fea83cda310a73e448178c80892b66e13fa136d0c99bd2f190dee75a8e1cb4c82ee7515993519bdd4ff3050c5325fa0d4c80534f93a432e7dc3ce04c32eb60f9ec3eccc85d
-HASH: cc4f9f646046b152
-
-KEY: e0689b5340183fb889927912068fa4fc
-IN: 0824240ab7fbff4fcfffcf200d9bffd34d7c48261be53c7a31db69ba7234808fe3db7bb6eedb30519336cd08c8bb2971a1be8e60924146eb399c31166c0ffe3033df9c52ecdb4d03c73e3cffead68159f41078557716a5aec441193ffdb700512ca60e84b7e366438d55456dbbcbe7d3ee3c579a3e76e64890976f92883e050b54dbcf3d3baf064a4e8282c3ebad12fac36220c8a132994572121bc0581cba69a727ea
-HASH: 0811c1fd2047ada5
-
-KEY: 8da46e363894fd77718a5ffe68c6d857
-IN: 3b956f2042d2b790ca3119286099ef78778248eedb2d12f70a3e26381d738a8369a4828b8e361e5b4deef28e7acebcd4bfa231548b0d94cb910ebf819c605ef37d93de7465672daffb2cd923a2e812b20a34569aee20ed20cea5f5f5c32b9cc9f09fafd58c18a05e9822ebfe21d461bc29b2017a199ff0dddf06880e385fac6505f91117db236edcb086b381f61c33d5af6d2ffb9cc5382a7cc77a7579a6d8456fbcf7eb
-HASH: 23263a4fca4dc1cb
-
-KEY: 3a0ab8c2c4de1229d5bfd41d75978052
-IN: 7d3ce1f1eb5fe650d815124a0f3a2d07220ac9bd487367c6e836b669709c9908ac0de2caa7b2e793ae32eece0e413f2f7dfec4ca7edfe7af975bc76fa84a4c9ff21da673de4d1f3c0c0b594ec0b88ad80d7f85e6aaff2b716e236a551e26cb20f3272ef4a60d46827ced1e5c1a4fefcd315c34d7611d985f2f6127ab0c69499e17de7a99fd9788c025a9991c6a1d79377ecfca18f72853192dd407a2344a51893cfcbc42b7
-HASH: 8221bf0da6c9d0d3
-
-KEY: 38efa39401d4d49225b67bd14f103ebd
-IN: 4c16db14037807b7ab4d46c057234d05be8970ce094b5be27a2346394e77e777b66e623633dfce3dfd941f8effb955e41fcbe15c8c934a684f2fdedc270516950dcfb16a99208335fdc69d913e189b04e4c60f71cc714f79a9523840f9498bf419862108c2285688db934605921d2c3b04a8db17cee417b8ea8d4cfc2bd67380a415bfdc2cac0c071845d7e6e4b967275fb4e9ea3156ab23db809cc986a0cdce5b09c12d827b
-HASH: 4f1e74abfdb697da
-
-KEY: fcfea01b83e67edf2ac9deabf7b30cdd
-IN: 105e560add4f7bf41757314d320a0741cf5659e45426fd73af9327b7408ec22fefa5aea59f43fbe0ec4a2fd0029d9779a19beaa10198084aa6c1c392a3d25518e9f77f83c7c780a129d87f06358dc90601f96fd25aacefe3f08612a98455e5ef9def288aa840a53d062d9e32d6729404fbcc48acf54784a715c13181804ee8ee55b68e0d5a43daf90fbbc36b22e786d895d6ca5b0a1241bef424052fa29a060b861c344e68c234
-HASH: 457fb4e835a8fd94
-
-KEY: d8d385fb07052df7511d0ac37d760a64
-IN: 88458bbc3d96c209e981e3b3e7845b529f373b80fecf8d4f3a5e6db3ee2fba920067733939598454548183bb425523bbf4cf9abb3942ab09a754f760b381b7105d2a31aa76210715f3e6bc6c79f62e754dfefcb0db512ca02397c2f00a169706a5e602ed64a62e307ef506e249b26afa2bf49fb4af6cd8b821a03469b0ddc4e054c6d5368bd2d69545dcb7b1df7fabda3edaa8c8c2ba9cfa9d126bca2defffc67b23c910003e05bb
-HASH: 2b23830e90785de3
-
-KEY: 278c8962711f0aded8a253e4b8ee6c0a
-IN: d10cbfbbd89f11c12183799340af2ea59c6f83465e864736dbabfe83d53fad727d0b432172cf68fea351f69261d63cde5753f8ce15afcb728e60f2d6f85e02e8089a5f6e230595f0664dc1472bcce53abdd0565744b6c58f3c874365a76efeb043804df302dcba2d7550834a443279889673f1f1b305a27da243ddacbb3e6fb60451121a7ff17301d66ee4081b09bcd50d94eaa1a087905085fb84ee6df10224f953f2356e729e53bf
-HASH: 2e6f8d56bc4ffa70
-
-KEY: 12a1dc868d6221dc01ce0b91a9e3292b
-IN: 49ef1e9f72c7099589233022f6f88ddfd33eb9b078987d92564b014312613be083e108eddfac4a202904056e6eccce225cf259c35bd2e07b23e68240b37503c5c93e1bc497685cc82986fed06c8ed474cd4fcc59630ac1c5dab3bd5096264468910f741622ee6a42c75b5bf899e64a0bead1e68d44f55b633bff935bea0ed7f9c39d46c1296ea9c690f341b30a482bc04c87520a64b6cf2c55110e9d018288bb162612ef0a55f8bce78c
-HASH: c15f435c7372dfda
-
-KEY: 04cf89ae0df7e320e9adaa73df59a141
-IN: ae5d6ce0da399f5b9fd2ba3ef2ebfb8f039e41cf723eac3e52fc599b07e952fcc9dbbba12ffd22c6ac6c7135a80ac0812f6b09457806cc5c02fa6250cfd65dbf7987ef56c180ec5c2f6312f98e9a72369156329abd461845e9b02a05575f07a08fa3f462dd0cb618f752a4f0977eca76da4f46cb22987c2e6854c9828ad7cd03863b0e3020ec6737fbb48c354a0bb8214df8d1172f42744d5d3878a27acb63dc6a004a1eec25074149424e
-HASH: 511dc81ec62424dc
-
-KEY: 16ecb48798f97a2c4a8ebe5fe9b1b375
-IN: a4a59d310cdf2c1b4acacfb9e63d2e1f1244c4cb48c665d72c79cd70453680f98f2753b1c5a5a3323b1d33566ef0ebdb80d0df3e5120c6152bbf4abd3572a80d98e583a55cd78634b555886234776e32847f8d39e39819d2dbc9b7c4e301cebd02b12559192dad2e06a5cd0a79823e46ef80f8e645e1b4f9b3803cdb6ba8f8e09c4aa9672931bff14c558a78f1309a006d2f64cba68537e4aee3002d5a9ce6a8a23503174d98e508773826c4
-HASH: 080bbaaddc2f3aca
-
-KEY: a9b3eb1c9fed71274a5cc15e1175e68e
-IN: f1bec245f19516cfad98d7262d1a3b478fc82d78df05739cf65f5e6d9ba7c986f3efc3b04c947ed2f0fbac09d2518dbce61526e9e1701e04379245d178819b1da0376d2d08f38c666434a07acb7918696eb8bd81606c8114d348add06f385c1665a783aa0b33d443e1d7277fda197165da4a905ad9e1b5468ca03fd818f0de7414a5a36e96ab244f61eae53ae9c11755d9bf751cf2e78c902377270354b23dd6241fc56128d058374b2090707c
-HASH: 4ccdc25aec4ba25b
-
-KEY: cadece55ade80e5af3978ba47a67dcc5
-IN: 1fe9e5710d3c0c773d6b8859177e867bf08170e6682939f9817a55ad53519627a59d5a9acb9fe2111db912cb0697f6452b33d478702f6bf03bc92465d7f1ef1c3a7517f791c9b80afa76cdeb5b35dc7c5a281ee75a10e9b27a350bfa7a48fef3033fa1bbe3f2601a3b9da372df9233a0ea05415d2a5289345a1770aa71f6afeac2b848d164f63e4ab6437669615e46d27102d8528d70fc76d61c2e9cdd2468311e4cf32eff087aa79252c43deffd
-HASH: f1e25541eebd5ab8
-
-KEY: 84a27a58c3b295d938ab319eaea838e9
-IN: 2f160c9df2cfb78e48e40097671d58f5d7091b789754da01fdd86e3dfeae138151a618197e7c171f29173e529a0750dbbae1331ed480d116190453b1ea8fd1fe100a6333865adba4b2bc1a54f1fc74e1d0453e7de1254802db15bc0c33faf00aeefb328f3b28bbe80b21b71c9982a9074563e3a4c23082128f3852301833cb68946b51ab5d27b8a7c92e4e4d79938e1a92253efc411e0744a4fd1d4e8cb8d171a154753a1a10bedcd310f0115bfa42
-HASH: 9c32983911d68018
-
-KEY: 66babb962005f1759419a54c3858f983
-IN: e280ef4695c8ba99cb645c0625dbe09222f3c010aa29569b54deff561ef13e59c3e9a8f5f76e93146c1ba6b99ac541520dea5adb84a23395c281a6b31c18fa9019245f024054ab9f6c0496228186648cf72ba6b01249028092b2ae655c80abce501c96b2274d70648ce2eae53ee08d60f5cf719ff96ad3379654c8575978f14b381c2c8da88a2fad32372bbc469909cd390bb3dff628822aaee61d17ff04f16e819e10b2fcf5bee6029d6b1da03f6d66
-HASH: cc54beb20f2d80b2
-
-KEY: dc36bfedadf2e697f77984e0e9b17588
-IN: 97743e1750aed90f037cb783a884de3826b789ca544cfcd8c5b76e35f895d75f37f9c15c4b99ae656cc8abe6019379f76002359726e3b144e24bff09665e6c24cec3811247a2ba6dad10d0fa2f7ae0a63863ef20e773ede65f5483460945696d4594af5090499e44503e74cba836970f2bba2407b6da628da8153334a320f272eb995095a4bc71db29f5c597fcc7341c37784333370f88d16c37e8c6e4c06e641fe103b1d103c633600d784a9dde0a6283
-HASH: fd468e0f40f32894
-
-KEY: d24f95a5b91e2350f3cefd0554bddd74
-IN: cd119df440a59ef6b00fc48821a499c61b8075a3b22fcc688c7e1f692e7e3f4bf32d388d332260a1d8d19fd08b75ace47f8d723cfaa4ba09338be841a45d9a9e6710a72c3df42d651062062c99561f64edb9b7eeddd4f16fc27548333d08ef7e53e70278ce10f96c007786a3daec7a5102acdcbb9e5e60f48ce5a3707e4b302315a191852a70d60af7ecf808a48ebb736b0d50579f846fb2cc836ee0326d37c9e1a23ab4c084e682349c13fcd9c86a2632ba
-HASH: 8285187584947455
-
-KEY: 1704ef13ef28111c9fbf1d8a90ed3df0
-IN: 0a7847cffeb15d085af98301ecdff96a65ed9bd8b4f9bab78843352b449fbcd770a4058558d4035bdc0e2792a373c663824c435c8e8b18654560c3777a4b90b39309c7aea843ed450eca8c31a5dc0186745ab445a033254c3d7e5e6aa15a185626a5c3815e5571cb1af2d9aef4d3d52aa6aa845ce8d0880d1cd4bc90cb921bb52d1718c092daf861fa19cbf9c0fa830b0d7224764d01259fb23886926b50a7ae1c5800440b2dda17faa360011611716d91f926
-HASH: a9a18028cc49d5b3
-
-KEY: 79ca5921362a58d045b88e0a295ff5f3
-IN: 238512ada01cc415f77d12dd755b1977356ce47adda5fd1a21585ff3e58da64dfc0bbe908bf12cf65dde9997d75df49f73058c13d5aa8fb43608517e2ceb9ffc723260a7fae31e642c987cc131db9d423f762296608d1acdd10a47fe8042f26952c26b92e7008e3d356c8888ad8de121396145cea0b5bc4ad38eaf2a9d27202d639319ba092b236d4f837d8b2220f97f2d274578748583ff6d9441b52fed194c781f05dec21d226459ba2cca9e5822eacd9a0dbd
-HASH: ec16a5874532d913
-
-KEY: 4638aa9c30b7f2c3cb2ec0a91cf25051
-IN: 38d6e168f88add060593c951113f8de24a52f6308fd547653f50f51e366547aa97c1b3520bf3d109fd5ab90c27154fd94ad2516bba6b248b0ee289781bf76b88c00b28898affc3ac9fa59dd386b9dd97b9504ccf7a1b2f233c4cfe091eaad78930711bd3c7be41bcbae01eda41f1eeb34b1b60d00536890fa3b1b26defee5ce964d9b6a30fc7645e5f0bdd4fa6b37ad00ac09d5b1fb494f62245c1f3a7b829132dcbd4290d98d77cc3493dc15a15703994c86ec6da
-HASH: 99f7786350012739
-
-KEY: b534ec6c31e22214349aebd7bbe1752b
-IN: 0f4ce510497c8751967724da17867ec2fa94213d7a8856fd47f043dbc98d88b29e6250981e9aee4622b18a7ec345b30db72ebda47cb0d51b602ad130e880cb4fe9added6c65bb813342b434bd5a14ce77c942c311ddf2035fe57f02ec143ea99ad88c72120697add3c4ec612084f57c004fce2cd3c21e2be8e0445d5aa808a2448f580b8a72dd05d7ecea3d0fb7a632c7a74acb86d759f16523d4e539ff6122d10b830011b0b64c5a8cafb88f8bebe73f5c7218fb753
-HASH: 2b5795dc26423d82
-
-KEY: 9f113029b93fc164cdfdd12ea7e0ffda
-IN: 50e2a2d204f8647e339608ea3577a1217846c9a4d8275c73afbbb867c1e8dfbdeb6e2e429b6fe6b99fda5e790dbce8b943bad7f94cf3d725073f55c64093ac597ffe4b05cee782096794ca3679dd261e935d83b626f56104f5bd642da423ee3228e9a15fc59034faffc516161c9dcbb55c4e881d6ff51c6b9aec9f2c836c730c152c42346001648fbec676564b204ef7e6c61dd8e20e8d7da0ca21625964f98396839f1065b0a3c11f8234fdf133147a13b26fd3379eb9
-HASH: 9ec5a9511a23ab04
-
-KEY: 77d7b10b166f5a87af290aafa2f89685
-IN: b77006843d57fc1202e0e9e8e058fb4cb77ba199d2e08adc3165463d36a2976f2e0a8a20ae95d28d0b97febcadf861af46cc88efee3d8011b7d4c63e2679bf4a72539f9dbfe9ce2db404345d6d2bd767e1c5a59919efef9037a5b6285e766ad9ac92e15e3e68f831c98ed160646f39c040539141ea91e90e7e8853652088bbbf849a7edd9bddbf5889275d02fc7cf7cdd35b6607fd4597dbfe6b615a4c8097c345d086730ff6f27435527f7b9c5b78928e390d5828e956e2
-HASH: cb7dba8ab55e0d82
-
-KEY: 1171800ebea1b1ff4d261351b05b3264
-IN: c0d61e58cce4facfb83cc1cb920f20f2e294ff8acdc5138bb0f61e9143dd753f0b6d1f7e58f2f25585fd353220061ab0ec0a01b9d2f85ac62f7fa9bdf0ad132c96543b3dd99aa06bc379c5f2563d158dd4822b4d4ec6de886b45337d29d5db1f46838d7f69c43ed425afbcec67bb6d61f76248d83b8979556403bd213b7b5af1be5d98f7c221e91a96e07bffbdbebe905dd2b23c7728e6a8229ced70da22d7f2175458c57d00d9eee6d6faacc6a8d376bcad29839b1b598b51
-HASH: 6a8a679785440307
-
-KEY: 4b6cccc67b66f8f146e2f94820531037
-IN: 4e3676a68fb5a4b0ce3ed5c82710a6e8f536cd810c619567352a65aaa7feb7981adb9072e8851908cbbe4f9cec829bba2b1ff542b6172fda4c8204be0e9f7933708739879f48a15806d9c1e03cde5892d453631e9d36f9d1be055f205f242f261b7499cc4fdf2fc2cf77a477631112643640d4bc394cae8e530741a296f1dc814a5e3882731117d213499e27bf4bac4e358b9740f14f93b3aa7e18e8bcddc78c13f0a4ed6135cb2fd70fc8affa434df3d026417f7fd8d0e3a44b
-HASH: 27984128c2833ea8
-
-KEY: af3b7b93b04ccb242d6e5f712ea36eee
-IN: f432ba2d3f6223aaf5c91832408d2e4963ea34a7950dece6b06255ded67e3a9857c36cd8d1cb745ee6d24ea498e1a6ed93b54120719c1ce5b801b77da662774ecc450946f12d5e6408f6584a7c665f85caf59a081c7994c7c34f63b1050443a59232c9f4a498d0939b181cfe51251f80927060d1442db2b8c07dcdf4d688094d5b12eee1cb54216acc8b5f75a5901496d23bd9d1115025982ee04d8285a404637d3438001043bcf8f87fab445bda616dcdbaaa642a18c0bf7c6135
-HASH: 80b732324609fca0
-
-KEY: 50141e86f8f9671e95fac62f082e3924
-IN: e14ae4e8bc9e02f5ae1124ec5c7db0f5f626e7cc67e1f5b8eed1a51468d332dd0a5704b184166e7fbbf40608dd3733845f5d0445b413ae56aaf51b0049b363f54e2b44f075da74c86e90fdf8b8dd42914fd46e56113850a5b038165a2e0dfc531791ce21ef15d800503163c4d314dfa5ba7da19d80f7b63cf903f40d030ffd7833d98d39a206d44d2d3f901df4cb7872285644e83b84b300a18a8af2e7714b8562a984b8f091c161cf63ff2a27bcd1c0fa74ab2c9b4659c6d865e83d
-HASH: 11cefb921f4e2a54
-
-KEY: 3ab1d3d853fea4c8c40da2d64ab8c34e
-IN: 3e14ebadcad09ff9550fa9a14a0ff24bef1b9acfd979ae767ce7c7f316ed56a0d77ef6d205ba315b8a8a8e931f365753c673842f75d4449d8ddaf010fa6b1e2cd7b7b7c49cc85231a827c1549836dcae35e8ea7ed914760858d52e9ec31ef4435485ba98a98e065ae13648547813bcff9052fc5ec8048bc17b06dd05047235ec8ef9eaf2570efec25933877f44f06f3d2f4fd8adf9103babb7cf528abad21431ff18bdf0aff912e2b4e6850f819f349da617626a204b6ccb28cdbc254b
-HASH: 851108e3cffeaa47
-
-KEY: c39b333d7d4a61a37122e1a399020b0a
-IN: 428352711ca82f0e4f10a53adbb7cba3eea77065db8f7c4375c7533330682761b095faf2744b17f057a60855b6a432ff18f46be9d9a6ff928b4a1dac4103cf9ff6d8a24f84c3709be5a6014155fdb66148d4c1286adf18ab325f4486210b941e48eb29cceae0301b786b72cbe7abcb4da0caa151d010a64dbd6d1b36a1dab555552dffb0acae07e4b9ec5a3a3e0909db4049293feae4351ace9ae8f49370910e20c84f6ba6b6e440439cebc0736516cb8efa4ec594eb06fe335e72c08f8b
-HASH: 4ad30b7af37ee5d1
-
-KEY: df1f17488985e7fe097d7ee58e087a73
-IN: 2ceb8b8694a92ab60a31c6b8f1ca7622ec9ec5b3c7548540feb0fa63846ef5dae7a1d0566cae8bb6936c658dd004a2ae17c50e392c37c8daef2d10494ddc7f576224e173a42b549eef4a53afe9c0de7c36d3b3f4bd34daf6d143a3abe08729aa6f9c7e373865ef8eff4a0d11c4d632e14801c6581c7bc87f0db3d87e82b9dd7bcc99b1ff883771770b12c755cdc5fd2b9697c1a49e17bd3beac0f1d094ec995fca8766fb41f0780cc0c6837b620bbf1c2be83a40c599072a0fcf660d39e603
-HASH: 7d1899d71fc9ed14
-
-KEY: ca74e3d171ff6157d16dd34deee34055
-IN: 2799d78643a39f5580dcd35258bcb28cb70e11ed8196a463bc6077ee88545b68ec43ccd0fc6b6e8e4d0788e8836554c6f071199ddaac02e81496017703800e7f30c79d420e2ecdc02ee1af6491be002d19793f50bc1070cb2c4a26c63b47c9fad2c3b5e9bf0918ac7f020dd3d88994b3750644eb15189d5c610c1068cb57174d645bdb1a8cb848940d0cfe9aa142c148890e4781753ab5ce30b5bf8037f9c78a4bd8023beefdbb00df2899a561fef1d80d33d8ebbbb87006becf7f0120f37495
-HASH: 1c2be2a14e15d1f6
-
-KEY: 31135badd1dc6ca387d00ce70579ec42
-IN: ba28ea9b2002a941a88611510582291a68b09b61301cb4abd0b70647c7118431aa435710679f462556daf91b587cff691344b8a8e5ff9314ec33b9bf240cc03995d968a52d35ce359a34d2f5a49c4ba61658aa65c3cde58ab36f46131f0513e21a9e199e00a8626741a641b53fc910e6667bb99ec2656866a90558ce2056bef7524b8c90c531f17003717257230ec9d3e56a60161db370b3958b2bd91723f1abde20cd69ff24819ddc50df63995cfbe1fb7560d24916c2e328568895b1ee7ba0b2
-HASH: 3c0f1863d7a2d4e9
-
-KEY: 039bf03ade84eca468720c36b402d4cc
-IN: 2bd881325c05856a1734e711ea05d6e541616bdf20bdd15efb684d8e59b57ab8c0821e877283210ee3eb0cf6730ca441850a6320a40eff262df7bcc00978ff53a6027ba13788c0ee38c31343d0f9aa2cda03766c6e77541fb1716345eb5c65d13f0140feea53a98e30a2c3c8c7d1c47d99423b4f4bd688f7d97cd9595dcb656abfb1ae6bd5069143d096274c4cb06be3994b7533f5dc3b942349034bab8364c252b16e2b31bb4815b6a0f0a9487865d093c22ff0b68e23d957edd4a5364f4c8ffc98
-HASH: 2fb62b186e731663
-
-KEY: f856d5b9728dcea44e15d80ddb3b6b33
-IN: 4874462c3e4302b6ad627c8ade84d1117f33599c56831b7a133811417e6993742637d8453551931456413c6382f7563b77c93bbd9b0d19704cbeb5ea5f1dd6ee7ce41b3f4511f8c9e4879072168ea0eb9a010032d1c219af6b9539124d2df8f3ab76d12a436326c210ef6929c138ec4e019e4362c0e3ad2008ad90a22f8f38afcbf2c056c22cebf975ebb1fc1de28769466cdb08ad033a98a9988dc8fe887b7ab879614fa3fa2c32967983b268299252aa380dc18c14e88991fdd69040e868bcc05cd4
-HASH: a8a18ad22ad98ef9
-
-KEY: 75c2435bcb43d763cdd27e211afc3f0b
-IN: 53383c8bad7c0d2b9f50b9c241c90b4d35db5a93e91f3b00374b83c34c88f3914cb2ae9af3d7f828022e6c096d22527614830010e495f609b860f68f7e42bb95fa76862a7309b4bff31037500c73220ff9649bb4e2b0a80cb57cd88d85f88fbe79f34350e8a28c4f9d99badf1ac1d869f8c1063497c7ea7e51a5fe96341bf7d448d865ef3a199fc68308c22d4c3b41ef57bfa185a50c35c1f3c79bfb77395eb9cdef055b26a0bad6bbd0c038300f127e74dbdd92c986818320f4812d9c85ac2b06ce9508
-HASH: c85bdf13c1da265f
-
-KEY: aaa6cf947414e4c120c6efdba9f474dc
-IN: 5f2eea1b42f0984a7088d6fa9b9c87702b5469a55372fed5689d3063ae338a8ec902301fde5e25f3ec0b533427b8443a66f0daa3688104cf1b5691e1336bc1fe487f62dc2e78ac879f5e488be2f6e1dfc2d9144f6bb688ee76f545dde08b91a6470ef4c22a391d7a665978d38cb46235bab1d8b8b0e7944280398cdc0cc643a58fc1c6c646ab1766c1cc616ff4ec2b6f2ed0662a9382434295f122c877736c3ba96632c4763c89ded4541a95a8066c5b6e30ed9c025b07887b5996439c3e13e357a49ca0a0
-HASH: 0fc0dd702f54bf34
-
-KEY: 299646082ee293d1126e514a30d75da8
-IN: 91422941ba7d149928ddb44df20cf55d71e2056ed59a569be53bdfe40349f066cffa24c1d55157af584af63558e86413e6dc3617d090a8328badef05590a6d2336ff73007342d339295981cb5c4b6cedb0808f5e48da37b6af2baf00f9e491fe2e1ec078a7046a15621b921d1a18e1671db82e56ad141725ea37bb7e736c8ce98ca1df77d1635deef933ac635e1bf178ef4102b6bc2b8d8f93d42f1df1bd7d434f7b451b33a694749bcb5e23d62a254cbed73a2273a3c161a7734cc8466a025a42ea712237b6
-HASH: ea1b7e5156f09163
-
-KEY: ee08dbf30fc222795a5ad75bb6c3714e
-IN: 082ba0d74dd5dfb47a49ca851322acab428a9fd84148e66fd5786639d791444356bc79ad9d8b9ee1a2a02d3fca92256ea04b7666708723e2075ffaf3dab7ff1ac397393153e420e8b623634e37e051fbaf5c0d48eba065345cb1d7d62304a88671043a1f16368c311ca501143f109e850a0f2943a17494be97d839bedd35285c4b7fc38b59280595db53acde23d78725a376b17cbcb06325e4b6ab5b0f8d0da4f190c5a288f4ccbb02b59b1d20b40fd8226051cd29ce948bbba97b526819dd93b85943ae6d42bb
-HASH: d45c3f2164c5034e
-
-KEY: e5fa0a4bb5313d1b481c5a018fe78952
-IN: 89effb15fa40020a554fea99be68572c03f02137fd9f2a41b8fadbdf6dea0e58b0378ce72c7e9ea4c2222b748aaeea397dffed1337a80e23beaeff1dbd9a16603ebfd53499116987660c8973752d1c9826370185be332bb1ac482baca01cc566db732da2a806cd6b7d2343879d137704414ff4dda4d82abd82cc9c5a6e5c4b6bfffa0995ffe8b0331294490fd05c675fce48bcf1480d4fd0f27bbe5be94b8b9dc1405a6ad757af9f4eb4b1d9a2e702bede28e7c7ed4781d244c2604c1e8ce8ad5316726a3c351bc6
-HASH: cab01455abaff8c4
-
-KEY: 1cc039133a9fccf3965fe20292a9a6b0
-IN: 058962e5b3328cc3905371467abe8123facddb62a59ab5f321f6b3cc8c43f58168ad8596a5b8ae47a18f327a89b0916e7b5df23dea5f7917773f4bc2560ae7b65ec57a4de0f03708e8ae7e209e5136f196e6a731f39650ca5fcd35355c5e77a8c3c5b31ad7ad1364e6ec11a86d26a9aabf0a4d1d1cf2f3c6ddb399fc4959f2662c0dc56657c55e451ee0e7baf581f2ea73ff843d42e75975e06937ab4239c0d6ee67b4ff101cf6350e0f8c73ab63a590769ed282d11b976a92eccc462a58050514ec2c42f11f546861
-HASH: 57b4c25b6cd917ed
-
-KEY: cb47076e391ccc17998bbe98bb92e790
-IN: 02a2f35de13c06d3f20322cc427e8dffef4e99656acd8c9a6ab28f3eb9f65d41eb54b2b5c7ff8f77ba42a88c1dbe02195684c3149c1875dfb3611910245c734479936a94aae8e337956687a062d82654ac1f688171da51331bef1a180975e4f7b4711d587033e6b7705fb44fcd4d746e071c34a2c88fae2af09f1f7335def555f809ba8c85abe1af21ac4e67bc30d9dd81cc8a453063286fc090c6a08c2269fcc48531853337dc9707811eca54ed466f8d7996c46b599b6a1e82b1a39d3185f98c7333c87fd4af5121b9
-HASH: 3b2294558b1e0353
-
-KEY: 3fa82dc1ed52e4711cbec3305346dfdd
-IN: d79baa661ae8ad2832adff360b38a1779b580f6357eda6b37911c4197854b5aa7e63149356e451c57480e1e149e2627a627e60c3e49b60eb1a1e5c690dae76c0d6a7112e3d19f0e8041254d07ffe4c21d8d931e889b0ff6710c5a7462027cc7e67266a332d596dfe6b854fc00888956e58f7babbbd3f8fa25c2024376f0132c78faf6c9559b18f32cc14e97b925080070e3ebfdab0f81a7b05d9d597329770f778657facbf1732f12fdb080e220960b7835717ef9fa58f1a7b535db36db9f2b944db2a6b63e4492c73b335
-HASH: e867bebdc0e185f7
-
-KEY: 4997e7ff91d638de29f22687c97f9835
-IN: 568283eab6f40f158e5c6742da6338d402f4d05cea50d6e18da7e3b0556edf1ca5121a58f44d9c86066b917b57cbe7f17f497772be54022bc493de67201e60268a23d3f0e8024db58eb3b6c4805c326374218374c5927d60069c61e37777bf76c59f166079cfecd65c4479e98859c514780c07d7259d2b25575f56ecc936976534537908de6e4d2965ef16ca8af35ee21b937ee17a8a125fab11a0f59c450f4b8c3b5d1c5035ea73c5d71ce2ffaa1689870170b4414bfb17faed8baab239a504027a7770782c8e6c25e02162
-HASH: 6f9ce421d15fac38
-
-KEY: 02c1994ab75a1dd3b6c46791272f8265
-IN: d5a7e586866fd0bd586e76e15fcee45323cb40ab0a7c92030c07d9ceaf315c8e8e10c20620ef20b365f693c5b71011e05afcca7e74f2dd92385a6fa9bafd6ae6e97a3a4195aa50e75a223573f5cfab0ece3183f5ddd9580607323bb16fc819b3cf76e0d4147830cfb7c9711577707bed8a224c806ce062748a20c8f386609da289827be50904e960809e0ce76ff4416a3d9cf82b4b5e3c96ffb11ffff6d846481f2035029d3c1add9be3232121d3794ecb1bea6058a299f099118c20be4ad5baa4e67784f92feaaadd54262383
-HASH: be78e88292bdb465
-
-KEY: ac06026fb727ae3a1211d369197706d7
-IN: ee203a0e9ebf6898bdd645057f8afb27ded7d7e9c1660f3fd27f4489cdf3286a79b9112f1ded1a878db6336144b37a591ea074d6ac358da8f08b980f4739facce60e0685ccc3d939255044996e060b082e9055c66a81724a3e2e00aa0d4779bdd5417f23a8cb1e8364c0404225700df4a06342db47cbe185629a8b4e14f14c24a8c6784f9168eaf4f0ef312ebb18d6472d63e748d0bc2b64f8d31035bab3aeb9736a22e2b3b42deb5d97a3c405bea74049086ab4621658adf42293820bc735bd4a748677f711588c5cb7986c6c20
-HASH: de3a48d266533d5e
-
-KEY: 93db71499f0fe1bb7035d7a4eac9cfe7
-IN: 182709207410de3757d35250ce4483017e6f1e8bed619dd367b9e2761efdc1b538006730fc67f57919bb47f9022ecbd88db269aea43693ac22206c4223179671155b7726e5c87d7ba5abdf38b1d1380bac5a9a52be718a37899d2d35ca1da2276a42d411a7c54a2ffb1ad98f7c247b3fc48b30c54a342b03ed474d7ccf18e3c72c8ed3b00cd5680ea8a0b8bef4df50f12bb6df3352b8c7b10d0e6a4a2a9317c8f25b9a1340356041208d7bd503bb6a66de10cdf8775b56b198260bf964720811933dce95d39205ff8675c89a321545
-HASH: dbbfc5d600229e64
-
-KEY: e8d3571f69d87217642056d3c53b5f1a
-IN: 3a00d589366a4d245980592068b36e1c4b9125cb93c8db5f4269167eb99dab924ba3b95cd0a7688bae6d3a52e12c463e904a4525467fc46c31e32a1681c0b0a08c1738caf7beb944c676406fe3eef522a873230117b940642c651a947e0edefda4a9230762a12cfbb4895293c4290b8be3d04ca14307ae885f348a25b8f61addb5b8cbc942f92abb872769d4c9e8e8538224271bed35d767bb77e1723fb09208412e604e1fa23b6cc43c137551eb9a963e0b8c7b622f454a436023523ab27aecf545768ab50fb34c6ea4b88ad704db9b
-HASH: e5d08edf17eab577
-
-KEY: 749fceed424ea2c74ec4418aa5ad47c1
-IN: e8b594f46e60f77f4596e2c8a90ea2f042791fe19c3ddb9a69740f36cf25469605a0f16065f0cf223df2eaaccce329c25c91108df87ed1f5134c53037d980b3eaebf94801389802c32e0866e2f499c832358c3992786bde05779f8eb8c9ff1c81ff31e626f9c91e615410d5a8625f4f37536059df6363d7087d2f47ba9c599528a7115ce419fc291b006e3dcad7c61840f5900cb4687d8f9206700b251c5a6420fa693afe05070537fa87925d10d5fee47d246d5ede432f43299e823ff838b8a6485cddfb5bfff149823c32688a039ee87
-HASH: 6bb82b5bc56b8451
-
-KEY: 1a5ea3537ee7a7a2ae0a22001daca94e
-IN: 76b8bc81bc9783f6f8a7e85151baeb8a62f8ea9b6a7a6aaa51bad995af4e0369f8f61b6e6475da34fb00fc1940f32f2dc0b1ab0d0a2a6f04ae9480f368e455e6437d2fbca09a5458095bb89f6cf36a44b5ad3ae88b34191ac42469a3c28e9d8d29ea60397d01ddf11ba80dca571b7095bdd08737df05c982b3a115bd3a87a7edd65d988ddd09217f3f31386676d6ca6592ae707e51f16849444bbdf3c2686763e4a7ad2f44fa5959d4ef1579f5ad937dba6c39e4cac0f278466350bde9ce81a9296c2e422f79add65343d8a67d9732d72e10
-HASH: 51a33c222edcb979
-
-KEY: abefde6166ad815d7364b65e911585c8
-IN: 0a7c0e36d9fab03b4a53a627d25262379c17ce645d6dee8df4f333d512e37bfbcdd6ed77209fff0897242fe43f57677b246c4b19786f9ea9e00191ec25268b4a1ee715183358570d6b45a93dbe2defe8f20bf0142c2a1090652c14e2bef6bcd5067dab3dfa701199f6d5a14b363492b0a0ffb6516c7eb17953701cb69b78b290be408f23b9ae79ea9b72d6795d33b85119ca5c6fae9f1a28311e80a3cc652f941b0a94172bab5b2e5f95e23576234ba3dadb320f69752f8bd6187934c10238817c11724a7040f6dd02c2b69bd48eb1dcfffc6b
-HASH: 09e933b789e7ecc3
-
-KEY: 2563d2eb21e7a757ce3133b6e85086ea
-IN: 568c4781aba9925979d203afcb6c995087821486609d3fe07296f541c497ac43cb00e44610ad841f9e344d1ecfb86c2b27059120a68e1249e00f8cdb0d04612a8d4ee9a0c59a03fdb595e567108d6daa3afcae8c2190e6c2c29ea917361b9d68e496016aa2266523fc582f080f16fbc8c876ba574fe1c766291e378e3d0b79705d32a54ca421fb45b9e27fba4e2502f82c422dc0862c00cff5f309eb45c635f1ab89345ed4b817a0cbc32de3e19f3dd5d69c209873fd001f091c04080669a8baf5f6944e00c6a0455dd8eea0b73c388fff64b43c
-HASH: 19ac849b2fdf3f69
-
-KEY: 4129341a51fddf4cac0364142b916150
-IN: bf02d01892c4a2f1d3f7d09945bb8b8dd2b0a363feb64565ad4ac4000bc54d3d564e73e429e9c5ae94147b85fbf532d253af6fa867c155467591d39a35e0b68de5775f53f875ebb9e363edba916c1092909c15c745f34acd6d6ac09e0d8820703aa9ac7cdf141bf40a87c9d1563c5d8d17ac6cf7cc3de6fbb4cca5948989cf292a582a836b6d293677b51e015cade0491134924331bf94e3926c81e84817eff7877d5432be95fcdfb7eeb17f40ea151ea360cfcdbd20e69b43827936ebf5ce8f9065091584d79dcb5562a9da7bc3378731e3619be4
-HASH: 388b701724a52e01
-
-KEY: dbb81916db9909090e64fc0e23cae7e6
-IN: fcf78a3867f7a9c6d585359e18e67bb535c5925c8b2c6cdf9d08d1043d0785a55c36dbdd6c8b8d33362e84e8156a1ad4dfc63f18f003a0719a51e83928e79b703b0324c26897c6cb65b43c25d396288d23576032c7570f54121d55bc58bf051ae1c447d94860b796c259e24ccb3f2fddb8069537415a173486e09144837be1ac318f043de66ac72cb663cc5be42f6bf0e243170441acb7beff6c3070b54cac5712d4d95b330ce153eb4978112daa11629e214aaf9ce4d65cac7e5af9508aeead765e0b305eec25d7cacce52956cfb3258f246a1019c7
-HASH: 54e52ffe0cc75930
-
-KEY: 1c4d246d801bea4ede8caa08359a3052
-IN: 06c1b4fd79efc017ca2e7951d2c5b0351e66203b38b331a1470f820e899f5bb740425c8beb3aaef9e5a3aedaff0561b9cd18f723730efa44b55a4f23aa3c9deed14107517e2849b014978716d9ba9fe2b04782139ddaf7e711695443c2bbb18c4242af5f92cf8f2ddae4007f6c7f7c072c5ae1bfc010e3eb843392d139660cdf31b3367e24fdd5da452211fba2398a52c3dbb63c8cf7367eb7f5fa5401129f5ad707d7d0bdc8d6a551152050885ea17f58f199e7db9fcaa1784ba0e7124931cca9bd60fa45df20beaac79529a7bc16fbb0da3886ab67ee
-HASH: 13b535675c3671c7
-
-KEY: 89593db764c35959b384a1070ee77a82
-IN: 036dd2e35625b4537eb938d749a732471a6846496f98c8d92649894ea39df2d6d480ac36a3480b3b9725a5db9610a48696e843fd35f2816b7544d38eb7113f0d67405867b7e96a5159e7c2815c3e5f2ef9e964ec288a71d0a85676877db10e137e6eaa9261be28972f45c41bd9aba896fd8aed4fddc416bd90335bbe5254df22a6d84f1f7043a9a57f603c472007e58fa5287266ec2ea4173064bd0355f2cbf705a37000e71e790670b6a6f21e8676ffc6449980b94763fa6c7f267caa6c674f9ea7c2a7f72b9abc74ac83d199d77ef9d9d129348f0f6408
-HASH: 9edbfd9a1509e0af
-
-KEY: c26b64248cd814a5cbe5582ce0877f12
-IN: b2d4d37c49a0a9ba827d65f47463e436415e6e0303a703e9596c503ecc04e071fad32f8ab39b1a86354cc8b0327333150ca21a8b7981f58fa94336fb314cf76541f0a9a1fb88b5126c088c1c21193ed7b601900dca8138861968bffcd5925795ca31dce36b850e45a86085cf9218f2130355a86da21d662f37936f03805d8f7a68a6ba8e1c13160919dcf66d176725ea3a83a7284db9f579d792f855b21cb2569690d7c290802dedad31895a9fb196b17c681dda835149629c0b6f920d39369383756ce4cf3a1e0abef2c071a0894f95284aca453dbe7efd3f
-HASH: c8f99a471202a47e
-
-KEY: d843a02999da4224a30a0adb34a80268
-IN: a3a3d15d413fa2f3310998ea550afd2dbcabba608513091dc4e843421960a29698731aabfea889af810df61ce468e826197b5fa275ab23f6908057d8eb2acc0f8c81efc9685231a198a2090d30775fcbeed564cde84f84e4c7e524f16fdc6a987814369e6aafd206e7428186339d959f084410e41c3bced089e948dd2a0158b5931c77d95ddfc7197ada7d3b212a566b7dd8483214a7de9294fbaf78fd00466650d1a244dc0c507101f05ce6d0950af15c51d21c9ae04a93cbab01307e3324d4b834252c279c28f507006646abf701bc9cc403ee9380dc8e9e2c
-HASH: a0f82e3e201341f3
-
-KEY: 5359880d90b305690c64bb649086fc2a
-IN: 16eecf2748419995e64f241eed4d538db76e06f2e4f8310a982712020c02765274b86026c6478e887a7f557e56af5e56d43ba416603d776c9342244425a05230d5ebcc501f4ae8fe5bb86f8e992ab4aa082db872395e320826e67c606bd933d803afdb22ce3bc4da0d19c5a539278f0f51ddd3ccff495e957c3ad0e08ea8a70f3083f40b9dde9545cbc47e73d5cb89ae8f8351ea0ac46e9aa7fc4712adf5722a7b26886b6b5b594fb05725456c6d948e58302cea70ed3f2ae704215216966d087a366723b7c600977cbc974c027ad2d9409c94fd9988d819735675
-HASH: d6b14df3cf4c7f49
-
-KEY: 0f0ec13184dbca8f609961b6b9fce767
-IN: 204174a8e023de7e271ac5db5fc7ad543293b4f17e1e648aa605617cec55abb9e53796d747fb13dedde4416321442fbeb94e0afb5db024dc3555b7d7d62cef09b3fbb3f7f3ba3ea5369984818f62cd37924c2089b03df6b73373e6b45db6202f7ea04931187fc8b6bc395dddf1a9156e91073bb024ee7b8150646b69995ebb47c8f513e0840ff2a4da3cdfbe5ead7debf930be5fd08ad6a8c839677a92bb6d2c7ade3bb15a07ed1b935113dadde7471fb366aac6b3d57c425edf0117914f76c51b8b590e16640179f881f784b909afcf79744a869368b7318d47ae92
-HASH: 2eaf85ca296e71f6
-
-KEY: 26f952322129ad96deb1742c4cf02db6
-IN: 6f104f1a7dce93e9387b9e8c5fbc819d17b8912d86e74ae98b499ef9ea195e4a7bef3ea9920b7f250c69b77eac0f9c9b6496338b978f6d9edffe36194a450920435d608696e38dccfc6a95aeb48d184d7bc98c5e94a0b60edd1125dbcfc34846384598324eb20b037f3394215ec67b8f24bc7cec72207ed36ea3499611a67a1673e62ff6b269689626817f7a2283e5756134189d9aa74ebdd2527a28cc9d5fe41b7c43bf25dc691cff051588adcac559923847c45aeb4e2b3d193490ea4bb69baef9d4e9df8ed11ce2ad1e59bb0788d1c4ffc4f1578218373a6d28ef73
-HASH: f1cfda7a4f7e71ea
-
-KEY: 7b0ffcf9df3ac2b8921489d0663a6a41
-IN: a11ba4969f1e542b4fbf785b1d626a02a98244a6dc3cbb4b443dbdc700781abd74f27b61af16f2bbbf7439454ba11b317e91348195b75bc72bd84b6855552befb8bfe2c02917a3a8392d689e136835edb24a32b973abc1f2ce2a12e09d3cbb42bf06a73d91df928894768111261264470b58d7053ec41a0dce1b752a8bf4e3f586a41fef78e75dc34e0842db1466a7809b41492b6f65ae1e204f44861fb0e9ca8d315b0731a476eab1a6824280862314c45653da7a9f5d4b23496aa7d0d78162b66d8eb0350e1f163210c99f0e1b63401eddc576a8dcc6a99b204f21c161
-HASH: 0c6d32d8384d66ad
-
-KEY: 127e0b96527d4f78bbbb561ee2f94216
-IN: 883b47f04789efa9dcb466454c40233e4f4d1ddaef746069110a98f023314bd24f5a83c384ca001fe4e32430f7fd16d60aa674bced1f782c9d3f2b9be7ae27eba152316619fdfd9344127f3e95e65ce0494ca9a9aaf86a5c23be50f2cd33fd36431b44e1b86706adb892930be8a5999295cdcb4ac4a7a298f83eb60f239f7aebb2c2bba0cd0cba3a78431209d16517d9c856cdabdd08c0623548a54046e482332e7bc980de6cabff201b0a3795b29f178965009fdf297dbf6826e4cfb8e8db44fe7c825f2e22836bad8f5cc6feb414d983d37a4e8ea9afabaa636181b0f2a9
-HASH: 5df3435199d3acf9
-
-KEY: e245a39e5f7900351fb68b658dedd8ab
-IN: ae84ea795dd308604a72c3dad429ed381664c81f5ac779548e3a1e5b06e93a704a53feac37e62720800bd12fbebaec2e4bb9aed6f5455f7a9625428a98658a244d05e24365f38e984b08f1d8bf7956d92c8dd384eb359d8804a4117e3dd3eb9e77dea725578af70e99fc04005792b2e4446f5800330a82eb7ba6c2f73f8538a5deb50c07f63ace94f924de49aef68ae81dbd8031f6763d68648a4579048944a154b2c4800e02d3cb283678fb28d8b2a0cbbf7f67735263f82b139e0c91d333a9c2efe3535900b7ffa3916dc737a79f6a7cdbd93c928c0c1f3c6a71bb6b1c0faf
-HASH: 009604731001be85
-
-KEY: ff848cf4962c85efa5873d63e0b0676a
-IN: c9783e9b655458a54665ce596f2f507ee53711e724b2fcdbb6a00555e782b2874f723eb9b42c9f05f81df2e400394c18f9520266deb0b39b3d7080d2609d498eb14c2d549fd5571abea40967901ce78a24510d9725812a099609bd23e8f6e1f9c8065a36af3a47aa6b0e31f4a51a13dff8a0b015c556c198915698ccca62093570e9a00fffbb9062411689aef2e23c7ca2a00637ea413dec66cfaa53f6ed0eaa1f7cfd047eb62291418f0992b4020b92574cc1bb16c8e1e0007e84f93f348d596123c0f762dc88eaee3e5acff070c3ad765194c65df5e1a09a29f17528886433bf
-HASH: eaa52c9d937058bc
-
-KEY: 0edd6290e53e244919303e4caf5b6a85
-IN: 005cd6087242d71b5c2824016534c2844f8aba3aaadc2754b5248d2ecb19b55894ebed831f2882485af9676128d7918b8360ac5011fde984a712d4a2966844fef7cd106c64f55ab7420f85b61b6be4a29abc8588f8a88980a61fbadb8501abd4b8713ad9064cad8089755eedf9ed3c60a920b0755a1da89104c95396372468ea9f58450e82f8af1129de70647b72fd3f5f8c0dd38546e140ff2c60b364bbc344bed76ffc7611b69ac958b75b626b3b1ba3334ade07a1b651b4c16877d9e3fd03872d9ee39d3553c929687b31636ddb09eca10dd4b780bb7454aad77b08cf261aee58
-HASH: aeb231e3d8dc7929
-
-KEY: eff94cde18e3fb3ae08782d7417bb658
-IN: 4cf8ef9b0f992acf9cc2616eb3a37a4947a8ba33332fe3e52c3d574c60f257f22173c03f09d7c5dee536c9125516b834877342d33ff351dd036726cbb62cb9aa711a46023c88f912f3b9edca4d0062337c54b811e235afc1f53c3b2ad75af8ff680e17fac8edd9af5ac89ed27d6a2a14d03e2cbb5e3b9c600d3825ba2b1a7363fb840aa29135a07f784dd28edcc7f2999d00c7b192f1dfce15b253e3cdccb36910f0074518b46d03b22c02645687eb19ed0f35c23f21b9c8ef504d1f14cb2ed6e8020f56bc18a0b301dffe80b8f10b8dfc5ce2ce6891bc730981f2decc8462b7238d4a
-HASH: a252d05a57be030a
-
-KEY: a98c1a0a3d066da10ea4dd2531b4ead2
-IN: 98ab505e3aa1551a94a0cf971d3263ab8b65136acdf76ff50363bec0c44ce7e0cc7cdfa157baf16798297cb5e6b8da1bdeeed67f17f8ac5f25399aead8323cb40f78f3e8aa57af8fe42a0a5c54bc40263750a20171b485f9528c6908c081bc06ffc370293c286c105fb01b4dc3a748e3ab0bfde3deeae6462577a56170d735aaf91bbc47df478f7422a1512663b5cfa60574c005d4f42a944c5a9034553ba253d4a9ec91a4c13afbb6fc2a33820466b3566e48242cda460651cf05d2bbdfa6f24700971dc8423e697aa50bd74f6b8517e36be876cdfff785f28fc4057f754426cb63f06c
-HASH: d2c20d0e5079c609
-
-KEY: fc4f980ee86aec735579dc60fe34ce08
-IN: b04be0eb00f65857e72182b6c72e441bb0fce911b147a18e920e32fe4f68b34c401ee1553cd03bcd9ec5e04030e61c9e652d1ca028bbe3e58b1b673748b8be01c135a210888f2b1729dcf430d3762634e88282ed383a2c72df11234f3d6f1c664bece2789016020695f64b325129fdb41aad72411546219708967523ce612c23fcdbb5bd96d75dfda8331033c4dbc6b4a6eeeefe3981913363420ba4e1cbecabeccb1caaf737ccaa3fc23b7bed2d19e9eff329b5e5d7c022951eced50fdb4581b69dedfbb73dfd7ef0f1a2e20fac4cd945a62459bc09499557651215584a2206541a874d08
-HASH: e9bb0be3d8c71cdc
-
-KEY: ffba67ce7af257ece6904cef96d30c3a
-IN: 59db9d944785bfbfab97d99707be5a2bd6b73fd5b566d030e6d50066d41eb3999cf4403f41a5ce5ff43e222c72b5f55d9d97e4e7841ed4630ad11eafac49237978bbeda43d16a713443f21747ad304af680d188fae4204073323c41b9a2ed6ea43649f9155f4da34ac26dbbac19823cfec2916f51093cb60e422949c105b051e1344ec1cadfbec60b16da6ec4e1704702f62bd312b61e572463c9971f8f4e57a835e2e13c938281d5ac256ecf525745ea6a9a31b4e3057bbcdfde132745976e6f37d84616917091bec6c5596705e87f931e1ffacc81fdb16ef5d0cf2395f01d8132a2a726853
-HASH: 9b41935860e05a2a
-
-KEY: e7b8fb02585eac064789f1bcf136ec3a
-IN: ab7721278f866963614de30544ccab492095c464773362883aafad7c6b314091edbbf3b031ed77c0bae0280bc0be2caa9930102dd42b89812617234fed1103978441b72c554c8152af11cf0cf610cd930baea47c50ad28dc46650fb55f5d82257d6fd070f7055f488915d5d39e2d0ee5fa9433ef942172d044f2caf9a2dfda8d4db42fd8099fd9427992db51570078943ba5033e2d36f8f5cf6f8d5044144c23bfed90f8f75bda025931e92f75ad0d2cf017835bf36fb77deb888f921867a1e3a3e39ad6d0166dae4985871b0001bec49fa62d744d20a87735c737b1860d5fbe068e7e1ff31787
-HASH: 65913fb8e4f1ef6b
-
-KEY: 7d039acba5bf658f2a8de71fe1f2808c
-IN: da6da5c841965e182434279138ad525350dfe97aabdd2a6bd0e9b3b558ee366f6b4ebf993e8b8883b2dec949ab2dcbb5afc987e86e6f57ed1c7f87ce4f672b7c599c7801dce3fb3b554f2baf70269916e82444c93ed3bdf32b4737574794b4def37a289707bbb4bd0b2d9d9c0350ce6ca9e8c1ecc60eff91e2dcdc6acd20595089e9971eaa4a486bf47c31944c98fecdc320ded6719276c29f1b785235eb90c1d8548dfcbfa1eff50f0eaf67b60f301793334feb02ea4b7ba276b870eb309f67a0c1df94a4695faaff50a34802c0e2697df2777e4b56355e02fb20b0055f477a4c8b67ea92cdc072
-HASH: b199822f1811ec96
-
-KEY: c54508b0162a1e8b0f79394dd51d3cbb
-IN: c72b4d57526c9a62c225aaf4b200cfd58ffb6bb43f081582bc2b7d18c722f83db54718509f22e3f561039d6ea67087be8da0ded3edfde792e4aa4e6b28e3f5b92634e3fa0655c9fcb8fdb6463a7b94952c8ec26d1b36363022ae29d3befbc74675c65ad84105ee22aecb291ce239bfd99e6472662b6bd211667079050e4795a52a66a690e0552c4649df2a872eca47a9d9df5eac593d3db636c0eb9a382d9e53a23a2233fad1bff227abb35ef0081e2d998b7369a3c82b1906cd6f089404624ff98bec2d3086dc784399bc31e91a8c6e1d1b9d5362d552204fd4220fe950efc4347e92f97a07bc5169
-HASH: e974a29e63624bfd
-
-KEY: c7e90e3bdde2cea53430ffa4d24b864a
-IN: 024c6b2a7e1c73e343484ee28f186e4df5209c1a1ddb6382b32f6af94a7b92f12d1d4afe1a046cc47fabff118b8cf4d3455b8a9bc35851a12e0d8f64b7b2aac84f9d31264955c0098afe2b41a461c5c05758cdf32b4a2bd7d9aed617c443afcc027e44639504706dc2dea1437772dde830885d6b9f8027ece4a9b9fc94e636b6ad2d54345bafa989a2210215dca60ce1ffeb7d999001bd1ac947b46e88bc024025241e1275a68f04046fb2c67850fe73b3d968c56e6f3e10846a33f088cf5576c8819d983c5c1d84e9e0eaeea4801d4800df0d575f4bce9a4b638cc46f546c7b18e5c6454f676fbd3425
-HASH: 173022c25c47bbcc
-
-KEY: 6e2d1460bcf8bc398481a0f14e807ce3
-IN: c3928a0547e7e1157e794f0c01be408412011794688fb8e0bc40508834e92f65930e91c3be3bf16c4f1980aa9261ba332e1c858397f3bdf0ae7b568730d6e294e351656f0a3e266ff119ef6dde49f6b4e79428bf00d7fd3a984f7b0e58272614e5d44d8f1babeff6e6152654ac264bd5de4d39f33656604f32576b7f98a412b822292a838e6a028cb6ebbe76c393f413c5ab635d9ffa568e371169d38e9fae4161055d87e2337fdbfea5f63553122d95d74acf9059a23bf4c5cb21189facf61e307adfcab2ffe9a00acbd7c8c447a301006863481caded3b0ec5b596ae1a394be98dc12454f6238fded0c9
-HASH: e91f147c8967bfff
-
-KEY: 92154b863e95c4b049170adf959758f4
-IN: a24952cdc02ef6ab70e588ac34dc10ce71b79441e11c601e8814631da2c8e0c53b757d9d8642139643bdc9a266d957d82174b160d56913abb72d14c9c3ab9af9232dbcee2b28949906df9c58d31aee3920faf7fb15f1b5047d88cd78d3d4f337a85dd7aafa745cfcd367ade881ee88b9af1835dbc8ba2d2c9ec0744937eb287f9d81959adcc513d180dc0b10503a8fceac08c51e0b479d42279d743887f51c7d66f4a57953f5123940818ceee6311b88428e626f1ffd411fb956683e02fde1e1bff712ef61cc0181fca7a29630de7954360037ba7d9d3ee2129ae6572321897734b1082ca8d4478052a5a1df
-HASH: 6e651cdf9607d1b2
-
-KEY: 5e85e11e3aa3b90a184e2024fb78a2c2
-IN: c3ec1bc51d40d05304ddf0bf8bc7b65537cc0038971fb18786188c7f621cabb636d27ceefe189483d6ab0e5ec88965ed58d32abf344478d67c2c194dc8748ed5cfecc3c47d7f197119c92724480e5fad420a5c80526e5178f25298ca1676f01e45cb72544d4f8715f3e495312fef1a6b7ac3dbc5703e580e159355c608ce6e6f5ea516d5c0b62325be4533fc595793c37ee212dd921b1a98247cc761fe3c0d9b8e9b031d295de0a910120f6e6c88ad01ae2c6c14d3a24b01da0c7ce0ad98e94420827b4f05a52227330d5612f8af1283b20cc89f3a1dd66079b4d5a42463c94b472a96b2f5380c8ad73aa2c897
-HASH: 79cafc4c1f36d921
-
-KEY: 3e9d8c681b3db54b76e7e788e3f9fc77
-IN: 8f76eb5689f2651a493e9b3844915e79356ace323dcda0971d1b73749d1fcc1de35fb610790a47d2c694c8772aa66aa1f960235a8fa1ffda2be3a218a0e95158f0833afc096301e2a471f949a35a011b7fad96e4df097507a8b4f26534971ab1c7003fcd49ae2b453f85b83b493877412f6e7296ca1b41684a05432f9bd127c158bba9e1961c027c0e718ccd130176da0d846fec138aab4be2f2a353304e20e1e733802b0a78bdc120d5e67dd75f1a592441907d5ad4301cea73da09c85e0098648fd020812dc0b7123b57bdd8f43eb330cb7974e3fa304261b6cad45fd8c18f771e46150a37a97fd459d9a36425
-HASH: f6a64307c9821557
-
-KEY: 6890a33ba93b36f9735b14da070629bb
-IN: 8b999ad629181b9d8fd808f7573a015b621243d48c894ac3083c3f01ebd793a9d52477c604046ef3465160a53e1842a4a0ad59608d72649a88be0fc798ed6498fac2927857dd35612ca3c3c457a6b051938d30a88cdc6f4df013e038681610b6c418cde5865c59c585f0f85234011fb1cd97b4d845b33f42cca4363aa49d4a72b481984018000d92d15c9f1d37d474dadcfa7de5c6cd21a68ea3a8c494d0a61c1415dc2e831f227f0778088e70b57cb8e2ee7d4111f9f2dd5130ef964894de7dcbc4bfe4cdbde5cb5ae97006bc7f12410d1610cd5576f4e4179f9bed7f7c8cdbb4690d2ae351b88ed047ae38822512
-HASH: 761ba884dec4ac03
-
-KEY: e78c745365b61651ebaffe8c42d46f6f
-IN: fac2039fb07eea055fe1788f9002ebd278decb65fcb642977109ab11d967544118c20c28c0f221cf97588e709b0c1972770a1d9dd90e2c8327b827369c7df92ae171ff5ae67c3a473f4149d886fa86d306039743b3709ac4bc03bb3d4aa6ccda74b5eed3b1e6206e26f113458a442a2582d43776ce4792d71882fd03497eb1dc4368df563a0e81cd2ec4fa0b07c7db846af0dfbac90f36b366cc5c6afcd347df9267c50d3d7b69bc5b2ec686feee2adbc2aade8cf2b7dedf70dcff62535cd37c9ca232797f515cf8f2e18bc1d061ed3133bab326988fcd00903eb3382c5188257823ce6b19b5030532c744ec29fc4c6f
-HASH: 302751549cc2415e
-
-KEY: 0ce7aa35b6a163f25444f387a2358e93
-IN: 4f3c83824e76591565f4d76e2144fbf598ea40e7d0f35ab8dac089548179c564732a8e9b047bc710ceeb514c29c8f0bbdf29b03203058aadea827e805b5b06b15d4fa1be0d2911793cfefa5b77631704081c8e0473060819d6c0a8cff55899ba8715761ccc01b6771b69ccf41e565d14f1857a17b57da20e5437a7f854d7950d659476ee55368c375a36e178097d3c36d3453df382963301e0759c61b470d14aa5744e6cc92bc1968517ead59081885baa92117737a724a2a5c64b33cc42f46dd7df800148b104d82e347a9872a8b42f7f8a24c017960569d163a21d1d99306c19b08d1c7447b56f0b1326a5983e21b51a
-HASH: 2583827c53bdf070
-
-KEY: 0e1a6d15be1f656b7a21a344f2e0d314
-IN: 7514736145f300344d473bbe03f1190bd65bfb8756ca358e2b9004320b1b7888b37e699c0b31d30793e1041250165ce39d1fc4d88a4ffd31b8b067436f659b762b48008d1508e699dd652c73da4557dae02d2199ec8cf489e2622622cffc36462fc663995530d5184be2b2f2bd107da854ceec4bafa2c6855c4b642b36cda7dd71e155757730b3fafadf0c974cff7dd965127349d7fa287091480e774e442e885cbaf336fc5d6713371c8bce55757efde52321dad605b1dd0b8760123d756487b2c061ec33e339c55796ed9121e9d5090041065a3a4adaeeb8da3af3f11cebe81a216f2332b9f9e1c1d9cb8a288c54c6ae01
-HASH: 023f403d40ddc4d3
-
-KEY: a79f2d6168912675a055766b8570075e
-IN: 8b872f2d9cf5fe9f7b9844e817fd39766e2a86bf6a463e15198e2316bf54fe6d9dac25f642d0fd828aa0ff836c863082165cd44b95c40139e86165281ca264333b470fd3db7887db448056ecdee005423ac2f1444683456064b37007de2143dcc5b75637f4043f1841ad8324b0fbe1fb8af2d69776986b057f97d9acbc44e1b11ee764b03c3f5d6f1ccda44cef0cac2e90ca4c5c938120f0533ee069b9a6fd698acdf7abca384948538e9028b461ea9e8f63369b070602d31459b69dd7e70473b5306a99609c9575cc438e4b95bff7011cdd8a14bfccc2ac32167e2e2c87e2571e4680ea71889197c3e14b61bf46ddecedb6a2
-HASH: 2da234639b4f5b51
-
-KEY: c0ed7efd7c3a530b33c0a8c9f75ef3b3
-IN: f3348518f9cc5cb4789aa17cc376e9f0f0a813e0759ec41c73b92aac9bb61dc0dc257b4980895e52483453dcee6780db1c81c3ed797c9a034c6fc2ef9b9e87746d2526c0494d3f68a89b92745cbd7a1f6cd7cba08c7572d20cd325934997f568b7be8f487f2d9fb1f377ae12db20c4175ba7a7217d6763a40ee6fd1ee8593b49f22b16e737a20617fa3d369971f26c669e4a71940c8be44eda90c2326f834669485643ae820eedf05385451ab4d5a37f175996e5f19bebbc45d3052f5fbca7fdc413762c0cabeca5660131bde115c4b236c0e4ba137f9fc0c62dadc7cd40a4b1e81f41508ba1ff86dd0c5437207b41c1869a1ffb
-HASH: 525c8c3503737a42
-
-KEY: c9322e7a0fa3d3cb63448c0cf91a710e
-IN: 46c7eaab931b65b4f7734440a7da94bbb6b7bbed3c875edbf086d5338e9fb89c9586eaf834a9ec1522de16bfee02ecf525bf9ba94ba3723af970b958e32212ddbe9ef1a28005093cb725f95fffe8f3add2d468d0224345d75acc4e1e3db00c0f4a219904c39931a7d6fcef5aeed12d67c6a2c05a41934a04c68c9a5ec4bb2b7328a1650c1841fc14fbacee0b570e3c6d8f6383c6b37ae35b1d7118f45d43d55a3b453d3698acd84e9404b54e2fa8b063ee75d1fdc13f984a79a9b555d190f108a0118d89f95285f92d1dac17e04dbd51aebbc40683acaba35552a569cef829b5a3a6c41832c63aa136a9b707e3b037c80376175c77
-HASH: ee54e3909a0b371c
-
-KEY: 49a26a0a06a3d9aef4fc6ea1a9805c17
-IN: bfaa93598cd0e67d40090305ffe8f20d52b1ae7f87e2ba8ef15cffeb8098089805161159807562fd9d47c75a2d1e00994707f98170090391ed72163f8311e1e578ceee03601ed10ea6257668330810b79564d30d87ce3e5398af7930ae24d6d9988dc18b1494e83b60500c728e090a466116e6685af67267d83f202f67ac31e8669f6dc27afbcf4aef3c015f63bd0106cc2ff1cbb98e9799642ff744b49e6dc34aed31df345d06de561470afe82e233739be2abe648a3b02cc5f28372b5b8dcef13162699c08ff46b2bc236f63a32f7a5b3600fb09a7a77f9e3ffdf9b0e1a358199fe3ef5a790cbb6ea022aa7f174436a686d57183d3
-HASH: f803371f2f4d3277
-
-KEY: 303c484fb49204e725e2d2951bbd9896
-IN: a63ba5a033912d1dd5c673c2ccd53c5e6ab5f2bc39bc7ff4f5c35c0b5d2c4e0bddce4229fe836afcba360bec541aa5253f9d2c54e884ed07eab9fb454fe5243dd16239b8c50b5801600c6534d2dca1eb61da95426837abcce212454ebf79d1fbe456d6ee12eedc4f1a48a7e4af5d9308adc4f5cf4c54386b0faab7891bc00e177aba304455eec8b6ce64445e1bd7f71f586f6cfc200eb56a579e8649b8ead10786588becb7754d76de920e1fb57882649e1443e77cac77a227e183c7756557e3b36e1028f4971fe47e4dc18ffa1d3d24edfd6bc4bdd6e6e918029b4070980c6f3f7b2aa96a7fff3cade78e8030ef576491d7114c6c28ad
-HASH: 7e9bce366d20bea8
-
-KEY: c37aaabc6d0db4b4236d30ddf60ca347
-IN: 5a0567f73ac4f0a913051bf056ef2ea3722f1736a812e78524884da840dc3b5b253f88a63d1feda1b4b09ca8e6d63fcf7b547f6d181dc1b6db7efc46bb5e2972aa56ec3a08385e9b9863692db11c615b3f2f72d294cf57943197a5248d88efdb2a4c00cabc5eab1a615f61bed515ab0d6ed652fdb41eaee68566081e89052ba7f4cc1b168676609dd1c54821d82461ce36e660bff3e9f526259773ee811e1292b6fe1d7cb2a155c3a638bfa7b1b7040ae1ab8bf31ae2afcea6a3d502e89da2fdadf74bd6a9705ba6f2a6ca8784d8b6a25f3ed874371842244198e596d0dcda9823dd918eb3677b23ee6cae08a0f1c923ca9580833b70dd02
-HASH: 03b55be4e5f448ad
-
-KEY: e3c6637edb2431c3d7e19d789b9b795f
-IN: da494da4807bbf8a852809b22467a8d386c55e9233125cb73c1915fd8b0eb94f683085472825041ccba2ea14cf600f4f03555d73c8b239c9bfae0d2cc1e7641b43e93524a58fe6730cfaf7e62311250f4934077e3883205c7f53b5719be2c2382659accbc9e7a79839c1156c4314110889f7123f3876fe8aa2fa38fc5a0c39fe0b1e8e5652111f0b420c3bbaf082f50454abecc6f8ad2bc37f655965a972cfd8ec726d0169f916847a5065321d817d67c243677346b96c6bdbc9ba8e7eda16b2ba56cfc0dc8336b31eb2bf8b14033fab8dcacb612e556743b28a9c24ddbe58b27ca303bd504ba2be547c3b6893b9eac8e21c5c75e85fa0530e
-HASH: 135f12ed177a486f
-
-KEY: c2723318c7fcee8351ffbfc223d5654a
-IN: 4bc1f8e3e5a6369473829b634a171988c009dcc4b2206036ebf419f6a722710cddec29901c62e892f2ec519caa6be7771f09065ceb21332e30a8ed662ba62af0b2d6ddcd33095dd280f0ba22122e7f3bbfe8809a6eccd983176749a7d9f086df6fd895494d3bd225cd0552884c90cd6915f57185af57dde6b41b7449a89918592c6b9b9944ae2c78d3a65d74fa9174d395fe5e33452997286d8e52853197a01e159172c663e2fb88919a03c710c9967c2de00d55622b854d42d72eb99bdc4b3324b1e022b6c383b26621fe81071ffb5e94193ee9847b76b98325b42548cd1728b77dba4384284881b69934759421f7a259a8e54dc89f7938687a
-HASH: ee2d28c3ea0b7ce5
-
-KEY: 390fc266fd6339d769eeda067acc5cc5
-IN: 53fcef219449622f20e5978afd27c4568e130d0c1db23b4d94c110069353aa40932d5f0b1fb6edf5f54ffb217516a094f0f11fef692ac66420f7c192c1fee13892971cecdaf923824c55679a379185cb7b74af34a920e64a1fcffaabf699c1ee057fd7f64e73ae45597d4dced74f59926f9b7a989a963ecc12f0e31143fd89f57270b272cbb8a19f106e83a134f1e7f63a6714ba36b1fad3cb7094d42d36bf42f0e66696972ea0bc7167bf718e4ed57ce0735de11407e7f06a171f7c7ee5a2982cfe34db94aac9227ad759bf66c45e791b4cbc9dc0eb44596520008b435ab78778e057960aecc669645d51326a4533760eed682dcf21d38b0a7f85
-HASH: b5fcdecae4d9f22f
-
-KEY: 4b7f98e24a91752f71cb2a1cf4133b7a
-IN: cc21aebd00b960f302d250f64241d428c2774bd70275248b39619a3c428819c7061de63b44c2d9b865ce0f2348de73ce7d1875fdf34bb3b74690bf03dae40b4f8fdd348196fb5e265518c67d643984b3046f5dba1aa2a3308b03009e7fa67263bcdcb4c1ba6721bdd0475a9f3a202492f24e8c40216ab4a47efc4fb156cb0d3e8491128e50214da90ade66065f75bd3087957b547d5421a9f4502da385482b4b75003a05e6f35dc2ccff7835782c79a1456417c169e76f7de8894ffe07315b7d3787c9209e73a3747e64dc0e2672f3d4f1912aeb1e8fa861a4de41852a8456f619c335568aed6917c8c93c91e2933dd8d8c51229b6bea28f2445dd85
-HASH: b18e5bc73472b149
-
-KEY: 3a0caae8e1afa4bc915f83260c4b69a4
-IN: 541af16c8314adbdec55ed3eb06820b178883ce26aae5dd1ffac1544b615426e5af0d585d7e2f922a228d9812fccef3e0c9f0a78b98d5de8c683bfb011c547af744eebac3d2879cd1ba2d01f39ec8efd116309cba48a7c280a0656a53a68d9a90947124829852c076d4ab85ad2f1a73121f0db1f8de6520c53b3a010a1e9febb37dc27906e4358e00b61e3f7be83d070731c1c56c59f1aa93185ae1c6e944db721b3e389f0d77f2546d8aa32b54ea8f9f6d6d2f2c3bea3b7e4044623745c06f1c99d4ba71b7e052112f30823b210e09cedc62ed1a8a38716f263ed0f5cfca0bf760c5005b6bf5479c7585fafeb34fd9742a909414bee7fcd0b7256f961
-HASH: 33e708ecdb29ab35
-
-KEY: 70e8b305ad3d34346b7f21a84e99a9b0
-IN: d8f7d6548477826bbd0a2a5aa8993869057a032e7631aa4870e3a2dbc80e3c571e516519780f0ca5b63969171b5bf2f48ff15e922de8e438fe56152d214e828f869f309d711bf00f41b52a9181984afe09c526fb7bf9af7a02c52f77a419f07b13a2c06af5a1589d69b56440a7bad5290ecb3ebc16314e016603c5f96f2480054caea48adcd8eb7d3c79bcf7117073eaac802243c878a202ec5a1c20360c3fc97c688d35eba6c894a183377a9b836fd442da42fbb0fa8fe68e824a00c509eabcfc68e61faa731554f9b9d2cd1bf85c3c59e8eb64a6040f345685ea5c8202690ed62eb9392f932af9107e54ddbd59f150d252a5c3467ba44e1544d889e7b0
-HASH: 0af2dc6739b90eb2
-
-KEY: a96ec37c773d908b5cc732eabb877b24
-IN: 6baf8f4a20f45bf086c0003c0c6e3837cbdbee6f861d27417547d06e21feb53703fa0f896dde73cb97671e4af7b27fb175d802bf3d941e13172ef158aa6f19e27a504e46c1f1b1dac741bc3ce66b73f46941821561be24448e37a64af54c9beb16da91ee8705d13b2882b9c80fdbe249e1d3b6e5c671ee524d76f543dac473bf83cddcd95c07e82d70ed4f0d86615e6d3776e6db7f740ff7db55a949193734b2b9caa48dfafd8bb40bd8cf2eac7bb6462e92f2a0fc101c7b1fef491f6a16c1c555df9a57a1f7a8e70eeceee14bc6e81882a8fecc48ff9b171b9e8915882f281925282a479b8239bfb48d8cdcc56c22294210a484702c5a8e4d4fdee2f6223e
-HASH: d10db578e9b44fc3
-
-KEY: d5f074017db58f6e68d210b58e091d7b
-IN: 319a1100ad4e268dcc7f3ce71fac847336fbedb9046c1b1b433c373385326fcde6824b3b1ff34f86a0a27b9216afe3145945eb5f7aa37875fac08cc62abf01e2591f8d8109f102214457193412c58a393c4819812ec9fc2079df042a3f57d172d76a8f2709b942e79b3ef839f2f51dab93d225e6eaef30b2a67324481d60a9c5a215ada44eca05470337379dd01eb0dea2cd14bcfd0991d0bb11a6b0fce97b4e51492fa665ee7e29cbba50a5ce0d50c663b16ec8260edce17d548c6d8566cc76ea7270e406f9c888849d15197b37d30c64eac4eb90f3101ef65b3c1493370f8758e7d954b41a543e520394f2da5229efd6f06ca947bfff71b11425a67229120f
-HASH: 1b460b968867e42d
-
-KEY: 338962444ff46d8d1c4ef2d14849202c
-IN: bdfc2290fb71a50aa63595c3f11ffc426539678601b31bae30b1771435e3199668980adb627c738ea28ba458c0179e48a802d81afe0b2d09b5c3efb06808a22d73173049781c0822d780e360e442619dd82cfca21291eb0b793eaef44202b7a5e6c30505ce4e026bbf724ce76a05e827c526ea99bef552460abff8058142e11e1c223aa0cc31bfa2e5f9184d9a0fb9533facadfa08b5da0a7b65ea1758675bbeb1ce2faa11ce20ade70ad5fcf88fd253c75e5a2d0ec79f3468e5056309b4d46e1e96ec811a14cf6e64fdb91a044979a86b571a9d701b6663d8f24ad77c4a514576fa942f45970993dc703dbc68a06eb688b9f7e87fbae04019d54320a26a5b7b84
-HASH: 2529cebc7a6002d2
-
-KEY: 94f80db0bb92d9f844c8fcc43ce0d94b
-IN: 3d09d5fadd1e79e648ed155dde5646d2b9b90c9103d4d7b4d53d5ff184033fb17db63516b70d4407aaf3be325d66d7196d08e310851c7a9f6ecb6d3a73b7ebc9bd604db7bf93879e17c2e1d7654247295ea02b97a60a3b85261119d021ed1f040f27e456f011cb46dad312b65c1927765cad2c56227d6aed2a5d7754a57de58c11f185aee88e38ae5c8fdbfe6242eb3dfc7981592556cdaf21351648abc64667998c4003cfb8376417ff98b506c0fa51dd2a152d00f34f6ab58c883362b08c986041724d360f68b94d8d071e327ff536023c98313f09df4ecdf11e16ecfaf3970ad682086ffc7e43d571a96b7103e9eb80acdb6fb8f78107a8042b2c8893b1d2f19f
-HASH: c4746b2d19941e56
-
-KEY: 995882b99f51c4a67f5b55f90e2a9aa2
-IN: f640e51da483aadfa88812d5851ea3a0d9e605b144013ffb7f74df26cae9317fd90233e2893575d5e470df2d80a2e9f4e8f6f5e5f885498bdad37d1489ab823dab96832d48c7617b255d40716d54dc45e9bb3d88f908d573172486d88c698496faf792696ac1f446419f6459866cd4ccfac5359ad9fc8a7bf85f755d08fa5e44f4b0def68513a39ddb97698180592baa03e37220eb955c636baef003040d753d5b2c307edd1b7a24ba1df13b9bcdd72cfbea7b17aeea59c604e509f511855e3784328479de46457d1ce706cd2f9e937d71192ff215733c62a205a6f08b901e2521e1935ee33d524c3d10c73c0a593acced88f73bf6624b15de138076569945cf2b6b11
-HASH: b24f340cc0fb1d2d
-
-KEY: 8da14614383bf855cdc281b5225515ce
-IN: e17c973f19eb796bfbc57ddb9601806998a5e97f18a3eca6a1d20c3cdcd109815cd8ee13981858324ab89e8b30214e3251e6f308648552034545f7d24ca74aa6de5bc1513c20d869a310ad1a44e462666d2817c0cc225a28efa78b1435c80adca1e07683e1792152267649aeb7ee19efade02dbc631b1fc58ac59671ea5982234da90dad42430fbd85fe6527991ccea11bb805815fdd0c8a920dc9e818a5fcf8fbf680a06999c42c33c7cc712dac8badf82059d142c6c3f80a8d09c881182cf336cce2e0e088d0af39fcdf6dc29c1ef496968455e2fa149a65cc57df06fe6830895e2daf352e922bff8cc3fc757161f3c61b2ec9e7d787e1ad976595d27f0f5fc5a04da5
-HASH: 36bd2cce6ed21122
-
-KEY: 70e11b8cda2ab4a0abcb736625145d90
-IN: 7f4fa8fc41f72c8fdcce996949b74560ea9fc7a3c57e502628487144472bee4300671cc1617fa7c76850df408b92020e7f5d377f4c8f410288ff60aca90516d0f1d13969c9e5af7e348ea7f8f9a36b8c69d0645432103f5b93ab560f3113e2d86b35fd6e704116ae5e7bfdf1c29b6d5a4570e2b1082a3e6023f14e666a76af86e4661e140eb836f262dbd5d388c166215ac4f39dd9fccbe3a3a8c58a2236304e8fc0fa1fc535e860e888a0d640277426e2e2a05d855c5ffd0876ee0306cc0c394d064fc45e974d1c19094a1e83d59057bf269f581637f343a9fac376ed41f4d193aa5e3c30141d31391c02390afd81bd32b6865ddd8974a44724217eaadd7ef316e0b4c2a5
-HASH: f6624d4d13833699
-
-KEY: e974c2247093c75ef6ed70632f16924e
-IN: 71f2e0508d7d36b373e8ee0fabf49dfd69638c5a6c79be9c89bbd0043b3bc66abb3618c67299c0afc4e24af8440185ce8d7d8b1d45732f123aa8243a9a0a0bb27b3d6bf59b39e389c15211b92c93bc5aa8582c98fb1523427c84969a65e99775e9d97f382b9ab47ccfdaddac3e7201f917bb64843f2b804801a018c71bb6f632f4521c1a4e9a375d7bbc8a42e561843dd65ae3e7ec0da1db8751960a656876983986bb2be2dadca5bb312cb004eb10f1c608af4afa599d946bdf8bd52102c257871810f5c8a899580287074686738a5823f33e96d3c2a7c77b68e4a21a5ac50e06664944d0cd6bd40ae95a2e21236e671bdaef79f08da52e2a6f65131a2e80c6263ddbeb9759
-HASH: 00ab496891593584
-
-KEY: c6f1ee0aada0c076cb20cad883bbcf52
-IN: 912f5b270fe4f445134d1caad3cd04cebc9c377fd03d3e26b82d4449d4ce1914ea718a6fa8c179dcdce1d117e99f4e8cad2cc0f0c059fd94cd8b3149a38a6b271c7fe1c90943c7a8d40774817c272a9139a05e1c0aa74cfb5a7c3c93aed9303b9579200022527a0911908875e23b1d8bacd42a123fac2342723a77942523b4aa858ff284821e1ecdb82ab2858580227bdb2e297ba3680a1f1cb0d31cb8e6f6c45235dc64f4c3f986c24f9ae3a6cb9d3710d58125f20d8e8c4cf4f89adc091649bd7a33ecb58cd163baed98e7e4f4dc16955f7f09bee1a51e0f76e9575cbc2733bf58bb4be4a4e2a2b1285c1b928aae6d8d9becdbc3723b408fc01acccb95861d23a3940df799bd
-HASH: 792ff12185fc3326
-
-KEY: 5cad21c8c3805f62248b1e1758c9c392
-IN: ec943f6a3d3681cd718f532bea0e5e2839c9425d0381dc5808cbfb273f6730efd52496b0331a711fce232991dd0847b5b6fd58330f54c19f571346d1e100e2304ebf5fff1b1047ddbbbc4dae02ffa3a21f8655b8972f683a33676352908e007ae3d12ce62e77acb2ca8278161d7c6964d6b97332c19c1d1d7288542eec4743731144a0e8a0abd58d0df0664eeacd5e97e272d672e110734c84c075b9ca5ecc279010f22236063a8ed1a7ef31bd84637832ce375944eb672b51edd7b4b248dca106295d83f14f160b63f84a49cb6a0ab143494ccdf5444c464ede3ee7936f821857cb2f3cd7d29da414c10ab7db05e4d0817c1556804b1d3d9c771adafae48541f930464549cd2635
-HASH: e428c0fa3cf4f1cf
-
-KEY: f6f49ac81cbafda6579b81c9d34de602
-IN: b5e3e21c2b2104c50bdd9a96667d460c3a4c0a5975df60369ebfc0f6ace585d727292f1d37107ef0bdd7ef16fe8740e0453501405c2a863289773a4d121b37f01e1672b0339f57fb445f132262f6337f64e9df4ed7fa79ed1c722171cf350f1c1d78e7427904ff3b90bffa1eea64181c4e69440af712e37b7dea95953ebd4ef5efa7bb3b14f3f452e204f9a26fcfa104b80deb56e16e16af88fc710f68df3da7f162e3de3aa9f31a2485169411d6009014578cace09aacebda2e965cd8c4841df7e31704584aafc459e02afc978b812f8ba22e2887728243658b4adcc46a471aa357567505b17fa51fdbc4c5ddc67827cc86f66ce3a55257d00683ed2b67ea19ce1ba0eaaed8c4c1a7
-HASH: 1b44de49c45e9bc3
-
-KEY: 05f5a594c805575eca581fd6e8b16051
-IN: aefef8817ca1ec2ce86d04184ee9f5da020497d3296395cecec10af22696deb65dcf3cfa4a3b808eb1826ff421de79aeebfca796306eb3b39165ad11d8733cee89f30229f75c06dea935045439d5a69ac118c5ca26bf59a9cade2e6b80b0fcff911eaf7f4097f87751570362dc5aa42a379c5ad313fb403b15c9c6c517be4ec28a22039bafd618284b16e12bc38c39e8525b930f5a630d4d595980becae425229bee4c63706fc172f5f9ba6cd5fd36ab474112169c2ef52b2bd72b2ef3bceb8a82ca53a42abcb044b712cc1a6b37a8ca8894b9904076452ddaae641f9137a72987fe928c20b67c2ccaf9fd601fa10c5e4c968727357c4547fc68b0e11b35f4fcbdcc3784c2722eeebefb
-HASH: cd45d7070e5ecb55
-
-KEY: 0546eaf96bc197e372139dac59c9ca1f
-IN: 1e0622e2d160fe532cc789b76e99a5fc7e90078dfa0d3d9342ca8c625192afeacf6935e930bca3e7bb2d7a4db23371b6ee3e645b9c6939bc3d414ddbff363d4ecb2967962bbb1d3b86a476bedd5820d17b86747c886efb34692b87db843588d0db53c3d91f2c305e5d58cb7ab98d6387ac45400d2ad1f2435bdb0c4a76c6fd491c3f2bc049fe70426767cadb0fa897e29cfda1bcf4f18d0b15795de39ca05fd2318dcc8b9afb7a278e986521ad971a236745bb62a680b47707a7dd1ffeb98e8e61edaa038e7c2a568c4a0060c38752eae915e4f99c91d6de11574b3dee5f85209acb8a38a02d0f59f5192a3151ba8073682d191ddd26b01913e98b403a4ce771e5e020ffed080d2dcb7082
-HASH: 079a62a92c61d7ad
-
-KEY: bb1780c25e2afb8c9bc58a3dbec8867a
-IN: ed5287df6db34449db95528d55e64ff486f178d68135dcc996593592a40655c88dfbef41fecbbc09066adca3b3ceca2c9f7be48ba61587ac3c69bb5589fb257bb96c000ab5e5843e9e7257095ae087d084aa7e62e9e3f74079d1c4c10443c9d9bcbcae47c74e72c024e5cd13280f058a772afc379d2dee0e39ec0cfc219cbb2af7698162a3b84be52c90617760e84d3743909bdd5cf21bd3ea3e3e37c3734dda57a06db25ab81ff02823f6d39cf9e068698e1f597458d08a29aefef218b40e191dc3d05f089f133f5f337d98d1c0161f490849782248e915ebcf700d80667b2d0ba3fda022faeeb23ca87add7664666f4637571964d613bf76a22061c9f746f9fb00ff0f5c2d90f648717e1f
-HASH: fcda80db378102b4
-
-KEY: ea7247b6addced42c51c827dbb2cb66c
-IN: 0ec554948d3af7cbc2306d249861f6291d44ab2be6bb26ab629347ac0e892cc902b3c5bf9688e39d826e32609834b34644a8b39c9a91f47a0f24e73a13edeec9e224756f6cff77e1d07fac03c1d803649279e33b2f16dd2d100bd82e9806afadb022700d55f5fc9688193da02dcc9dce974b60ccc2caad064acaa0f1b9e4f24e9074ac7877b91b19c7abbe5bb7f889775cd72ab9334475dddba19d008fdb01ab9cbfb1038a486c76f3c542bac704cf795be628cb83a5d9d128c2b401cf23ce494584cfe5b4ed58d9c906ded22090ffed4894238c6d02835e6180ce662b24ea18fd84d5fcbed49790322260fcf3f193081ccdb60d8f768b6dbfa61867bf90fbb1f27e1a6cb83daad6243079904a
-HASH: f8181640a08f1343
diff --git a/src/crypto/test/abi_test.h b/src/crypto/test/abi_test.h
index a3c4bb8..44547f8 100644
--- a/src/crypto/test/abi_test.h
+++ b/src/crypto/test/abi_test.h
@@ -149,11 +149,11 @@
 // AAPCS64: http://infocenter.arm.com/help/topic/com.arm.doc.ihi0055b/IHI0055B_aapcs64.pdf
 // iOS64: https://developer.apple.com/library/archive/documentation/Xcode/Conceptual/iPhoneOSABIReference/Articles/ARM64FunctionCallingConventions.html
 //
-// In aarch64, r18 (accessed as w18 or x18 in a 64-bit context) is the platform
-// register. iOS says user code may not touch it. We found no clear reference
-// for Linux. The iOS behavior implies portable assembly cannot use it, and
-// aarch64 has many registers. Thus this framework ignores register's existence.
-// We test r18 violations in arm-xlate.pl.
+// In aarch64, r19 (x19 in a 64-bit context) is the platform register. iOS says
+// user code may not touch it. We found no clear reference for Linux. The iOS
+// behavior implies portable assembly cannot use it, and aarch64 has many
+// registers. Thus this framework ignores register's existence. We can test r19
+// violations with grep.
 #define LOOP_CALLER_STATE_REGISTERS()                                \
   /* Per AAPCS64, section 5.1.2, only the bottom 64 bits of v8-v15 */ \
   /* are preserved. These are accessed as dN. */                     \
diff --git a/src/crypto/test/asm/trampoline-armv4.pl b/src/crypto/test/asm/trampoline-armv4.pl
index 6118dd7..30f510e 100755
--- a/src/crypto/test/asm/trampoline-armv4.pl
+++ b/src/crypto/test/asm/trampoline-armv4.pl
@@ -179,4 +179,4 @@
 }
 
 print $code;
-close STDOUT or die "error closing STDOUT";
+close STDOUT;
diff --git a/src/crypto/test/asm/trampoline-armv8.pl b/src/crypto/test/asm/trampoline-armv8.pl
index 410b59e..aab5250 100755
--- a/src/crypto/test/asm/trampoline-armv8.pl
+++ b/src/crypto/test/asm/trampoline-armv8.pl
@@ -206,4 +206,4 @@
 }
 
 print $code;
-close STDOUT or die "error closing STDOUT";
+close STDOUT;
diff --git a/src/crypto/test/asm/trampoline-x86.pl b/src/crypto/test/asm/trampoline-x86.pl
index 4244ac2..569a3dd 100755
--- a/src/crypto/test/asm/trampoline-x86.pl
+++ b/src/crypto/test/asm/trampoline-x86.pl
@@ -120,4 +120,4 @@
 
 &asm_finish();
 
-close STDOUT or die "error closing STDOUT";
+close STDOUT;
diff --git a/src/crypto/test/asm/trampoline-x86_64.pl b/src/crypto/test/asm/trampoline-x86_64.pl
index 5196141..8cb1410 100755
--- a/src/crypto/test/asm/trampoline-x86_64.pl
+++ b/src/crypto/test/asm/trampoline-x86_64.pl
@@ -556,4 +556,4 @@
 }
 
 print $code;
-close STDOUT or die "error closing STDOUT";
+close STDOUT;
diff --git a/src/crypto/x509/make_many_constraints.go b/src/crypto/x509/make_many_constraints.go
index 578618d..e507403 100644
--- a/src/crypto/x509/make_many_constraints.go
+++ b/src/crypto/x509/make_many_constraints.go
@@ -137,10 +137,10 @@
 	}{
 		{"many_names1.pem", 513, 513},
 		{"many_names2.pem", 1025, 0},
-		{"many_names3.pem", 1, 1025},
+		{"many_names3.pem", 0, 1025},
 		{"some_names1.pem", 256, 256},
 		{"some_names2.pem", 513, 0},
-		{"some_names3.pem", 1, 513},
+		{"some_names3.pem", 0, 513},
 	}
 	for i, leaf := range leaves {
 		leafTemplate := x509.Certificate{
diff --git a/src/crypto/x509/many_names3.pem b/src/crypto/x509/many_names3.pem
index f15638f..dbfa042 100644
--- a/src/crypto/x509/many_names3.pem
+++ b/src/crypto/x509/many_names3.pem
@@ -1,5 +1,5 @@
 -----BEGIN CERTIFICATE-----
-MIJqrDCCaZSgAwIBAgIBBDANBgkqhkiG9w0BAQsFADANMQswCQYDVQQDEwJDQTAg
+MIJqmDCCaYCgAwIBAgIBBDANBgkqhkiG9w0BAQsFADANMQswCQYDVQQDEwJDQTAg
 Fw0wMDAxMDEwMDAwMDBaGA8yMTAwMDEwMTAwMDAwMFowgmfXMRAwDgYDVQQDEwd0
 MC50ZXN0MRYwFAYJKoZIhvcNAQkBFgd0MEB0ZXN0MRYwFAYJKoZIhvcNAQkBFgd0
 MUB0ZXN0MRYwFAYJKoZIhvcNAQkBFgd0MkB0ZXN0MRYwFAYJKoZIhvcNAQkBFgd0
@@ -560,12 +560,12 @@
 oiXCzepBrhtp5UQSjHD4D4hKtgdMgVxX+LRtwgW3mnu/vBu7rzpr/DS8io99p3lq
 Z1Aky+aNlcMj6MYy8U+YFEevb/V0lRY9oqwmW7BHnXikm/vi6sjIS350U8zb/mRz
 YeIs2R65LUduTL50+UMgat9ocewI2dv8aO9Dph+8NdGtg8LFYyTTHcUxJoMr1PTO
-gnmET19WJH4PrFwk7ZE1QJQQ1L4iKmPeQistuQIDAQABo0kwRzAOBgNVHQ8BAf8E
-BAMCBaAwEwYDVR0lBAwwCgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADASBgNVHREE
-CzAJggd0MC50ZXN0MA0GCSqGSIb3DQEBCwUAA4IBAQAi7LIMyX5Ec514hvjROZ8b
-7i4UR3xd5IbniVSej+PKZhG2inN6aX9bksdda0ddYZeRSHAkNJuoabeankQJ/x5x
-sxBntWSVLCxz6S8NRrLAPKKPBvFb/W5ns57LP9SrLIij9l/NSd+K/CQNTlfcdorg
-4ltPVNwSMp/XXjH6rQYJSbo9MhDoxeqPpv73e4jY0DfGn1a8uwyCXalLjh4EkUyS
-Ye0N7MoUKV0IucrXKdgj2sHgBFqNKJ/GVQ422xZRbYqsyIJ0bPD6Fc8VcqfVrvYg
-lCYJfu7Xij5n3mjQaSYcbVxH71X8fYhhNq1tk+WtQOXirz2EkSuh1rNGU/LT8Q6r
+gnmET19WJH4PrFwk7ZE1QJQQ1L4iKmPeQistuQIDAQABozUwMzAOBgNVHQ8BAf8E
+BAMCBaAwEwYDVR0lBAwwCgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADANBgkqhkiG
+9w0BAQsFAAOCAQEAtMIpnGzOBkJXEBmCsRVbTrg9QgYRlGPG48+cXT2QbIutAmbj
+miF+OYg/bRsQtuqcKjnJYog+x6UCU3d34jaMEfEXfHSwF7xPQrqJm45MXhG3so4E
++el5GMAS+SKFQK3w8NPoGhGwn82sz4XV6HMG+ANUxMlCrOcx2jh5UW+7ITjdRwJd
+ReJ/JaMpneJdwGFSU9Vn+t7PFb51/pOYqO/PuEANzphovjMVcFZ6mtAQwYDkQZBJ
+Vy1/7bPoNmbKD0GAS6HpS+xaJ/DnjjD6Kal2T7GMyvRMogj5BeZ/uEkXCEhvoaBT
+os1gaqqnGpZ6JSEDctzjgpCtEPR40yiz1wv1CA==
 -----END CERTIFICATE-----
diff --git a/src/crypto/x509/some_names3.pem b/src/crypto/x509/some_names3.pem
index 7b38bf3..a6d3ee7 100644
--- a/src/crypto/x509/some_names3.pem
+++ b/src/crypto/x509/some_names3.pem
@@ -1,5 +1,5 @@
 -----BEGIN CERTIFICATE-----
-MII2kzCCNXugAwIBAgIBBzANBgkqhkiG9w0BAQsFADANMQswCQYDVQQDEwJDQTAg
+MII2fzCCNWegAwIBAgIBBzANBgkqhkiG9w0BAQsFADANMQswCQYDVQQDEwJDQTAg
 Fw0wMDAxMDEwMDAwMDBaGA8yMTAwMDEwMTAwMDAwMFowgjO+MRAwDgYDVQQDEwd0
 MC50ZXN0MRYwFAYJKoZIhvcNAQkBFgd0MEB0ZXN0MRYwFAYJKoZIhvcNAQkBFgd0
 MUB0ZXN0MRYwFAYJKoZIhvcNAQkBFgd0MkB0ZXN0MRYwFAYJKoZIhvcNAQkBFgd0
@@ -282,13 +282,12 @@
 BEiEhBxIsaIlws3qQa4baeVEEoxw+A+ISrYHTIFcV/i0bcIFt5p7v7wbu686a/w0
 vIqPfad5amdQJMvmjZXDI+jGMvFPmBRHr2/1dJUWPaKsJluwR514pJv74urIyEt+
 dFPM2/5kc2HiLNkeuS1Hbky+dPlDIGrfaHHsCNnb/GjvQ6YfvDXRrYPCxWMk0x3F
-MSaDK9T0zoJ5hE9fViR+D6xcJO2RNUCUENS+Iipj3kIrLbkCAwEAAaNJMEcwDgYD
+MSaDK9T0zoJ5hE9fViR+D6xcJO2RNUCUENS+Iipj3kIrLbkCAwEAAaM1MDMwDgYD
 VR0PAQH/BAQDAgWgMBMGA1UdJQQMMAoGCCsGAQUFBwMBMAwGA1UdEwEB/wQCMAAw
-EgYDVR0RBAswCYIHdDAudGVzdDANBgkqhkiG9w0BAQsFAAOCAQEAQA/0vvY1gLA2
-0jrPkBVWte7OHzWVkwq7mqgQPR4L9qLLu7Vhelp4dW8n95s1wCbca5j5SJEGv4Uv
-0fI1OOK7XQeYdNlHBmvMVW47GoBSo6tuYNPI/y4xnM6ypEZiPKkdj9Ar9qNgURfV
-z3s1czip915dyTWgwBy7CTxOlG8NW0uiFgEc9iiDDfQsPwVXiVtxOPtjhPeI3F0J
-jh3wctFxBnAvLV9SsDxpWujM1dd/1SSQ25jKQhbKNtiDAC8v+Q043r8ZGHjRdxe8
-W2tVWH/iz9c+ze0P0ao7LKv8eGzoIsrBqICS86X4Zv5lGeTGaD2osF1oNvmmoSlh
-536yFa415g==
+DQYJKoZIhvcNAQELBQADggEBAH6ad2kFE0qGDe3ErMdwTGjbBz3T12dDvAUVhGHQ
+uZShOdPsXMHD2mUqFgLE0iJFeXB7jOSAKtzmKHNmxZ4W0UZ7eMPPogkgIbG3d3yR
+8zBO21CUyOQWChywpKcAou9ji3Kq6pb4+mqq0a5TGIYyGJKSUTv09KI+iHgwteCX
+DHzzhuTs8AhodmNO5K/F9YFWJWvQ1NrwyUmOFEw8/UcljyKxFrP2VEov0fWeiTRB
+Ps6VaFBW7SEEi8fAM9W5kfsl+iWRvwFcFdXGQt1HbeywCu58DLI4uceHCFb+3MMO
+Xv7wJ5UhQODuzwuq7CuZvlxR2tiFoPP+s5fPH0L8MBP5z6w=
 -----END CERTIFICATE-----
diff --git a/src/crypto/x509/x509_test.cc b/src/crypto/x509/x509_test.cc
index 1f664b9..a53ed7a 100644
--- a/src/crypto/x509/x509_test.cc
+++ b/src/crypto/x509/x509_test.cc
@@ -32,7 +32,6 @@
 
 #include "../internal.h"
 #include "../test/test_util.h"
-#include "../x509v3/internal.h"
 
 
 std::string GetTestData(const char *path);
@@ -661,162 +660,6 @@
     "KStYq7X9PKseN+PvmfeoffIKc5R/Ha39oi7cGMVHCr8aiEhsf94=\n"
     "-----END CERTIFICATE-----\n";
 
-// kCommonNameWithSANs is a leaf certificate signed by kSANTypesRoot, with
-// *.host1.test as the common name and a SAN list of *.host2.test and
-// foo.host3.test.
-static const char kCommonNameWithSANs[] =
-    "-----BEGIN CERTIFICATE-----\n"
-    "MIIB2zCCAUSgAwIBAgIBAzANBgkqhkiG9w0BAQsFADArMRcwFQYDVQQKEw5Cb3Jp\n"
-    "bmdTU0wgVGVzdDEQMA4GA1UEAxMHUm9vdCBDQTAgFw0wMDAxMDEwMDAwMDBaGA8y\n"
-    "MDk5MDEwMTAwMDAwMFowNzEeMBwGA1UEChMVQ29tbW9uIG5hbWUgd2l0aCBTQU5z\n"
-    "MRUwEwYDVQQDDAwqLmhvc3QxLnRlc3QwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNC\n"
-    "AASgWzfnFnpQrokSLIC+LhCKJDUAY/2usfIDpOnafYoYCasbYetkmOslgyY4Nn07\n"
-    "zjvjNROprA/0bdULXAkdL9bNo0gwRjAbBgNVHSMEFDASgBBAN9cB+0AvuBx+VAQn\n"
-    "jFkBMCcGA1UdEQQgMB6CDCouaG9zdDIudGVzdIIOZm9vLmhvc3QzLnRlc3QwDQYJ\n"
-    "KoZIhvcNAQELBQADgYEAtv2e3hBhsslXB1HTxgusjoschWOVtvGZUaYlhkKzKTCL\n"
-    "4YpDn50BccnucBU/b9phYvaEZtyzOv4ZXhxTGyLnLrIVB9x5ikfCcfl+LNYNjDwM\n"
-    "enm/h1zOfJ7wXLyscD4kU29Wc/zxBd70thIgLYn16CC1S9NtXKsXXDXv5VVH/bg=\n"
-    "-----END CERTIFICATE-----\n";
-
-// kCommonNameWithSANs is a leaf certificate signed by kSANTypesRoot, with
-// *.host1.test as the common name and no SAN list.
-static const char kCommonNameWithoutSANs[] =
-    "-----BEGIN CERTIFICATE-----\n"
-    "MIIBtTCCAR6gAwIBAgIBAzANBgkqhkiG9w0BAQsFADArMRcwFQYDVQQKEw5Cb3Jp\n"
-    "bmdTU0wgVGVzdDEQMA4GA1UEAxMHUm9vdCBDQTAgFw0wMDAxMDEwMDAwMDBaGA8y\n"
-    "MDk5MDEwMTAwMDAwMFowOjEhMB8GA1UEChMYQ29tbW9uIG5hbWUgd2l0aG91dCBT\n"
-    "QU5zMRUwEwYDVQQDDAwqLmhvc3QxLnRlc3QwWTATBgcqhkjOPQIBBggqhkjOPQMB\n"
-    "BwNCAARt2vjlIrPE+kr11VS1rRP/AYQu4fvf1bNw/K9rwYlVBhmLMPYasEmpCtKE\n"
-    "0bDIFydtDYC3wZDpSS+YiaG40sdAox8wHTAbBgNVHSMEFDASgBBAN9cB+0AvuBx+\n"
-    "VAQnjFkBMA0GCSqGSIb3DQEBCwUAA4GBAHRbIeaCEytOpJpw9O2dlB656AHe1+t5\n"
-    "4JiS5mvtzoVOLn7fFk5EFQtZS7sG1Uc2XjlSw+iyvFoTFEqfKyU/mIdc2vBuPwA2\n"
-    "+YXT8aE4S+UZ9oz5j0gDpikGnkSCW0cyHD8L8fntNjaQRSaM482JpmtdmuxClmWO\n"
-    "pFFXI2B5usgI\n"
-    "-----END CERTIFICATE-----\n";
-
-// kCommonNameWithEmailSAN is a leaf certificate signed by kSANTypesRoot, with
-// *.host1.test as the common name and the email address test@host2.test in the
-// SAN list.
-static const char kCommonNameWithEmailSAN[] =
-    "-----BEGIN CERTIFICATE-----\n"
-    "MIIBvDCCASWgAwIBAgIBAjANBgkqhkiG9w0BAQsFADArMRcwFQYDVQQKEw5Cb3Jp\n"
-    "bmdTU0wgVGVzdDEQMA4GA1UEAxMHUm9vdCBDQTAgFw0wMDAxMDEwMDAwMDBaGA8y\n"
-    "MDk5MDEwMTAwMDAwMFowFzEVMBMGA1UEAwwMKi5ob3N0MS50ZXN0MFkwEwYHKoZI\n"
-    "zj0CAQYIKoZIzj0DAQcDQgAEtevOxcTjpPzlNGoUMFfZyr1k03/Hiuh+EsnuScDs\n"
-    "8XLKi6fDkvSaDClI99ycabQZRPIrvyT+dglDC6ugQd+CYqNJMEcwDAYDVR0TAQH/\n"
-    "BAIwADAbBgNVHSMEFDASgBBAN9cB+0AvuBx+VAQnjFkBMBoGA1UdEQQTMBGBD3Rl\n"
-    "c3RAaG9zdDIudGVzdDANBgkqhkiG9w0BAQsFAAOBgQCGbqb78OWJWl4zb+qw0Dz2\n"
-    "HJgZZJt6/+nNG/XJKdaYeS4eofsbwsJI4fuuOF6ZvYCJxVNtGqdfZDgycvFA9hjv\n"
-    "NGosBF1/spP17cmzTahLjxs71jDvHV/EQJbKGl/Zpta1Em1VrzSrwoOFabPXzZTJ\n"
-    "aet/mER21Z/9ZsTUoJQPJw==\n"
-    "-----END CERTIFICATE-----\n";
-
-// kCommonNameWithIPSAN is a leaf certificate signed by kSANTypesRoot, with
-// *.host1.test as the common name and the IP address 127.0.0.1 in the
-// SAN list.
-static const char kCommonNameWithIPSAN[] =
-    "-----BEGIN CERTIFICATE-----\n"
-    "MIIBsTCCARqgAwIBAgIBAjANBgkqhkiG9w0BAQsFADArMRcwFQYDVQQKEw5Cb3Jp\n"
-    "bmdTU0wgVGVzdDEQMA4GA1UEAxMHUm9vdCBDQTAgFw0wMDAxMDEwMDAwMDBaGA8y\n"
-    "MDk5MDEwMTAwMDAwMFowFzEVMBMGA1UEAwwMKi5ob3N0MS50ZXN0MFkwEwYHKoZI\n"
-    "zj0CAQYIKoZIzj0DAQcDQgAEFKrgkxm8PysXbwnHQeTD3p8YY0+sY4ssnZgmj8wX\n"
-    "KTyn893fdBHWlz71GO6t82wMTF5d+ZYwI2XU52pfl4SB2aM+MDwwDAYDVR0TAQH/\n"
-    "BAIwADAbBgNVHSMEFDASgBBAN9cB+0AvuBx+VAQnjFkBMA8GA1UdEQQIMAaHBH8A\n"
-    "AAEwDQYJKoZIhvcNAQELBQADgYEAQWZ8Oj059ZjS109V/ijMYT28xuAN5n6HHxCO\n"
-    "DopTP56Zu9+gme5wTETWEfocspZvgecoUOcedTFoKSQ7JafO09NcVLA+D6ddYpju\n"
-    "mgfuiLy9dDhqvX/NHaLBMxOBWWbOLwWE+ibyX+pOzjWRCw1L7eUXOr6PhZAOQsmU\n"
-    "D0+O6KI=\n"
-    "-----END CERTIFICATE-----\n";
-
-// kConstrainedIntermediate is an intermediate signed by kSANTypesRoot, with
-// permitted DNS names of permitted1.test and foo.permitted2.test and an
-// excluded DNS name of excluded.permitted1.test. Its private key is:
-//
-// -----BEGIN PRIVATE KEY-----
-// MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgTXUM4tJWM7OzATty
-// JhNOfIv/d8heWFBeKOfMR+RfaROhRANCAASbbbWYiN6mn+BCpg4XNpibOH0D/DN4
-// kZ5C/Ml2YVomC9T83OKk2CzB8fPAabPb4P4Vv+fIabpEfjWS5nzKLY1y
-// -----END PRIVATE KEY-----
-static const char kConstrainedIntermediate[] =
-    "-----BEGIN CERTIFICATE-----\n"
-    "MIICDjCCAXegAwIBAgIBAjANBgkqhkiG9w0BAQsFADArMRcwFQYDVQQKEw5Cb3Jp\n"
-    "bmdTU0wgVGVzdDEQMA4GA1UEAxMHUm9vdCBDQTAgFw0wMDAxMDEwMDAwMDBaGA8y\n"
-    "MDk5MDEwMTAwMDAwMFowKDEmMCQGA1UEAxMdTmFtZSBDb25zdHJhaW50cyBJbnRl\n"
-    "cm1lZGlhdGUwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAASbbbWYiN6mn+BCpg4X\n"
-    "NpibOH0D/DN4kZ5C/Ml2YVomC9T83OKk2CzB8fPAabPb4P4Vv+fIabpEfjWS5nzK\n"
-    "LY1yo4GJMIGGMA8GA1UdEwEB/wQFMAMBAf8wGwYDVR0jBBQwEoAQQDfXAftAL7gc\n"
-    "flQEJ4xZATBWBgNVHR4BAf8ETDBKoCowEYIPcGVybWl0dGVkMS50ZXN0MBWCE2Zv\n"
-    "by5wZXJtaXR0ZWQyLnRlc3ShHDAaghhleGNsdWRlZC5wZXJtaXR0ZWQxLnRlc3Qw\n"
-    "DQYJKoZIhvcNAQELBQADgYEAFq1Ka05hiKREwRpSceQPzIIH4B5a5IVBg5/EvmQI\n"
-    "9V0fXyAE1GmahPt70sIBxIgzNTEaY8P/IoOuCdlZWe0msmyEO3S6YSAzOWR5Van6\n"
-    "cXmFM1uMd95TlkxUMRdV+jKJTvG6R/BM2zltaV7Xt662k5HtzT5Svw0rZlFaggZz\n"
-    "UyM=\n"
-    "-----END CERTIFICATE-----\n";
-
-// kCommonNamePermittedLeaf is a leaf certificate signed by
-// kConstrainedIntermediate. Its common name is permitted by the name
-// constraints.
-static const char kCommonNamePermittedLeaf[] =
-    "-----BEGIN CERTIFICATE-----\n"
-    "MIIBaDCCAQ2gAwIBAgIBAzAKBggqhkjOPQQDAjAoMSYwJAYDVQQDEx1OYW1lIENv\n"
-    "bnN0cmFpbnRzIEludGVybWVkaWF0ZTAgFw0wMDAxMDEwMDAwMDBaGA8yMDk5MDEw\n"
-    "MTAwMDAwMFowPjEeMBwGA1UEChMVQ29tbW9uIG5hbWUgcGVybWl0dGVkMRwwGgYD\n"
-    "VQQDExNmb28ucGVybWl0dGVkMS50ZXN0MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcD\n"
-    "QgAENX5Ycs8q8MRzPYUz6DqLHhJR3wcmniFRgkiEa7MxE/mRe00y0VGwH7xi7Aoc\n"
-    "emXPrtD4JwN5bssbcxWGAKYYzaMQMA4wDAYDVR0TAQH/BAIwADAKBggqhkjOPQQD\n"
-    "AgNJADBGAiEAtsnWuRQXtw2xbieC78Y8SVEtTjcZUx8uZyQe1GPLfGICIQDR4fNY\n"
-    "yg3PC94ydPNQZVsFxAne32CbonWWsokalTFpUQ==\n"
-    "-----END CERTIFICATE-----\n";
-static const char kCommonNamePermitted[] = "foo.permitted1.test";
-
-// kCommonNameNotPermittedLeaf is a leaf certificate signed by
-// kConstrainedIntermediate. Its common name is not permitted by the name
-// constraints.
-static const char kCommonNameNotPermittedLeaf[] =
-    "-----BEGIN CERTIFICATE-----\n"
-    "MIIBazCCARCgAwIBAgIBBDAKBggqhkjOPQQDAjAoMSYwJAYDVQQDEx1OYW1lIENv\n"
-    "bnN0cmFpbnRzIEludGVybWVkaWF0ZTAgFw0wMDAxMDEwMDAwMDBaGA8yMDk5MDEw\n"
-    "MTAwMDAwMFowQTEiMCAGA1UEChMZQ29tbW9uIG5hbWUgbm90IHBlcm1pdHRlZDEb\n"
-    "MBkGA1UEAxMSbm90LXBlcm1pdHRlZC50ZXN0MFkwEwYHKoZIzj0CAQYIKoZIzj0D\n"
-    "AQcDQgAEzfghKuWf0JoXb0Drp09C3yXMSQQ1byt+AUaymvsHOWsxQ9v1Q+vkF/IM\n"
-    "HRqGTk2TyxrB2iClVEn/Uu+YtYox1KMQMA4wDAYDVR0TAQH/BAIwADAKBggqhkjO\n"
-    "PQQDAgNJADBGAiEAxaUslxmoWL1tIvnDz7gDkto/HcmdU0jHVuUQLXcCG8wCIQCN\n"
-    "5xZjitlCQU8UB5qSu9wH4B+0JcVO3Ss4Az76HEJWMw==\n"
-    "-----END CERTIFICATE-----\n";
-static const char kCommonNameNotPermitted[] = "not-permitted.test";
-
-// kCommonNameNotPermittedWithSANsLeaf is a leaf certificate signed by
-// kConstrainedIntermediate. Its common name is not permitted by the name
-// constraints but it has a SAN list.
-static const char kCommonNameNotPermittedWithSANsLeaf[] =
-    "-----BEGIN CERTIFICATE-----\n"
-    "MIIBqTCCAU+gAwIBAgIBBjAKBggqhkjOPQQDAjAoMSYwJAYDVQQDEx1OYW1lIENv\n"
-    "bnN0cmFpbnRzIEludGVybWVkaWF0ZTAgFw0wMDAxMDEwMDAwMDBaGA8yMDk5MDEw\n"
-    "MTAwMDAwMFowSzEsMCoGA1UEChMjQ29tbW9uIG5hbWUgbm90IHBlcm1pdHRlZCB3\n"
-    "aXRoIFNBTlMxGzAZBgNVBAMTEm5vdC1wZXJtaXR0ZWQudGVzdDBZMBMGByqGSM49\n"
-    "AgEGCCqGSM49AwEHA0IABKsn9wOApXFHrqhLdQgbFSeaSoAIbxgO0zVSRZUb5naR\n"
-    "93zoL3MFOvZEF8xiEqh7le+l3XuUig0fwqpcsZzRNJajRTBDMAwGA1UdEwEB/wQC\n"
-    "MAAwMwYDVR0RBCwwKoITZm9vLnBlcm1pdHRlZDEudGVzdIITZm9vLnBlcm1pdHRl\n"
-    "ZDIudGVzdDAKBggqhkjOPQQDAgNIADBFAiACk+1f184KkKAXuntmrz+Ygcq8MiZl\n"
-    "4delx44FtcNaegIhAIA5nYfzxNcTXxDo3U+x1vSLH6Y7faLvHiFySp7O//q+\n"
-    "-----END CERTIFICATE-----\n";
-static const char kCommonNameNotPermittedWithSANs[] = "not-permitted.test";
-
-// kCommonNameNotDNSLeaf is a leaf certificate signed by
-// kConstrainedIntermediate. Its common name is not a DNS name.
-static const char kCommonNameNotDNSLeaf[] =
-    "-----BEGIN CERTIFICATE-----\n"
-    "MIIBYTCCAQagAwIBAgIBCDAKBggqhkjOPQQDAjAoMSYwJAYDVQQDEx1OYW1lIENv\n"
-    "bnN0cmFpbnRzIEludGVybWVkaWF0ZTAgFw0wMDAxMDEwMDAwMDBaGA8yMDk5MDEw\n"
-    "MTAwMDAwMFowNzEcMBoGA1UEChMTQ29tbW9uIG5hbWUgbm90IEROUzEXMBUGA1UE\n"
-    "AxMOTm90IGEgRE5TIG5hbWUwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAASnueyc\n"
-    "Zxtnw5ke2J2T0/LwAK37auQP/RSFd9mem+BJVbgviawtAlignJmafp7Zw4/GdYEJ\n"
-    "Vm8qlriOJtluvXGcoxAwDjAMBgNVHRMBAf8EAjAAMAoGCCqGSM49BAMCA0kAMEYC\n"
-    "IQChUAmVNI39VHe0zemRE09VDcSEgOxr1nTvjLcg/Q8pVQIhAJYZnJI0YZAi05QH\n"
-    "RHNlAkTK2TnUaVn3fGSylaLiFS1r\n"
-    "-----END CERTIFICATE-----\n";
-static const char kCommonNameNotDNS[] = "Not a DNS name";
-
 // CertFromPEM parses the given, NUL-terminated pem block and returns an
 // |X509*|.
 static bssl::UniquePtr<X509> CertFromPEM(const char *pem) {
@@ -880,8 +723,7 @@
                   const std::vector<X509 *> &intermediates,
                   const std::vector<X509_CRL *> &crls, unsigned long flags,
                   bool use_additional_untrusted,
-                  std::function<void(X509_VERIFY_PARAM *)> configure_callback,
-                  int (*verify_callback)(int, X509_STORE_CTX *) = nullptr) {
+                  std::function<void(X509_VERIFY_PARAM *)> configure_callback) {
   bssl::UniquePtr<STACK_OF(X509)> roots_stack(CertsToStack(roots));
   bssl::UniquePtr<STACK_OF(X509)> intermediates_stack(
       CertsToStack(intermediates));
@@ -1327,11 +1169,9 @@
   uint8_t pub_bytes[32], priv_bytes[64];
   ED25519_keypair(pub_bytes, priv_bytes);
 
-  bssl::UniquePtr<EVP_PKEY> pub(
-      EVP_PKEY_new_raw_public_key(EVP_PKEY_ED25519, nullptr, pub_bytes, 32));
+  bssl::UniquePtr<EVP_PKEY> pub(EVP_PKEY_new_ed25519_public(pub_bytes));
   ASSERT_TRUE(pub);
-  bssl::UniquePtr<EVP_PKEY> priv(
-      EVP_PKEY_new_raw_private_key(EVP_PKEY_ED25519, nullptr, priv_bytes, 32));
+  bssl::UniquePtr<EVP_PKEY> priv(EVP_PKEY_new_ed25519_private(priv_bytes));
   ASSERT_TRUE(priv);
 
   bssl::ScopedEVP_MD_CTX md_ctx;
@@ -1904,172 +1744,3 @@
   ASSERT_TRUE(cert2);
   EXPECT_EQ(0, X509_cmp(cert.get(), cert2.get()));
 }
-
-TEST(X509Test, CommonNameFallback) {
-  bssl::UniquePtr<X509> root = CertFromPEM(kSANTypesRoot);
-  ASSERT_TRUE(root);
-  bssl::UniquePtr<X509> with_sans = CertFromPEM(kCommonNameWithSANs);
-  ASSERT_TRUE(with_sans);
-  bssl::UniquePtr<X509> without_sans = CertFromPEM(kCommonNameWithoutSANs);
-  ASSERT_TRUE(without_sans);
-  bssl::UniquePtr<X509> with_email = CertFromPEM(kCommonNameWithEmailSAN);
-  ASSERT_TRUE(with_email);
-  bssl::UniquePtr<X509> with_ip = CertFromPEM(kCommonNameWithIPSAN);
-  ASSERT_TRUE(with_ip);
-
-  auto verify_cert = [&](X509 *leaf, unsigned flags, const char *host) {
-    return Verify(
-        leaf, {root.get()}, {}, {}, 0, false, [&](X509_VERIFY_PARAM *param) {
-          ASSERT_TRUE(X509_VERIFY_PARAM_set1_host(param, host, strlen(host)));
-          X509_VERIFY_PARAM_set_hostflags(param, flags);
-        });
-  };
-
-  // By default, the common name is ignored if the SAN list is present but
-  // otherwise is checked.
-  EXPECT_EQ(X509_V_ERR_HOSTNAME_MISMATCH,
-            verify_cert(with_sans.get(), 0 /* no flags */, "foo.host1.test"));
-  EXPECT_EQ(X509_V_OK,
-            verify_cert(with_sans.get(), 0 /* no flags */, "foo.host2.test"));
-  EXPECT_EQ(X509_V_OK,
-            verify_cert(with_sans.get(), 0 /* no flags */, "foo.host3.test"));
-  EXPECT_EQ(X509_V_OK, verify_cert(without_sans.get(), 0 /* no flags */,
-                                   "foo.host1.test"));
-  EXPECT_EQ(X509_V_ERR_HOSTNAME_MISMATCH,
-            verify_cert(with_email.get(), 0 /* no flags */, "foo.host1.test"));
-  EXPECT_EQ(X509_V_ERR_HOSTNAME_MISMATCH,
-            verify_cert(with_ip.get(), 0 /* no flags */, "foo.host1.test"));
-
-  // X509_CHECK_FLAG_ALWAYS_CHECK_SUBJECT is ignored.
-  EXPECT_EQ(X509_V_ERR_HOSTNAME_MISMATCH,
-            verify_cert(with_sans.get(), X509_CHECK_FLAG_ALWAYS_CHECK_SUBJECT,
-                        "foo.host1.test"));
-  EXPECT_EQ(X509_V_OK,
-            verify_cert(with_sans.get(), X509_CHECK_FLAG_ALWAYS_CHECK_SUBJECT,
-                        "foo.host2.test"));
-  EXPECT_EQ(X509_V_OK,
-            verify_cert(with_sans.get(), X509_CHECK_FLAG_ALWAYS_CHECK_SUBJECT,
-                        "foo.host3.test"));
-  EXPECT_EQ(X509_V_OK, verify_cert(without_sans.get(),
-                                   X509_CHECK_FLAG_ALWAYS_CHECK_SUBJECT,
-                                   "foo.host1.test"));
-  EXPECT_EQ(X509_V_ERR_HOSTNAME_MISMATCH,
-            verify_cert(with_email.get(), X509_CHECK_FLAG_ALWAYS_CHECK_SUBJECT,
-                        "foo.host1.test"));
-  EXPECT_EQ(X509_V_ERR_HOSTNAME_MISMATCH,
-            verify_cert(with_ip.get(), X509_CHECK_FLAG_ALWAYS_CHECK_SUBJECT,
-                        "foo.host1.test"));
-
-  // X509_CHECK_FLAG_NEVER_CHECK_SUBJECT implements the correct behavior: the
-  // common name is never checked.
-  EXPECT_EQ(X509_V_ERR_HOSTNAME_MISMATCH,
-            verify_cert(with_sans.get(), X509_CHECK_FLAG_NEVER_CHECK_SUBJECT,
-                        "foo.host1.test"));
-  EXPECT_EQ(X509_V_OK,
-            verify_cert(with_sans.get(), X509_CHECK_FLAG_NEVER_CHECK_SUBJECT,
-                        "foo.host2.test"));
-  EXPECT_EQ(X509_V_OK,
-            verify_cert(with_sans.get(), X509_CHECK_FLAG_NEVER_CHECK_SUBJECT,
-                        "foo.host3.test"));
-  EXPECT_EQ(X509_V_ERR_HOSTNAME_MISMATCH,
-            verify_cert(without_sans.get(), X509_CHECK_FLAG_NEVER_CHECK_SUBJECT,
-                        "foo.host1.test"));
-  EXPECT_EQ(X509_V_ERR_HOSTNAME_MISMATCH,
-            verify_cert(with_email.get(), X509_CHECK_FLAG_NEVER_CHECK_SUBJECT,
-                        "foo.host1.test"));
-  EXPECT_EQ(X509_V_ERR_HOSTNAME_MISMATCH,
-            verify_cert(with_ip.get(), X509_CHECK_FLAG_NEVER_CHECK_SUBJECT,
-                        "foo.host1.test"));
-}
-
-TEST(X509Test, LooksLikeDNSName) {
-    static const char *kValid[] = {
-        "example.com",
-        "eXample123-.com",
-        "*.example.com",
-        "exa_mple.com",
-        "example.com.",
-        "project-dev:us-central1:main",
-    };
-    static const char *kInvalid[] = {
-        "-eXample123-.com",
-        "",
-        ".",
-        "*",
-        "*.",
-        "example..com",
-        ".example.com",
-        "example.com..",
-        "*foo.example.com",
-        "foo.*.example.com",
-        "foo,bar",
-    };
-
-    for (const char *str : kValid) {
-      SCOPED_TRACE(str);
-      EXPECT_TRUE(x509v3_looks_like_dns_name(
-          reinterpret_cast<const uint8_t *>(str), strlen(str)));
-    }
-    for (const char *str : kInvalid) {
-      SCOPED_TRACE(str);
-      EXPECT_FALSE(x509v3_looks_like_dns_name(
-          reinterpret_cast<const uint8_t *>(str), strlen(str)));
-    }
-}
-
-TEST(X509Test, CommonNameAndNameConstraints) {
-  bssl::UniquePtr<X509> root = CertFromPEM(kSANTypesRoot);
-  ASSERT_TRUE(root);
-  bssl::UniquePtr<X509> intermediate = CertFromPEM(kConstrainedIntermediate);
-  ASSERT_TRUE(intermediate);
-  bssl::UniquePtr<X509> permitted = CertFromPEM(kCommonNamePermittedLeaf);
-  ASSERT_TRUE(permitted);
-  bssl::UniquePtr<X509> not_permitted =
-      CertFromPEM(kCommonNameNotPermittedLeaf);
-  ASSERT_TRUE(not_permitted);
-  bssl::UniquePtr<X509> not_permitted_with_sans =
-      CertFromPEM(kCommonNameNotPermittedWithSANsLeaf);
-  ASSERT_TRUE(not_permitted_with_sans);
-  bssl::UniquePtr<X509> not_dns = CertFromPEM(kCommonNameNotDNSLeaf);
-  ASSERT_TRUE(not_dns);
-
-  auto verify_cert = [&](X509 *leaf, unsigned flags, const char *host) {
-    return Verify(
-        leaf, {root.get()}, {intermediate.get()}, {}, 0, false,
-        [&](X509_VERIFY_PARAM *param) {
-          ASSERT_TRUE(X509_VERIFY_PARAM_set1_host(param, host, strlen(host)));
-          X509_VERIFY_PARAM_set_hostflags(param, flags);
-        });
-  };
-
-  // Certificates which would otherwise trigger the common name fallback are
-  // rejected whenever there are name constraints. We do this whether or not
-  // the common name matches the constraints.
-  EXPECT_EQ(
-      X509_V_ERR_NAME_CONSTRAINTS_WITHOUT_SANS,
-      verify_cert(permitted.get(), 0 /* no flags */, kCommonNamePermitted));
-  EXPECT_EQ(X509_V_ERR_NAME_CONSTRAINTS_WITHOUT_SANS,
-            verify_cert(not_permitted.get(), 0 /* no flags */,
-                        kCommonNameNotPermitted));
-
-  // This occurs even if the built-in name checks aren't used. The caller may
-  // separately call |X509_check_host|.
-  EXPECT_EQ(X509_V_ERR_NAME_CONSTRAINTS_WITHOUT_SANS,
-            Verify(not_permitted.get(), {root.get()}, {intermediate.get()}, {},
-                   0 /* no flags */, false, nullptr));
-
-  // If the leaf certificate has SANs, the common name fallback is always
-  // disabled, so the name constraints do not apply.
-  EXPECT_EQ(X509_V_OK, Verify(not_permitted_with_sans.get(), {root.get()},
-                              {intermediate.get()}, {}, 0, false, nullptr));
-  EXPECT_EQ(X509_V_ERR_HOSTNAME_MISMATCH,
-            verify_cert(not_permitted_with_sans.get(), 0 /* no flags */,
-                        kCommonNameNotPermittedWithSANs));
-
-  // If the common name does not look like a DNS name, we apply neither name
-  // constraints nor common name fallback.
-  EXPECT_EQ(X509_V_OK, Verify(not_dns.get(), {root.get()}, {intermediate.get()},
-                              {}, 0, false, nullptr));
-  EXPECT_EQ(X509_V_ERR_HOSTNAME_MISMATCH,
-            verify_cert(not_dns.get(), 0 /* no flags */, kCommonNameNotDNS));
-}
diff --git a/src/crypto/x509/x509_txt.c b/src/crypto/x509/x509_txt.c
index 8e6ac27..753e720 100644
--- a/src/crypto/x509/x509_txt.c
+++ b/src/crypto/x509/x509_txt.c
@@ -54,10 +54,13 @@
  * copied and put under another distribution licence
  * [including the GNU Public Licence.] */
 
+#include <openssl/mem.h>
 #include <openssl/x509.h>
 
 const char *X509_verify_cert_error_string(long n)
 {
+    static char buf[100];
+
     switch ((int)n) {
     case X509_V_OK:
         return ("ok");
@@ -195,10 +198,8 @@
     case X509_V_ERR_STORE_LOOKUP:
         return ("Issuer certificate lookup error");
 
-    case X509_V_ERR_NAME_CONSTRAINTS_WITHOUT_SANS:
-        return "Issuer has name constraints but leaf has no SANs";
-
     default:
-        return "unknown certificate verification error";
+        BIO_snprintf(buf, sizeof buf, "error number %ld", n);
+        return (buf);
     }
 }
diff --git a/src/crypto/x509/x509_vfy.c b/src/crypto/x509/x509_vfy.c
index fff97fa..5af3fb3 100644
--- a/src/crypto/x509/x509_vfy.c
+++ b/src/crypto/x509/x509_vfy.c
@@ -70,7 +70,6 @@
 
 #include "vpm_int.h"
 #include "../internal.h"
-#include "../x509v3/internal.h"
 
 static CRYPTO_EX_DATA_CLASS g_ex_data_class =
     CRYPTO_EX_DATA_CLASS_INIT_WITH_APP_DATA;
@@ -711,40 +710,13 @@
     return ok;
 }
 
-static int reject_dns_name_in_common_name(X509 *x509)
-{
-    X509_NAME *name = X509_get_subject_name(x509);
-    int i = -1;
-    for (;;) {
-        i = X509_NAME_get_index_by_NID(name, NID_commonName, i);
-        if (i == -1) {
-            return X509_V_OK;
-        }
-
-        X509_NAME_ENTRY *entry = X509_NAME_get_entry(name, i);
-        ASN1_STRING *common_name = X509_NAME_ENTRY_get_data(entry);
-        unsigned char *idval;
-        int idlen = ASN1_STRING_to_UTF8(&idval, common_name);
-        if (idlen < 0) {
-            return X509_V_ERR_OUT_OF_MEM;
-        }
-        /* Only process attributes that look like host names. Note it is
-         * important that this check be mirrored in |X509_check_host|. */
-        int looks_like_dns = x509v3_looks_like_dns_name(idval, (size_t)idlen);
-        OPENSSL_free(idval);
-        if (looks_like_dns) {
-            return X509_V_ERR_NAME_CONSTRAINTS_WITHOUT_SANS;
-        }
-    }
-}
-
 static int check_name_constraints(X509_STORE_CTX *ctx)
 {
+    X509 *x;
     int i, j, rv;
-    int has_name_constraints = 0;
     /* Check name constraints for all certificates */
     for (i = sk_X509_num(ctx->chain) - 1; i >= 0; i--) {
-        X509 *x = sk_X509_value(ctx->chain, i);
+        x = sk_X509_value(ctx->chain, i);
         /* Ignore self issued certs unless last in chain */
         if (i && (x->ex_flags & EXFLAG_SI))
             continue;
@@ -757,7 +729,6 @@
         for (j = sk_X509_num(ctx->chain) - 1; j > i; j--) {
             NAME_CONSTRAINTS *nc = sk_X509_value(ctx->chain, j)->nc;
             if (nc) {
-                has_name_constraints = 1;
                 rv = NAME_CONSTRAINTS_check(x, nc);
                 switch (rv) {
                 case X509_V_OK:
@@ -776,36 +747,6 @@
             }
         }
     }
-
-    /* Name constraints do not match against the common name, but
-     * |X509_check_host| still implements the legacy behavior where, on
-     * certificates lacking a SAN list, DNS-like names in the common name are
-     * checked instead.
-     *
-     * While we could apply the name constraints to the common name, name
-     * constraints are rare enough that can hold such certificates to a higher
-     * standard. Note this does not make "DNS-like" heuristic failures any
-     * worse. A decorative common-name misidentified as a DNS name would fail
-     * the name constraint anyway. */
-    X509 *leaf = sk_X509_value(ctx->chain, 0);
-    if (has_name_constraints && leaf->altname == NULL) {
-        rv = reject_dns_name_in_common_name(leaf);
-        switch (rv) {
-        case X509_V_OK:
-            break;
-        case X509_V_ERR_OUT_OF_MEM:
-            ctx->error = rv;
-            return 0;
-        default:
-            ctx->error = rv;
-            ctx->error_depth = i;
-            ctx->current_cert = leaf;
-            if (!ctx->verify_cb(0, ctx))
-                return 0;
-            break;
-        }
-    }
-
     return 1;
 }
 
diff --git a/src/crypto/x509v3/internal.h b/src/crypto/x509v3/internal.h
index c143d73..e6be684 100644
--- a/src/crypto/x509v3/internal.h
+++ b/src/crypto/x509v3/internal.h
@@ -43,11 +43,6 @@
 // followed by '.'. Otherwise, it returns a non-zero number.
 int x509v3_name_cmp(const char *name, const char *cmp);
 
-// x509v3_looks_like_dns_name returns one if |in| looks like a DNS name and zero
-// otherwise.
-OPENSSL_EXPORT int x509v3_looks_like_dns_name(const unsigned char *in,
-                                              size_t len);
-
 
 #if defined(__cplusplus)
 }  /* extern C */
diff --git a/src/crypto/x509v3/v3_utl.c b/src/crypto/x509v3/v3_utl.c
index 86c4940..2a293dc 100644
--- a/src/crypto/x509v3/v3_utl.c
+++ b/src/crypto/x509v3/v3_utl.c
@@ -909,53 +909,6 @@
                           subject, subject_len, flags);
 }
 
-int x509v3_looks_like_dns_name(const unsigned char *in, size_t len) {
-    /* This function is used as a heuristic for whether a common name is a
-     * hostname to be matched, or merely a decorative name to describe the
-     * subject. This heuristic must be applied to both name constraints and the
-     * common name fallback, so it must be loose enough to accept hostname
-     * common names, and tight enough to reject decorative common names. */
-
-    if (len > 0 && in[len - 1] == '.') {
-        len--;
-    }
-
-    /* Wildcards are allowed in front. */
-    if (len >= 2 && in[0] == '*' && in[1] == '.') {
-        in += 2;
-        len -= 2;
-    }
-
-    if (len == 0) {
-        return 0;
-    }
-
-    size_t label_start = 0;
-    for (size_t i = 0; i < len; i++) {
-        unsigned char c = in[i];
-        if ((c >= 'a' && c <= 'z') ||
-            (c >= '0' && c <= '9') ||
-            (c >= 'A' && c <= 'Z') ||
-            (c == '-' && i > label_start) ||
-            /* These are not valid characters in hostnames, but commonly found
-             * in deployments outside the Web PKI. */
-            c == '_' ||
-            c == ':') {
-            continue;
-        }
-
-        /* Labels must not be empty. */
-        if (c == '.' && i > label_start && i < len - 1) {
-            label_start = i + 1;
-            continue;
-        }
-
-        return 0;
-    }
-
-    return 1;
-}
-
 /*
  * Compare an ASN1_STRING to a supplied string. If they match return 1. If
  * cmp_type > 0 only compare if string matches the type, otherwise convert it
@@ -963,8 +916,8 @@
  */
 
 static int do_check_string(ASN1_STRING *a, int cmp_type, equal_fn equal,
-                           unsigned int flags, int check_type, const char *b,
-                           size_t blen, char **peername)
+                           unsigned int flags, const char *b, size_t blen,
+                           char **peername)
 {
     int rv = 0;
 
@@ -985,17 +938,7 @@
         astrlen = ASN1_STRING_to_UTF8(&astr, a);
         if (astrlen < 0)
             return -1;
-        /*
-         * We check the common name against DNS name constraints if it passes
-         * |x509v3_looks_like_dns_name|. Thus we must not consider common names
-         * for DNS fallbacks if they fail this check.
-         */
-        if (check_type == GEN_DNS &&
-            !x509v3_looks_like_dns_name(astr, astrlen)) {
-            rv = 0;
-        } else {
-            rv = equal(astr, astrlen, (unsigned char *)b, blen, flags);
-        }
+        rv = equal(astr, astrlen, (unsigned char *)b, blen, flags);
         if (rv > 0 && peername)
             *peername = BUF_strndup((char *)astr, astrlen);
         OPENSSL_free(astr);
@@ -1012,6 +955,7 @@
     int j;
     int cnid = NID_undef;
     int alt_type;
+    int san_present = 0;
     int rv = 0;
     equal_fn equal;
 
@@ -1044,6 +988,7 @@
             gen = sk_GENERAL_NAME_value(gens, i);
             if (gen->type != check_type)
                 continue;
+            san_present = 1;
             if (check_type == GEN_EMAIL)
                 cstr = gen->d.rfc822Name;
             else if (check_type == GEN_DNS)
@@ -1051,16 +996,21 @@
             else
                 cstr = gen->d.iPAddress;
             /* Positive on success, negative on error! */
-            if ((rv = do_check_string(cstr, alt_type, equal, flags, check_type,
+            if ((rv = do_check_string(cstr, alt_type, equal, flags,
                                       chk, chklen, peername)) != 0)
                 break;
         }
         GENERAL_NAMES_free(gens);
-        return rv;
+        if (rv != 0)
+            return rv;
+        if (cnid == NID_undef
+            || (san_present
+                && !(flags & X509_CHECK_FLAG_ALWAYS_CHECK_SUBJECT)))
+            return 0;
     }
 
     /* We're done if CN-ID is not pertinent */
-    if (cnid == NID_undef || (flags & X509_CHECK_FLAG_NEVER_CHECK_SUBJECT))
+    if (cnid == NID_undef)
         return 0;
 
     j = -1;
@@ -1071,7 +1021,7 @@
         ne = X509_NAME_get_entry(name, j);
         str = X509_NAME_ENTRY_get_data(ne);
         /* Positive on success, negative on error! */
-        if ((rv = do_check_string(str, -1, equal, flags, check_type,
+        if ((rv = do_check_string(str, -1, equal, flags,
                                   chk, chklen, peername)) != 0)
             return rv;
     }
diff --git a/src/crypto/x509v3/v3name_test.cc b/src/crypto/x509v3/v3name_test.cc
index 2dcdd87..0736120 100644
--- a/src/crypto/x509v3/v3name_test.cc
+++ b/src/crypto/x509v3/v3name_test.cc
@@ -65,7 +65,6 @@
 #include <openssl/x509v3.h>
 
 #include "../internal.h"
-#include "internal.h"
 
 
 static const char *const names[] = {
@@ -345,7 +344,7 @@
         ret = X509_check_host(crt, name, namelen, 0, NULL);
         match = -1;
         if (ret < 0) {
-            fprintf(stderr, "internal error in X509_check_host\n");
+            fprintf(stderr, "internal error in X509_check_host");
             ++errors;
         } else if (fn->host) {
             if (ret == 1 && !samename)
@@ -360,7 +359,7 @@
                               X509_CHECK_FLAG_NO_WILDCARDS, NULL);
         match = -1;
         if (ret < 0) {
-            fprintf(stderr, "internal error in X509_check_host\n");
+            fprintf(stderr, "internal error in X509_check_host");
             ++errors;
         } else if (fn->host) {
             if (ret == 1 && !samename)
@@ -386,21 +385,12 @@
     }
 }
 
-// TODO(davidben): Convert this test to GTest more thoroughly.
+// TOOD(davidben): Convert this test to GTest more thoroughly.
 TEST(X509V3Test, NameTest) {
     const struct set_name_fn *pfn = name_fns;
     while (pfn->name) {
         const char *const *pname = names;
         while (*pname) {
-            // The common name fallback requires the name look sufficiently
-            // DNS-like.
-            if (strcmp(pfn->name, "set CN") == 0 &&
-                !x509v3_looks_like_dns_name(
-                    reinterpret_cast<const unsigned char*>(*pname),
-                    strlen(*pname))) {
-                ++pname;
-                continue;
-            }
             bssl::UniquePtr<X509> crt(make_cert());
             ASSERT_TRUE(crt);
             ASSERT_TRUE(pfn->fn(crt.get(), *pname));
diff --git a/src/decrepit/blowfish/blowfish_test.cc b/src/decrepit/blowfish/blowfish_test.cc
index 4b08fe4..d19346a 100644
--- a/src/decrepit/blowfish/blowfish_test.cc
+++ b/src/decrepit/blowfish/blowfish_test.cc
@@ -19,7 +19,7 @@
 #include "../../crypto/internal.h"
 #include "../../crypto/test/test_util.h"
 
-struct BlowfishTestCase {
+struct TestCase {
   uint8_t key[16];
   uint8_t plaintext[16];
   uint8_t iv[8];
@@ -28,7 +28,7 @@
   uint8_t cfb_ciphertext[16];
 };
 
-static const BlowfishTestCase kTests[] = {
+static const TestCase kTests[] = {
     // Randomly generated test cases. Checked against vanilla OpenSSL.
     {
         {0xbb, 0x56, 0xb1, 0x27, 0x7c, 0x4c, 0xdd, 0x5a, 0x99, 0x90, 0x1e, 0x6f,
diff --git a/src/decrepit/cast/cast_test.cc b/src/decrepit/cast/cast_test.cc
index fd5f2a9..05a04cb 100644
--- a/src/decrepit/cast/cast_test.cc
+++ b/src/decrepit/cast/cast_test.cc
@@ -19,7 +19,7 @@
 #include "../../crypto/internal.h"
 #include "../../crypto/test/test_util.h"
 
-struct CastTestCase {
+struct TestCase {
   uint8_t key[16];
   uint8_t plaintext[16];
   uint8_t iv[8];
@@ -27,7 +27,7 @@
   uint8_t cbc_ciphertext[24];
 };
 
-static const CastTestCase kTests[] = {
+static const TestCase kTests[] = {
     // Randomly generated test cases. Checked against vanilla OpenSSL.
     {
         {0xbb, 0x56, 0xb1, 0x27, 0x7c, 0x4c, 0xdd, 0x5a, 0x99, 0x90, 0x1e, 0x6f,
diff --git a/src/util/fipstools/cavp/CMakeLists.txt b/src/fipstools/CMakeLists.txt
similarity index 94%
rename from src/util/fipstools/cavp/CMakeLists.txt
rename to src/fipstools/CMakeLists.txt
index a50c9ab..58c9a60 100644
--- a/src/util/fipstools/cavp/CMakeLists.txt
+++ b/src/fipstools/CMakeLists.txt
@@ -1,4 +1,4 @@
-include_directories(../../../include)
+include_directories(../include)
 
 if(FIPS)
   add_executable(
diff --git a/src/util/fipstools/cavp/cavp_aes_gcm_test.cc b/src/fipstools/cavp_aes_gcm_test.cc
similarity index 100%
rename from src/util/fipstools/cavp/cavp_aes_gcm_test.cc
rename to src/fipstools/cavp_aes_gcm_test.cc
diff --git a/src/util/fipstools/cavp/cavp_aes_test.cc b/src/fipstools/cavp_aes_test.cc
similarity index 100%
rename from src/util/fipstools/cavp/cavp_aes_test.cc
rename to src/fipstools/cavp_aes_test.cc
diff --git a/src/util/fipstools/cavp/cavp_ctr_drbg_test.cc b/src/fipstools/cavp_ctr_drbg_test.cc
similarity index 100%
rename from src/util/fipstools/cavp/cavp_ctr_drbg_test.cc
rename to src/fipstools/cavp_ctr_drbg_test.cc
diff --git a/src/util/fipstools/cavp/cavp_ecdsa2_keypair_test.cc b/src/fipstools/cavp_ecdsa2_keypair_test.cc
similarity index 100%
rename from src/util/fipstools/cavp/cavp_ecdsa2_keypair_test.cc
rename to src/fipstools/cavp_ecdsa2_keypair_test.cc
diff --git a/src/util/fipstools/cavp/cavp_ecdsa2_pkv_test.cc b/src/fipstools/cavp_ecdsa2_pkv_test.cc
similarity index 100%
rename from src/util/fipstools/cavp/cavp_ecdsa2_pkv_test.cc
rename to src/fipstools/cavp_ecdsa2_pkv_test.cc
diff --git a/src/util/fipstools/cavp/cavp_ecdsa2_siggen_test.cc b/src/fipstools/cavp_ecdsa2_siggen_test.cc
similarity index 100%
rename from src/util/fipstools/cavp/cavp_ecdsa2_siggen_test.cc
rename to src/fipstools/cavp_ecdsa2_siggen_test.cc
diff --git a/src/util/fipstools/cavp/cavp_ecdsa2_sigver_test.cc b/src/fipstools/cavp_ecdsa2_sigver_test.cc
similarity index 100%
rename from src/util/fipstools/cavp/cavp_ecdsa2_sigver_test.cc
rename to src/fipstools/cavp_ecdsa2_sigver_test.cc
diff --git a/src/util/fipstools/cavp/cavp_hmac_test.cc b/src/fipstools/cavp_hmac_test.cc
similarity index 100%
rename from src/util/fipstools/cavp/cavp_hmac_test.cc
rename to src/fipstools/cavp_hmac_test.cc
diff --git a/src/util/fipstools/cavp/cavp_kas_test.cc b/src/fipstools/cavp_kas_test.cc
similarity index 100%
rename from src/util/fipstools/cavp/cavp_kas_test.cc
rename to src/fipstools/cavp_kas_test.cc
diff --git a/src/util/fipstools/cavp/cavp_keywrap_test.cc b/src/fipstools/cavp_keywrap_test.cc
similarity index 67%
rename from src/util/fipstools/cavp/cavp_keywrap_test.cc
rename to src/fipstools/cavp_keywrap_test.cc
index a4abccd..c7270df 100644
--- a/src/util/fipstools/cavp/cavp_keywrap_test.cc
+++ b/src/fipstools/cavp_keywrap_test.cc
@@ -28,16 +28,15 @@
 
 struct TestCtx {
   bool encrypt;
-  bool padding;
 };
 
-}  // namespace
+}
 
 static bool AESKeyWrap(std::vector<uint8_t> *out, bool encrypt,
                        const std::vector<uint8_t> &key,
                        const std::vector<uint8_t> &in) {
   size_t key_bits = key.size() * 8;
-  if (key_bits != 128 && key_bits != 192 && key_bits != 256) {
+  if (key_bits != 128 && key_bits != 256) {
     return false;
   }
   AES_KEY aes_key;
@@ -61,36 +60,6 @@
   return true;
 }
 
-static bool AESKeyWrapWithPadding(std::vector<uint8_t> *out, bool encrypt,
-                                  const std::vector<uint8_t> &key,
-                                  const std::vector<uint8_t> &in) {
-  const size_t key_bits = key.size() * 8;
-  if (key_bits != 128 && key_bits != 192 && key_bits != 256) {
-    return false;
-  }
-  AES_KEY aes_key;
-
-  size_t out_len;
-  if (encrypt) {
-    out->resize(in.size() + 15);
-    if (AES_set_encrypt_key(key.data(), key_bits, &aes_key) ||
-        !AES_wrap_key_padded(&aes_key, out->data(), &out_len, out->size(),
-                             in.data(), in.size())) {
-      return false;
-    }
-  } else {
-    out->resize(in.size());
-    if (AES_set_decrypt_key(key.data(), key_bits, &aes_key) ||
-        !AES_unwrap_key_padded(&aes_key, out->data(), &out_len, out->size(),
-                               in.data(), in.size())) {
-      return false;
-    }
-  }
-
-  out->resize(out_len);
-  return true;
-}
-
 static bool TestCipher(FileTest *t, void *arg) {
   TestCtx *ctx = reinterpret_cast<TestCtx *>(arg);
 
@@ -106,13 +75,8 @@
   }
   // clang-format on
 
-  auto wrap_function = AESKeyWrap;
-  if (ctx->padding) {
-    wrap_function = AESKeyWrapWithPadding;
-  }
-
   printf("%s", t->CurrentTestToString().c_str());
-  if (!wrap_function(&result, ctx->encrypt, key, in)) {
+  if (!AESKeyWrap(&result, ctx->encrypt, key, in)) {
     if (ctx->encrypt) {
       return false;
     } else {
@@ -129,7 +93,7 @@
 static int usage(char *arg) {
   fprintf(
       stderr,
-      "usage: %s (enc|dec|enc-pad|dec-pad) (128|192|256) <test file>\n",
+      "usage: %s (enc|dec) (128|256) <test file>\n",
       arg);
   return 1;
 }
@@ -140,21 +104,16 @@
   }
 
   const std::string op(argv[1]);
-  bool encrypt = false;
-  bool padding = false;
+  bool encrypt;
   if (op == "enc") {
     encrypt = true;
   } else if (op == "dec") {
-  } else if (op == "enc-pad") {
-    encrypt = true;
-    padding = true;
-  } else if (op == "dec-pad") {
-    padding = true;
+    encrypt = false;
   } else {
     return usage(argv[0]);
   }
 
-  TestCtx ctx = {encrypt, padding};
+  TestCtx ctx = {encrypt};
 
   FileTest::Options opts;
   opts.path = argv[3];
diff --git a/src/util/fipstools/cavp/cavp_main.cc b/src/fipstools/cavp_main.cc
similarity index 100%
rename from src/util/fipstools/cavp/cavp_main.cc
rename to src/fipstools/cavp_main.cc
diff --git a/src/util/fipstools/cavp/cavp_rsa2_keygen_test.cc b/src/fipstools/cavp_rsa2_keygen_test.cc
similarity index 100%
rename from src/util/fipstools/cavp/cavp_rsa2_keygen_test.cc
rename to src/fipstools/cavp_rsa2_keygen_test.cc
diff --git a/src/util/fipstools/cavp/cavp_rsa2_siggen_test.cc b/src/fipstools/cavp_rsa2_siggen_test.cc
similarity index 100%
rename from src/util/fipstools/cavp/cavp_rsa2_siggen_test.cc
rename to src/fipstools/cavp_rsa2_siggen_test.cc
diff --git a/src/util/fipstools/cavp/cavp_rsa2_sigver_test.cc b/src/fipstools/cavp_rsa2_sigver_test.cc
similarity index 100%
rename from src/util/fipstools/cavp/cavp_rsa2_sigver_test.cc
rename to src/fipstools/cavp_rsa2_sigver_test.cc
diff --git a/src/util/fipstools/cavp/cavp_sha_monte_test.cc b/src/fipstools/cavp_sha_monte_test.cc
similarity index 100%
rename from src/util/fipstools/cavp/cavp_sha_monte_test.cc
rename to src/fipstools/cavp_sha_monte_test.cc
diff --git a/src/util/fipstools/cavp/cavp_sha_test.cc b/src/fipstools/cavp_sha_test.cc
similarity index 100%
rename from src/util/fipstools/cavp/cavp_sha_test.cc
rename to src/fipstools/cavp_sha_test.cc
diff --git a/src/util/fipstools/cavp/cavp_tdes_test.cc b/src/fipstools/cavp_tdes_test.cc
similarity index 100%
rename from src/util/fipstools/cavp/cavp_tdes_test.cc
rename to src/fipstools/cavp_tdes_test.cc
diff --git a/src/util/fipstools/cavp/cavp_test_util.cc b/src/fipstools/cavp_test_util.cc
similarity index 100%
rename from src/util/fipstools/cavp/cavp_test_util.cc
rename to src/fipstools/cavp_test_util.cc
diff --git a/src/util/fipstools/cavp/cavp_test_util.h b/src/fipstools/cavp_test_util.h
similarity index 100%
rename from src/util/fipstools/cavp/cavp_test_util.h
rename to src/fipstools/cavp_test_util.h
diff --git a/src/util/fipstools/cavp/cavp_tlskdf_test.cc b/src/fipstools/cavp_tlskdf_test.cc
similarity index 100%
rename from src/util/fipstools/cavp/cavp_tlskdf_test.cc
rename to src/fipstools/cavp_tlskdf_test.cc
diff --git a/src/util/fipstools/cavp/run_cavp.go b/src/fipstools/run_cavp.go
similarity index 97%
rename from src/util/fipstools/cavp/run_cavp.go
rename to src/fipstools/run_cavp.go
index b37f453..438bb78 100644
--- a/src/util/fipstools/cavp/run_cavp.go
+++ b/src/fipstools/run_cavp.go
@@ -283,17 +283,9 @@
 	nil,
 	[]test{
 		{"KW_AD_128", []string{"dec", "128"}, false},
-		{"KW_AD_192", []string{"dec", "192"}, false},
 		{"KW_AD_256", []string{"dec", "256"}, false},
 		{"KW_AE_128", []string{"enc", "128"}, false},
-		{"KW_AE_192", []string{"enc", "192"}, false},
 		{"KW_AE_256", []string{"enc", "256"}, false},
-		{"KWP_AD_128", []string{"dec-pad", "128"}, false},
-		{"KWP_AD_192", []string{"dec-pad", "192"}, false},
-		{"KWP_AD_256", []string{"dec-pad", "256"}, false},
-		{"KWP_AE_128", []string{"enc-pad", "128"}, false},
-		{"KWP_AE_192", []string{"enc-pad", "192"}, false},
-		{"KWP_AE_256", []string{"enc-pad", "256"}, false},
 	},
 }
 
diff --git a/src/util/fipstools/cavp/test_fips.c b/src/fipstools/test_fips.c
similarity index 100%
rename from src/util/fipstools/cavp/test_fips.c
rename to src/fipstools/test_fips.c
diff --git a/src/include/openssl/aes.h b/src/include/openssl/aes.h
index e560625..3606bfc 100644
--- a/src/include/openssl/aes.h
+++ b/src/include/openssl/aes.h
@@ -6,7 +6,7 @@
  * are met:
  *
  * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
+ *    notice, this list of conditions and the following disclaimer. 
  *
  * 2. Redistributions in binary form must reproduce the above copyright
  *    notice, this list of conditions and the following disclaimer in
@@ -163,31 +163,6 @@
                                   size_t in_len);
 
 
-// AES key wrap with padding.
-//
-// These functions implement AES Key Wrap with Padding mode, as defined in RFC
-// 5649. They should never be used except to interoperate with existing systems
-// that use this mode.
-
-// AES_wrap_key_padded performs a padded AES key wrap on |in| which must be
-// between 1 and 2^32-1 bytes. |key| must have been configured for encryption.
-// On success it writes at most |max_out| bytes of ciphertext to |out|, sets
-// |*out_len| to the number of bytes written, and returns one. On failure it
-// returns zero. To ensure success, set |max_out| to at least |in_len| + 15.
-OPENSSL_EXPORT int AES_wrap_key_padded(const AES_KEY *key, uint8_t *out,
-                                       size_t *out_len, size_t max_out,
-                                       const uint8_t *in, size_t in_len);
-
-// AES_unwrap_key_padded performs a padded AES key unwrap on |in| which must be
-// a multiple of 8 bytes. |key| must have been configured for decryption. On
-// success it writes at most |max_out| bytes to |out|, sets |*out_len| to the
-// number of bytes written, and returns one. On failure it returns zero. Setting
-// |max_out| to |in_len| is a sensible estimate.
-OPENSSL_EXPORT int AES_unwrap_key_padded(const AES_KEY *key, uint8_t *out,
-                                         size_t *out_len, size_t max_out,
-                                         const uint8_t *in, size_t in_len);
-
-
 #if defined(__cplusplus)
 }  // extern C
 #endif
diff --git a/src/include/openssl/base.h b/src/include/openssl/base.h
index cb1affa..7fe232f 100644
--- a/src/include/openssl/base.h
+++ b/src/include/openssl/base.h
@@ -291,24 +291,6 @@
 #endif
 #endif  // OPENSSL_ASM_INCOMPATIBLE
 
-#if defined(__cplusplus)
-// enums can be predeclared, but only in C++ and only if given an explicit type.
-// C doesn't support setting an explicit type for enums thus a #define is used
-// to do this only for C++. However, the ABI type between C and C++ need to have
-// equal sizes, which is confirmed in a unittest.
-#define BORINGSSL_ENUM_INT : int
-enum ssl_early_data_reason_t BORINGSSL_ENUM_INT;
-enum ssl_encryption_level_t BORINGSSL_ENUM_INT;
-enum ssl_private_key_result_t BORINGSSL_ENUM_INT;
-enum ssl_renegotiate_mode_t BORINGSSL_ENUM_INT;
-enum ssl_select_cert_result_t BORINGSSL_ENUM_INT;
-enum ssl_select_cert_result_t BORINGSSL_ENUM_INT;
-enum ssl_ticket_aead_result_t BORINGSSL_ENUM_INT;
-enum ssl_verify_result_t BORINGSSL_ENUM_INT;
-#else
-#define BORINGSSL_ENUM_INT
-#endif
-
 // CRYPTO_THREADID is a dummy value.
 typedef int CRYPTO_THREADID;
 
diff --git a/src/include/openssl/cpu.h b/src/include/openssl/cpu.h
index eb36a57..ad5fc94 100644
--- a/src/include/openssl/cpu.h
+++ b/src/include/openssl/cpu.h
@@ -93,7 +93,7 @@
 // bits in XCR0, so it is not necessary to check those.
 extern uint32_t OPENSSL_ia32cap_P[4];
 
-#if defined(BORINGSSL_FIPS) && !defined(BORINGSSL_SHARED_LIBRARY)
+#if defined(BORINGSSL_FIPS)
 const uint32_t *OPENSSL_ia32cap_get(void);
 #else
 OPENSSL_INLINE const uint32_t *OPENSSL_ia32cap_get(void) {
diff --git a/src/include/openssl/digest.h b/src/include/openssl/digest.h
index c7c6797..1a1ca29 100644
--- a/src/include/openssl/digest.h
+++ b/src/include/openssl/digest.h
@@ -269,11 +269,6 @@
 // EVP_MD_CTX_destroy calls |EVP_MD_CTX_free|.
 OPENSSL_EXPORT void EVP_MD_CTX_destroy(EVP_MD_CTX *ctx);
 
-// EVP_DigestFinalXOF returns zero and adds an error to the error queue.
-// BoringSSL does not support any XOF digests.
-OPENSSL_EXPORT int EVP_DigestFinalXOF(EVP_MD_CTX *ctx, uint8_t *out,
-                                      size_t len);
-
 
 struct evp_md_pctx_ops;
 
diff --git a/src/include/openssl/dsa.h b/src/include/openssl/dsa.h
index 8e3b9b3..bed93c5 100644
--- a/src/include/openssl/dsa.h
+++ b/src/include/openssl/dsa.h
@@ -436,6 +436,5 @@
 #define DSA_R_BAD_VERSION 104
 #define DSA_R_DECODE_ERROR 105
 #define DSA_R_ENCODE_ERROR 106
-#define DSA_R_INVALID_PARAMETERS 107
 
 #endif  // OPENSSL_HEADER_DSA_H
diff --git a/src/include/openssl/engine.h b/src/include/openssl/engine.h
index ce60de4..9d45952 100644
--- a/src/include/openssl/engine.h
+++ b/src/include/openssl/engine.h
@@ -40,8 +40,8 @@
 OPENSSL_EXPORT ENGINE *ENGINE_new(void);
 
 // ENGINE_free decrements the reference counts for all methods linked from
-// |engine| and frees |engine| itself. It returns one.
-OPENSSL_EXPORT int ENGINE_free(ENGINE *engine);
+// |engine| and frees |engine| itself.
+OPENSSL_EXPORT void ENGINE_free(ENGINE *engine);
 
 
 // Method accessors.
diff --git a/src/include/openssl/evp.h b/src/include/openssl/evp.h
index 999e19d..c446984 100644
--- a/src/include/openssl/evp.h
+++ b/src/include/openssl/evp.h
@@ -170,13 +170,22 @@
 OPENSSL_EXPORT EC_KEY *EVP_PKEY_get0_EC_KEY(const EVP_PKEY *pkey);
 OPENSSL_EXPORT EC_KEY *EVP_PKEY_get1_EC_KEY(const EVP_PKEY *pkey);
 
+// EVP_PKEY_new_ed25519_public returns a newly allocated |EVP_PKEY| wrapping an
+// Ed25519 public key, or NULL on allocation error.
+OPENSSL_EXPORT EVP_PKEY *EVP_PKEY_new_ed25519_public(
+    const uint8_t public_key[32]);
+
+// EVP_PKEY_new_ed25519_private returns a newly allocated |EVP_PKEY| wrapping an
+// Ed25519 private key, or NULL on allocation error.
+OPENSSL_EXPORT EVP_PKEY *EVP_PKEY_new_ed25519_private(
+    const uint8_t private_key[64]);
+
 #define EVP_PKEY_NONE NID_undef
 #define EVP_PKEY_RSA NID_rsaEncryption
 #define EVP_PKEY_RSA_PSS NID_rsassaPss
 #define EVP_PKEY_DSA NID_dsa
 #define EVP_PKEY_EC NID_X9_62_id_ecPublicKey
 #define EVP_PKEY_ED25519 NID_ED25519
-#define EVP_PKEY_X25519 NID_X25519
 
 // EVP_PKEY_assign sets the underlying key of |pkey| to |key|, which must be of
 // the given type. It returns one if successful or zero if the |type| argument
@@ -232,48 +241,6 @@
 OPENSSL_EXPORT int EVP_marshal_private_key(CBB *cbb, const EVP_PKEY *key);
 
 
-// Raw keys
-//
-// Some keys types support a "raw" serialization. Currently the only supported
-// raw format is Ed25519, where the public key and private key formats are those
-// specified in RFC 8032. Note the RFC 8032 private key format is the 32-byte
-// prefix of |ED25519_sign|'s 64-byte private key.
-
-// EVP_PKEY_new_raw_private_key returns a newly allocated |EVP_PKEY| wrapping a
-// private key of the specified type. It returns one on success and zero on
-// error.
-OPENSSL_EXPORT EVP_PKEY *EVP_PKEY_new_raw_private_key(int type, ENGINE *unused,
-                                                      const uint8_t *in,
-                                                      size_t len);
-
-// EVP_PKEY_new_raw_public_key returns a newly allocated |EVP_PKEY| wrapping a
-// public key of the specified type. It returns one on success and zero on
-// error.
-OPENSSL_EXPORT EVP_PKEY *EVP_PKEY_new_raw_public_key(int type, ENGINE *unused,
-                                                     const uint8_t *in,
-                                                     size_t len);
-
-// EVP_PKEY_get_raw_private_key outputs the private key for |pkey| in raw form.
-// If |out| is NULL, it sets |*out_len| to the size of the raw private key.
-// Otherwise, it writes at most |*out_len| bytes to |out| and sets |*out_len| to
-// the number of bytes written.
-//
-// It returns one on success and zero if |pkey| has no private key, the key
-// type does not support a raw format, or the buffer is too small.
-OPENSSL_EXPORT int EVP_PKEY_get_raw_private_key(const EVP_PKEY *pkey,
-                                                uint8_t *out, size_t *out_len);
-
-// EVP_PKEY_get_raw_public_key outputs the public key for |pkey| in raw form.
-// If |out| is NULL, it sets |*out_len| to the size of the raw public key.
-// Otherwise, it writes at most |*out_len| bytes to |out| and sets |*out_len| to
-// the number of bytes written.
-//
-// It returns one on success and zero if |pkey| has no public key, the key
-// type does not support a raw format, or the buffer is too small.
-OPENSSL_EXPORT int EVP_PKEY_get_raw_public_key(const EVP_PKEY *pkey,
-                                               uint8_t *out, size_t *out_len);
-
-
 // Signing
 
 // EVP_DigestSignInit sets up |ctx| for a signing operation with |type| and
@@ -907,26 +874,6 @@
 OPENSSL_EXPORT int EVP_PKEY_CTX_set_ec_param_enc(EVP_PKEY_CTX *ctx,
                                                  int encoding);
 
-// EVP_PKEY_set1_tls_encodedpoint replaces |pkey| with a public key encoded by
-// |in|. It returns one on success and zero on error.
-//
-// This function only works on X25519 keys.
-OPENSSL_EXPORT int EVP_PKEY_set1_tls_encodedpoint(EVP_PKEY *pkey,
-                                                  const uint8_t *in,
-                                                  size_t len);
-
-// EVP_PKEY_get1_tls_encodedpoint sets |*out_ptr| to a newly-allocated buffer
-// containing the raw encoded public key for |pkey|. The caller must call
-// |OPENSSL_free| to release this buffer. The function returns the length of the
-// buffer on success and zero on error.
-//
-// This function only works on X25519 keys.
-OPENSSL_EXPORT size_t EVP_PKEY_get1_tls_encodedpoint(const EVP_PKEY *pkey,
-                                                     uint8_t **out_ptr);
-
-// EVP_PKEY_base_id calls |EVP_PKEY_id|.
-OPENSSL_EXPORT int EVP_PKEY_base_id(const EVP_PKEY *pkey);
-
 
 // Preprocessor compatibility section (hidden).
 //
@@ -1015,6 +962,5 @@
 #define EVP_R_INVALID_SIGNATURE 131
 #define EVP_R_MEMORY_LIMIT_EXCEEDED 132
 #define EVP_R_INVALID_PARAMETERS 133
-#define EVP_R_INVALID_PEER_KEY 134
 
 #endif  // OPENSSL_HEADER_EVP_H
diff --git a/src/include/openssl/nid.h b/src/include/openssl/nid.h
index cea975a..270d443 100644
--- a/src/include/openssl/nid.h
+++ b/src/include/openssl/nid.h
@@ -4237,9 +4237,6 @@
 #define SN_CECPQ2 "CECPQ2"
 #define NID_CECPQ2 959
 
-#define SN_CECPQ2b "CECPQ2b"
-#define NID_CECPQ2b 960
-
 
 #if defined(__cplusplus)
 } /* extern C */
diff --git a/src/include/openssl/pkcs8.h b/src/include/openssl/pkcs8.h
index 385b995..ee48f19 100644
--- a/src/include/openssl/pkcs8.h
+++ b/src/include/openssl/pkcs8.h
@@ -168,18 +168,12 @@
 
 // PKCS12_parse calls |PKCS12_get_key_and_certs| on the ASN.1 data stored in
 // |p12|. The |out_pkey| and |out_cert| arguments must not be NULL and, on
-// successful exit, the private key and matching certificate will be stored in
+// successful exit, the private key and first certificate will be stored in
 // them. The |out_ca_certs| argument may be NULL but, if not, then any extra
 // certificates will be appended to |*out_ca_certs|. If |*out_ca_certs| is NULL
 // then it will be set to a freshly allocated stack containing the extra certs.
 //
-// Note if |p12| does not contain a private key, both |*out_pkey| and
-// |*out_cert| will be set to NULL and all certificates will be returned via
-// |*out_ca_certs|.
-//
 // It returns one on success and zero on error.
-//
-// Use |PKCS12_get_key_and_certs| instead.
 OPENSSL_EXPORT int PKCS12_parse(const PKCS12 *p12, const char *password,
                                 EVP_PKEY **out_pkey, X509 **out_cert,
                                 STACK_OF(X509) **out_ca_certs);
diff --git a/src/include/openssl/siphash.h b/src/include/openssl/siphash.h
deleted file mode 100644
index fe08aa7..0000000
--- a/src/include/openssl/siphash.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/* Copyright (c) 2019, Google Inc.
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
- * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
- * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
- * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
-
-#ifndef OPENSSL_HEADER_SIPHASH_H
-#define OPENSSL_HEADER_SIPHASH_H
-
-#include <openssl/base.h>
-
-#if defined(__cplusplus)
-extern "C" {
-#endif
-
-
-// SipHash is a fast, secure PRF that is often used for hash tables.
-
-
-// SIPHASH_24 implements SipHash-2-4. See https://131002.net/siphash/siphash.pdf
-OPENSSL_EXPORT uint64_t SIPHASH_24(const uint64_t key[2], const uint8_t *input,
-                                   size_t input_len);
-
-
-#if defined(__cplusplus)
-}  // extern C
-#endif
-
-#endif  // OPENSSL_HEADER_SIPHASH_H
diff --git a/src/include/openssl/ssl.h b/src/include/openssl/ssl.h
index 3d2bc07..4240c29 100644
--- a/src/include/openssl/ssl.h
+++ b/src/include/openssl/ssl.h
@@ -1160,7 +1160,7 @@
 
 // Custom private keys.
 
-enum ssl_private_key_result_t BORINGSSL_ENUM_INT {
+enum ssl_private_key_result_t {
   ssl_private_key_success,
   ssl_private_key_retry,
   ssl_private_key_failure,
@@ -1296,8 +1296,7 @@
 OPENSSL_EXPORT const char *SSL_CIPHER_standard_name(const SSL_CIPHER *cipher);
 
 // SSL_CIPHER_get_name returns the OpenSSL name of |cipher|. For example,
-// "ECDHE-RSA-AES128-GCM-SHA256". Callers are recommended to use
-// |SSL_CIPHER_standard_name| instead.
+// "ECDHE-RSA-AES128-GCM-SHA256".
 OPENSSL_EXPORT const char *SSL_CIPHER_get_name(const SSL_CIPHER *cipher);
 
 // SSL_CIPHER_get_kx_name returns a string that describes the key-exchange
@@ -1400,7 +1399,7 @@
 // based on client preferences. An equal-preference is specified with square
 // brackets, combining multiple selectors separated by |. For example:
 //
-//   [TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256|TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256]
+//   [ECDHE-ECDSA-CHACHA20-POLY1305|ECDHE-ECDSA-AES128-GCM-SHA256]
 //
 // Once an equal-preference group is used, future directives must be
 // opcode-less. Inside an equal-preference group, spaces are not allowed.
@@ -2040,13 +2039,13 @@
 // On the client, ticket-based sessions use the same APIs as ID-based tickets.
 // Callers do not need to handle them differently.
 //
-// On the server, tickets are encrypted and authenticated with a secret key.
-// By default, an |SSL_CTX| will manage session ticket encryption keys by
-// generating them internally and rotating every 48 hours. Tickets are minted
-// and processed transparently. The following functions may be used to configure
-// a persistent key or implement more custom behavior, including key rotation
-// and sharing keys between multiple servers in a large deployment. There are
-// three levels of customisation possible:
+// On the server, tickets are encrypted and authenticated with a secret key. By
+// default, an |SSL_CTX| generates a key on creation and uses it for the
+// lifetime of the |SSL_CTX|. Tickets are minted and processed
+// transparently. The following functions may be used to configure a persistent
+// key or implement more custom behavior, including key rotation and sharing
+// keys between multiple servers in a large deployment. There are three levels
+// of customisation possible:
 //
 // 1) One can simply set the keys with |SSL_CTX_set_tlsext_ticket_keys|.
 // 2) One can configure an |EVP_CIPHER_CTX| and |HMAC_CTX| directly for
@@ -2112,7 +2111,7 @@
 
 // ssl_ticket_aead_result_t enumerates the possible results from decrypting a
 // ticket with an |SSL_TICKET_AEAD_METHOD|.
-enum ssl_ticket_aead_result_t BORINGSSL_ENUM_INT {
+enum ssl_ticket_aead_result_t {
   // ssl_ticket_aead_success indicates that the ticket was successfully
   // decrypted.
   ssl_ticket_aead_success,
@@ -2207,7 +2206,6 @@
 #define SSL_CURVE_SECP521R1 25
 #define SSL_CURVE_X25519 29
 #define SSL_CURVE_CECPQ2 16696
-#define SSL_CURVE_CECPQ2b 65074
 
 // SSL_get_curve_id returns the ID of the curve used by |ssl|'s most recently
 // completed handshake or 0 if not applicable.
@@ -2287,7 +2285,7 @@
                                    int (*callback)(int ok,
                                                    X509_STORE_CTX *store_ctx));
 
-enum ssl_verify_result_t BORINGSSL_ENUM_INT {
+enum ssl_verify_result_t {
   ssl_verify_ok,
   ssl_verify_invalid,
   ssl_verify_retry,
@@ -3035,19 +3033,6 @@
 OPENSSL_EXPORT const char *SSL_get_psk_identity(const SSL *ssl);
 
 
-// Post-quantum experiment signaling extension.
-//
-// *** EXPERIMENTAL ***
-//
-// In order to define a control group in an experiment of post-quantum key
-// agreements, clients and servers may send a non-IANA defined extension as a
-// signaling bit. These functions should not be used without explicit permission
-// from BoringSSL-team.
-
-OPENSSL_EXPORT void SSL_CTX_enable_pq_experiment_signal(SSL_CTX *ctx);
-OPENSSL_EXPORT int SSL_pq_experiment_signal_seen(const SSL *ssl);
-
-
 // QUIC transport parameters.
 //
 // draft-ietf-quic-tls defines a new TLS extension quic_transport_parameters
@@ -3114,10 +3099,6 @@
     SSL *ssl, CRYPTO_BUFFER *dc, EVP_PKEY *pkey,
     const SSL_PRIVATE_KEY_METHOD *key_method);
 
-// SSL_delegated_credential_used returns one if a delegated credential was used
-// and zero otherwise.
-OPENSSL_EXPORT int SSL_delegated_credential_used(const SSL *ssl);
-
 
 // QUIC integration.
 //
@@ -3154,7 +3135,7 @@
 
 // ssl_encryption_level_t represents a specific QUIC encryption level used to
 // transmit handshake messages.
-enum ssl_encryption_level_t BORINGSSL_ENUM_INT {
+enum ssl_encryption_level_t {
   ssl_encryption_initial = 0,
   ssl_encryption_early_data,
   ssl_encryption_handshake,
@@ -3310,10 +3291,6 @@
 // and |SSL_write| to send half-RTT data.
 OPENSSL_EXPORT int SSL_in_early_data(const SSL *ssl);
 
-// SSL_SESSION_early_data_capable returns whether early data would have been
-// attempted with |session| if enabled.
-OPENSSL_EXPORT int SSL_SESSION_early_data_capable(const SSL_SESSION *session);
-
 // SSL_early_data_accepted returns whether early data was accepted on the
 // handshake performed by |ssl|.
 OPENSSL_EXPORT int SSL_early_data_accepted(const SSL *ssl);
@@ -3327,45 +3304,12 @@
 // |SSL_ERROR_EARLY_DATA_REJECTED|.
 OPENSSL_EXPORT void SSL_reset_early_data_reject(SSL *ssl);
 
-// SSL_get_ticket_age_skew returns the difference, in seconds, between the
-// client-sent ticket age and the server-computed value in TLS 1.3 server
-// connections which resumed a session.
-OPENSSL_EXPORT int32_t SSL_get_ticket_age_skew(const SSL *ssl);
-
-enum ssl_early_data_reason_t BORINGSSL_ENUM_INT {
-  // The handshake has not progressed far enough for the 0-RTT status to be
-  // known.
-  ssl_early_data_unknown,
-  // 0-RTT is disabled for this connection.
-  ssl_early_data_disabled,
-  // 0-RTT was accepted.
-  ssl_early_data_accepted,
-  // The negotiated protocol version does not support 0-RTT.
-  ssl_early_data_protocol_version,
-  // The peer declined to offer or accept 0-RTT for an unknown reason.
-  ssl_early_data_peer_declined,
-  // The client did not offer a session.
-  ssl_early_data_no_session_offered,
-  // The server declined to resume the session.
-  ssl_early_data_session_not_resumed,
-  // The session does not support 0-RTT.
-  ssl_early_data_unsupported_for_session,
-  // The server sent a HelloRetryRequest.
-  ssl_early_data_hello_retry_request,
-  // The negotiated ALPN protocol did not match the session.
-  ssl_early_data_alpn_mismatch,
-  // The connection negotiated Channel ID, which is incompatible with 0-RTT.
-  ssl_early_data_channel_id,
-  // The connection negotiated token binding, which is incompatible with 0-RTT.
-  ssl_early_data_token_binding,
-  // The client and server ticket age were too far apart.
-  ssl_early_data_ticket_age_skew,
-};
-
-// SSL_get_early_data_reason returns details why 0-RTT was accepted or rejected
-// on |ssl|. This is primarily useful on the server.
-OPENSSL_EXPORT enum ssl_early_data_reason_t SSL_get_early_data_reason(
-    const SSL *ssl);
+// SSL_export_early_keying_material behaves like |SSL_export_keying_material|,
+// but it uses the early exporter. The operation will fail if |ssl| did not
+// negotiate TLS 1.3 or 0-RTT.
+OPENSSL_EXPORT int SSL_export_early_keying_material(
+    SSL *ssl, uint8_t *out, size_t out_len, const char *label, size_t label_len,
+    const uint8_t *context, size_t context_len);
 
 
 // Alerts.
@@ -3578,7 +3522,7 @@
 // such as HTTP/1.1, and not others, such as HTTP/2.
 OPENSSL_EXPORT void SSL_set_shed_handshake_config(SSL *ssl, int enable);
 
-enum ssl_renegotiate_mode_t BORINGSSL_ENUM_INT {
+enum ssl_renegotiate_mode_t {
   ssl_renegotiate_never = 0,
   ssl_renegotiate_once,
   ssl_renegotiate_freely,
@@ -3676,7 +3620,7 @@
 
 // ssl_select_cert_result_t enumerates the possible results from selecting a
 // certificate with |select_certificate_cb|.
-enum ssl_select_cert_result_t BORINGSSL_ENUM_INT {
+enum ssl_select_cert_result_t {
   // ssl_select_cert_success indicates that the certificate selection was
   // successful.
   ssl_select_cert_success = 1,
@@ -3707,8 +3651,6 @@
 // high-level operation on |ssl| to be retried at a later time, which will
 // result in another call to |cb|.
 //
-// |SSL_get_servername| may be used during this callback.
-//
 // Note: The |SSL_CLIENT_HELLO| is only valid for the duration of the callback
 // and is not valid while the handshake is paused.
 OPENSSL_EXPORT void SSL_CTX_set_select_certificate_cb(
@@ -3873,6 +3815,11 @@
 // record with |ssl|.
 OPENSSL_EXPORT size_t SSL_max_seal_overhead(const SSL *ssl);
 
+// SSL_get_ticket_age_skew returns the difference, in seconds, between the
+// client-sent ticket age and the server-computed value in TLS 1.3 server
+// connections which resumed a session.
+OPENSSL_EXPORT int32_t SSL_get_ticket_age_skew(const SSL *ssl);
+
 // SSL_CTX_set_false_start_allowed_without_alpn configures whether connections
 // on |ctx| may use False Start (if |SSL_MODE_ENABLE_FALSE_START| is enabled)
 // without negotiating ALPN.
diff --git a/src/include/openssl/tls1.h b/src/include/openssl/tls1.h
index e3209b6..384d102 100644
--- a/src/include/openssl/tls1.h
+++ b/src/include/openssl/tls1.h
@@ -244,9 +244,6 @@
 // This is not an IANA defined extension number
 #define TLSEXT_TYPE_channel_id 30032
 
-// This is not an IANA defined extension number
-#define TLSEXT_TYPE_pq_experiment_signal 54538
-
 // status request value from RFC 3546
 #define TLSEXT_STATUSTYPE_nothing (-1)
 #define TLSEXT_STATUSTYPE_ocsp 1
@@ -611,9 +608,9 @@
   "ECDHE-PSK-CHACHA20-POLY1305"
 
 // TLS 1.3 ciphersuites from RFC 8446.
-#define TLS1_TXT_AES_128_GCM_SHA256 "TLS_AES_128_GCM_SHA256"
-#define TLS1_TXT_AES_256_GCM_SHA384 "TLS_AES_256_GCM_SHA384"
-#define TLS1_TXT_CHACHA20_POLY1305_SHA256 "TLS_CHACHA20_POLY1305_SHA256"
+#define TLS1_TXT_AES_128_GCM_SHA256 "AEAD-AES128-GCM-SHA256"
+#define TLS1_TXT_AES_256_GCM_SHA384 "AEAD-AES256-GCM-SHA384"
+#define TLS1_TXT_CHACHA20_POLY1305_SHA256 "AEAD-CHACHA20-POLY1305-SHA256"
 
 
 #define TLS_CT_RSA_SIGN 1
diff --git a/src/include/openssl/x509_vfy.h b/src/include/openssl/x509_vfy.h
index f262334..86aa546 100644
--- a/src/include/openssl/x509_vfy.h
+++ b/src/include/openssl/x509_vfy.h
@@ -370,8 +370,6 @@
 /* Issuer lookup error */
 #define		X509_V_ERR_STORE_LOOKUP				66
 
-#define		X509_V_ERR_NAME_CONSTRAINTS_WITHOUT_SANS	67
-
 /* Certificate verify flags */
 
 /* Send issuer+subject checks to verify_cb */
diff --git a/src/include/openssl/x509v3.h b/src/include/openssl/x509v3.h
index b5db715..d2d39f8 100644
--- a/src/include/openssl/x509v3.h
+++ b/src/include/openssl/x509v3.h
@@ -703,8 +703,8 @@
 OPENSSL_EXPORT STACK_OF(OPENSSL_STRING) *X509_get1_ocsp(X509 *x);
 /* Flags for X509_check_* functions */
 
-/* Deprecated: this flag does nothing */
-#define X509_CHECK_FLAG_ALWAYS_CHECK_SUBJECT	0
+/* Always check subject name for host match even if subject alt names present */
+#define X509_CHECK_FLAG_ALWAYS_CHECK_SUBJECT	0x1
 /* Disable wildcard matching for dnsName fields and common name. */
 #define X509_CHECK_FLAG_NO_WILDCARDS	0x2
 /* Wildcards must not match a partial label. */
@@ -713,8 +713,6 @@
 #define X509_CHECK_FLAG_MULTI_LABEL_WILDCARDS 0x8
 /* Constraint verifier subdomain patterns to match a single labels. */
 #define X509_CHECK_FLAG_SINGLE_LABEL_SUBDOMAINS 0x10
-/* Skip the subject common name fallback if subjectAltNames is missing. */
-#define X509_CHECK_FLAG_NEVER_CHECK_SUBJECT 0x20
 /*
  * Match reference identifiers starting with "." to any sub-domain.
  * This is a non-public flag, turned on implicitly when the subject
diff --git a/src/sources.cmake b/src/sources.cmake
index 1569ce9..6213512 100644
--- a/src/sources.cmake
+++ b/src/sources.cmake
@@ -54,7 +54,6 @@
   crypto/fipsmodule/rand/ctrdrbg_vectors.txt
   crypto/hmac_extra/hmac_tests.txt
   crypto/poly1305/poly1305_tests.txt
-  crypto/siphash/siphash_tests.txt
   crypto/x509/many_constraints.pem
   crypto/x509/many_names1.pem
   crypto/x509/many_names2.pem
@@ -81,7 +80,6 @@
   third_party/wycheproof_testvectors/ecdsa_secp384r1_sha512_test.txt
   third_party/wycheproof_testvectors/ecdsa_secp521r1_sha512_test.txt
   third_party/wycheproof_testvectors/eddsa_test.txt
-  third_party/wycheproof_testvectors/kwp_test.txt
   third_party/wycheproof_testvectors/kw_test.txt
   third_party/wycheproof_testvectors/rsa_pss_2048_sha1_mgf1_20_test.txt
   third_party/wycheproof_testvectors/rsa_pss_2048_sha256_mgf1_0_test.txt
diff --git a/src/ssl/CMakeLists.txt b/src/ssl/CMakeLists.txt
index 0fb532e..dc89dca 100644
--- a/src/ssl/CMakeLists.txt
+++ b/src/ssl/CMakeLists.txt
@@ -50,7 +50,6 @@
 
   span_test.cc
   ssl_test.cc
-  ssl_c_test.c
 
   $<TARGET_OBJECTS:boringssl_gtest_main>
 )
diff --git a/src/ssl/d1_pkt.cc b/src/ssl/d1_pkt.cc
index dfb8a67..be595b0 100644
--- a/src/ssl/d1_pkt.cc
+++ b/src/ssl/d1_pkt.cc
@@ -256,7 +256,7 @@
   if (ret <= 0) {
     return ret;
   }
-  ssl->s3->alert_dispatch = false;
+  ssl->s3->alert_dispatch = 0;
 
   // If the alert is fatal, flush the BIO now.
   if (ssl->s3->send_alert[0] == SSL3_AL_FATAL) {
diff --git a/src/ssl/handoff.cc b/src/ssl/handoff.cc
index db5886a..0928015 100644
--- a/src/ssl/handoff.cc
+++ b/src/ssl/handoff.cc
@@ -450,10 +450,6 @@
   s3->aead_write_ctx->SetVersionIfNullCipher(ssl->version);
   s3->hs->cert_request = cert_request;
 
-  // TODO(davidben): When handoff for TLS 1.3 is added, serialize
-  // |early_data_reason| and stabilize the constants.
-  s3->early_data_reason = ssl_early_data_protocol_version;
-
   Array<uint8_t> key_block;
   if ((type == handback_after_session_resumption ||
        type == handback_after_handshake) &&
diff --git a/src/ssl/handshake.cc b/src/ssl/handshake.cc
index b8e0070..89be48f 100644
--- a/src/ssl/handshake.cc
+++ b/src/ssl/handshake.cc
@@ -648,7 +648,6 @@
         return -1;
 
       case ssl_hs_early_data_rejected:
-        assert(ssl->s3->early_data_reason != ssl_early_data_unknown);
         ssl->s3->rwstate = SSL_EARLY_DATA_REJECTED;
         // Cause |SSL_write| to start failing immediately.
         hs->can_early_write = false;
diff --git a/src/ssl/handshake_client.cc b/src/ssl/handshake_client.cc
index a53e430..b0de670 100644
--- a/src/ssl/handshake_client.cc
+++ b/src/ssl/handshake_client.cc
@@ -1071,8 +1071,13 @@
       return ssl_hs_error;
     }
 
-    if (!ssl_public_key_verify(ssl, signature, signature_algorithm,
-                               hs->peer_pubkey.get(), transcript_data)) {
+    bool sig_ok = ssl_public_key_verify(ssl, signature, signature_algorithm,
+                                        hs->peer_pubkey.get(), transcript_data);
+#if defined(BORINGSSL_UNSAFE_FUZZER_MODE)
+    sig_ok = true;
+    ERR_clear_error();
+#endif
+    if (!sig_ok) {
       // bad signature
       OPENSSL_PUT_ERROR(SSL, SSL_R_BAD_SIGNATURE);
       ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECRYPT_ERROR);
diff --git a/src/ssl/handshake_server.cc b/src/ssl/handshake_server.cc
index 36aa560..4622ad0 100644
--- a/src/ssl/handshake_server.cc
+++ b/src/ssl/handshake_server.cc
@@ -503,54 +503,6 @@
   return true;
 }
 
-static bool extract_sni(SSL_HANDSHAKE *hs, uint8_t *out_alert,
-                        const SSL_CLIENT_HELLO *client_hello) {
-  SSL *const ssl = hs->ssl;
-  CBS sni;
-  if (!ssl_client_hello_get_extension(client_hello, &sni,
-                                      TLSEXT_TYPE_server_name)) {
-    // No SNI extension to parse.
-    return true;
-  }
-
-  CBS server_name_list, host_name;
-  uint8_t name_type;
-  if (!CBS_get_u16_length_prefixed(&sni, &server_name_list) ||
-      !CBS_get_u8(&server_name_list, &name_type) ||
-      // Although the server_name extension was intended to be extensible to
-      // new name types and multiple names, OpenSSL 1.0.x had a bug which meant
-      // different name types will cause an error. Further, RFC 4366 originally
-      // defined syntax inextensibly. RFC 6066 corrected this mistake, but
-      // adding new name types is no longer feasible.
-      //
-      // Act as if the extensibility does not exist to simplify parsing.
-      !CBS_get_u16_length_prefixed(&server_name_list, &host_name) ||
-      CBS_len(&server_name_list) != 0 ||
-      CBS_len(&sni) != 0) {
-    *out_alert = SSL_AD_DECODE_ERROR;
-    return false;
-  }
-
-  if (name_type != TLSEXT_NAMETYPE_host_name ||
-      CBS_len(&host_name) == 0 ||
-      CBS_len(&host_name) > TLSEXT_MAXLEN_host_name ||
-      CBS_contains_zero_byte(&host_name)) {
-    *out_alert = SSL_AD_UNRECOGNIZED_NAME;
-    return false;
-  }
-
-  // Copy the hostname as a string.
-  char *raw = nullptr;
-  if (!CBS_strdup(&host_name, &raw)) {
-    *out_alert = SSL_AD_INTERNAL_ERROR;
-    return false;
-  }
-  ssl->s3->hostname.reset(raw);
-
-  hs->should_ack_sni = true;
-  return true;
-}
-
 static enum ssl_hs_wait_t do_read_client_hello(SSL_HANDSHAKE *hs) {
   SSL *const ssl = hs->ssl;
 
@@ -574,12 +526,6 @@
     return ssl_hs_handoff;
   }
 
-  uint8_t alert = SSL_AD_DECODE_ERROR;
-  if (!extract_sni(hs, &alert, &client_hello)) {
-    ssl_send_alert(ssl, SSL3_AL_FATAL, alert);
-    return ssl_hs_error;
-  }
-
   // Run the early callback.
   if (ssl->ctx->select_certificate_cb != NULL) {
     switch (ssl->ctx->select_certificate_cb(&client_hello)) {
@@ -607,6 +553,7 @@
     hs->apply_jdk11_workaround = true;
   }
 
+  uint8_t alert = SSL_AD_DECODE_ERROR;
   if (!negotiate_version(hs, &alert, &client_hello)) {
     ssl_send_alert(ssl, SSL3_AL_FATAL, alert);
     return ssl_hs_error;
@@ -688,8 +635,6 @@
     return ssl_hs_ok;
   }
 
-  ssl->s3->early_data_reason = ssl_early_data_protocol_version;
-
   SSL_CLIENT_HELLO client_hello;
   if (!ssl_client_hello_init(ssl, &client_hello, msg)) {
     return ssl_hs_error;
@@ -1463,8 +1408,14 @@
     return ssl_hs_error;
   }
 
-  if (!ssl_public_key_verify(ssl, signature, signature_algorithm,
-                             hs->peer_pubkey.get(), hs->transcript.buffer())) {
+  bool sig_ok =
+      ssl_public_key_verify(ssl, signature, signature_algorithm,
+                            hs->peer_pubkey.get(), hs->transcript.buffer());
+#if defined(BORINGSSL_UNSAFE_FUZZER_MODE)
+  sig_ok = true;
+  ERR_clear_error();
+#endif
+  if (!sig_ok) {
     OPENSSL_PUT_ERROR(SSL, SSL_R_BAD_SIGNATURE);
     ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECRYPT_ERROR);
     return ssl_hs_error;
diff --git a/src/ssl/internal.h b/src/ssl/internal.h
index b355c7f..ee2952a 100644
--- a/src/ssl/internal.h
+++ b/src/ssl/internal.h
@@ -465,9 +465,6 @@
 #define SSL_HANDSHAKE_MAC_SHA256 0x2
 #define SSL_HANDSHAKE_MAC_SHA384 0x4
 
-// SSL_MAX_MD_SIZE is size of the largest hash function used in TLS, SHA-384.
-#define SSL_MAX_MD_SIZE 48
-
 // An SSLCipherPreferenceList contains a list of SSL_CIPHERs with equal-
 // preference groups. For TLS clients, the groups are moot because the server
 // picks the cipher and groups cannot be expressed on the wire. However, for
@@ -563,12 +560,6 @@
 // it returns zero.
 size_t ssl_cipher_get_record_split_len(const SSL_CIPHER *cipher);
 
-// ssl_choose_tls13_cipher returns an |SSL_CIPHER| corresponding with the best
-// available from |cipher_suites| compatible with |version| and |group_id|. It
-// returns NULL if there isn't a compatible cipher.
-const SSL_CIPHER *ssl_choose_tls13_cipher(CBS cipher_suites, uint16_t version,
-                                          uint16_t group_id);
-
 
 // Transcript layer.
 
@@ -1455,13 +1446,13 @@
   uint16_t max_version = 0;
 
   size_t hash_len = 0;
-  uint8_t secret[SSL_MAX_MD_SIZE] = {0};
-  uint8_t early_traffic_secret[SSL_MAX_MD_SIZE] = {0};
-  uint8_t client_handshake_secret[SSL_MAX_MD_SIZE] = {0};
-  uint8_t server_handshake_secret[SSL_MAX_MD_SIZE] = {0};
-  uint8_t client_traffic_secret_0[SSL_MAX_MD_SIZE] = {0};
-  uint8_t server_traffic_secret_0[SSL_MAX_MD_SIZE] = {0};
-  uint8_t expected_client_finished[SSL_MAX_MD_SIZE] = {0};
+  uint8_t secret[EVP_MAX_MD_SIZE] = {0};
+  uint8_t early_traffic_secret[EVP_MAX_MD_SIZE] = {0};
+  uint8_t client_handshake_secret[EVP_MAX_MD_SIZE] = {0};
+  uint8_t server_handshake_secret[EVP_MAX_MD_SIZE] = {0};
+  uint8_t client_traffic_secret_0[EVP_MAX_MD_SIZE] = {0};
+  uint8_t server_traffic_secret_0[EVP_MAX_MD_SIZE] = {0};
+  uint8_t expected_client_finished[EVP_MAX_MD_SIZE] = {0};
 
   union {
     // sent is a bitset where the bits correspond to elements of kExtensions
@@ -2038,7 +2029,7 @@
   // check_client_CA_list returns one if |names| is a good list of X.509
   // distinguished names and zero otherwise. This is used to ensure that we can
   // reject unparsable values at handshake time when using crypto/x509.
-  bool (*check_client_CA_list)(STACK_OF(CRYPTO_BUFFER) *names);
+  int (*check_client_CA_list)(STACK_OF(CRYPTO_BUFFER) *names);
 
   // cert_clear frees and NULLs all X509 certificate-related state.
   void (*cert_clear)(CERT *cert);
@@ -2055,35 +2046,35 @@
 
   // session_cache_objects fills out |sess->x509_peer| and |sess->x509_chain|
   // from |sess->certs| and erases |sess->x509_chain_without_leaf|. It returns
-  // true on success or false on error.
-  bool (*session_cache_objects)(SSL_SESSION *session);
+  // one on success or zero on error.
+  int (*session_cache_objects)(SSL_SESSION *session);
   // session_dup duplicates any needed fields from |session| to |new_session|.
-  // It returns true on success or false on error.
-  bool (*session_dup)(SSL_SESSION *new_session, const SSL_SESSION *session);
+  // It returns one on success or zero on error.
+  int (*session_dup)(SSL_SESSION *new_session, const SSL_SESSION *session);
   // session_clear frees any X509-related state from |session|.
   void (*session_clear)(SSL_SESSION *session);
   // session_verify_cert_chain verifies the certificate chain in |session|,
-  // sets |session->verify_result| and returns true on success or false on
+  // sets |session->verify_result| and returns one on success or zero on
   // error.
-  bool (*session_verify_cert_chain)(SSL_SESSION *session, SSL_HANDSHAKE *ssl,
-                                    uint8_t *out_alert);
+  int (*session_verify_cert_chain)(SSL_SESSION *session, SSL_HANDSHAKE *ssl,
+                                   uint8_t *out_alert);
 
   // hs_flush_cached_ca_names drops any cached |X509_NAME|s from |hs|.
   void (*hs_flush_cached_ca_names)(SSL_HANDSHAKE *hs);
-  // ssl_new does any necessary initialisation of |hs|. It returns true on
-  // success or false on error.
-  bool (*ssl_new)(SSL_HANDSHAKE *hs);
+  // ssl_new does any neccessary initialisation of |hs|. It returns one on
+  // success or zero on error.
+  int (*ssl_new)(SSL_HANDSHAKE *hs);
   // ssl_free frees anything created by |ssl_new|.
   void (*ssl_config_free)(SSL_CONFIG *cfg);
   // ssl_flush_cached_client_CA drops any cached |X509_NAME|s from |ssl|.
   void (*ssl_flush_cached_client_CA)(SSL_CONFIG *cfg);
   // ssl_auto_chain_if_needed runs the deprecated auto-chaining logic if
   // necessary. On success, it updates |ssl|'s certificate configuration as
-  // needed and returns true. Otherwise, it returns false.
-  bool (*ssl_auto_chain_if_needed)(SSL_HANDSHAKE *hs);
-  // ssl_ctx_new does any necessary initialisation of |ctx|. It returns true on
-  // success or false on error.
-  bool (*ssl_ctx_new)(SSL_CTX *ctx);
+  // needed and returns one. Otherwise, it returns zero.
+  int (*ssl_auto_chain_if_needed)(SSL_HANDSHAKE *hs);
+  // ssl_ctx_new does any neccessary initialisation of |ctx|. It returns one on
+  // success or zero on error.
+  int (*ssl_ctx_new)(SSL_CTX *ctx);
   // ssl_ctx_free frees anything created by |ssl_ctx_new|.
   void (*ssl_ctx_free)(SSL_CTX *ctx);
   // ssl_ctx_flush_cached_client_CA drops any cached |X509_NAME|s from |ctx|.
@@ -2173,6 +2164,8 @@
   // the receive half of the connection.
   UniquePtr<ERR_SAVE_STATE> read_error;
 
+  int alert_dispatch = 0;
+
   int total_renegotiations = 0;
 
   // This holds a variable that indicates what we were doing when a 0 or -1 is
@@ -2228,10 +2221,6 @@
   // session_reused indicates whether a session was resumed.
   bool session_reused : 1;
 
-  // delegated_credential_used is whether we presented a delegated credential to
-  // the peer.
-  bool delegated_credential_used : 1;
-
   bool send_connection_binding : 1;
 
   // In a client, this means that the server supported Channel ID and that a
@@ -2255,13 +2244,6 @@
   // token_binding_negotiated is set if Token Binding was negotiated.
   bool token_binding_negotiated : 1;
 
-  // pq_experimental_signal_seen is true if the peer was observed
-  // sending/echoing the post-quantum experiment signal.
-  bool pq_experiment_signal_seen : 1;
-
-  // alert_dispatch is true there is an alert in |send_alert| to be sent.
-  bool alert_dispatch : 1;
-
   // hs_buf is the buffer of handshake data to process.
   UniquePtr<BUF_MEM> hs_buf;
 
@@ -2284,9 +2266,6 @@
   // which resumed a session.
   int32_t ticket_age_skew = 0;
 
-  // ssl_early_data_reason stores details on why 0-RTT was accepted or rejected.
-  enum ssl_early_data_reason_t early_data_reason = ssl_early_data_unknown;
-
   // aead_read_ctx is the current read cipher state.
   UniquePtr<SSLAEADContext> aead_read_ctx;
 
@@ -2297,12 +2276,14 @@
   // one.
   UniquePtr<SSL_HANDSHAKE> hs;
 
-  uint8_t write_traffic_secret[SSL_MAX_MD_SIZE] = {0};
-  uint8_t read_traffic_secret[SSL_MAX_MD_SIZE] = {0};
-  uint8_t exporter_secret[SSL_MAX_MD_SIZE] = {0};
+  uint8_t write_traffic_secret[EVP_MAX_MD_SIZE] = {0};
+  uint8_t read_traffic_secret[EVP_MAX_MD_SIZE] = {0};
+  uint8_t exporter_secret[EVP_MAX_MD_SIZE] = {0};
+  uint8_t early_exporter_secret[EVP_MAX_MD_SIZE] = {0};
   uint8_t write_traffic_secret_len = 0;
   uint8_t read_traffic_secret_len = 0;
   uint8_t exporter_secret_len = 0;
+  uint8_t early_exporter_secret_len = 0;
 
   // Connection binding to prevent renegotiation attacks
   uint8_t previous_client_finished[12] = {0};
@@ -2693,8 +2674,7 @@
 
 void ssl_update_cache(SSL_HANDSHAKE *hs, int mode);
 
-void ssl_send_alert(SSL *ssl, int level, int desc);
-int ssl_send_alert_impl(SSL *ssl, int level, int desc);
+int ssl_send_alert(SSL *ssl, int level, int desc);
 bool ssl3_get_message(const SSL *ssl, SSLMessage *out);
 ssl_open_record_t ssl3_open_handshake(SSL *ssl, size_t *out_consumed,
                                       uint8_t *out_alert, Span<uint8_t> in);
@@ -3190,11 +3170,6 @@
   // If enable_early_data is true, early data can be sent and accepted.
   bool enable_early_data : 1;
 
-  // pq_experiment_signal indicates that an empty extension should be sent
-  // (for clients) or echoed (for servers) to indicate participation in an
-  // experiment of post-quantum key exchanges.
-  bool pq_experiment_signal : 1;
-
  private:
   ~ssl_ctx_st();
   friend void SSL_CTX_free(SSL_CTX *);
diff --git a/src/ssl/s3_both.cc b/src/ssl/s3_both.cc
index 842ec67..27e9454 100644
--- a/src/ssl/s3_both.cc
+++ b/src/ssl/s3_both.cc
@@ -116,8 +116,6 @@
 #include <limits.h>
 #include <string.h>
 
-#include <tuple>
-
 #include <openssl/buf.h>
 #include <openssl/bytestring.h>
 #include <openssl/err.h>
@@ -654,72 +652,4 @@
   }
 }
 
-// CipherScorer produces a "score" for each possible cipher suite offered by
-// the client.
-class CipherScorer {
- public:
-  CipherScorer(uint16_t group_id)
-      : aes_is_fine_(EVP_has_aes_hardware()),
-        security_128_is_fine_(group_id != SSL_CURVE_CECPQ2 &&
-                              group_id != SSL_CURVE_CECPQ2b) {}
-
-  typedef std::tuple<bool, bool, bool> Score;
-
-  // MinScore returns a |Score| that will compare less than the score of all
-  // cipher suites.
-  Score MinScore() const {
-    return Score(false, false, false);
-  }
-
-  Score Evaluate(const SSL_CIPHER *a) const {
-    return Score(
-        // Something is always preferable to nothing.
-        true,
-        // Either 128-bit is fine, or 256-bit is preferred.
-        security_128_is_fine_ || a->algorithm_enc != SSL_AES128GCM,
-        // Either AES is fine, or else ChaCha20 is preferred.
-        aes_is_fine_ || a->algorithm_enc == SSL_CHACHA20POLY1305);
-  }
-
- private:
-  const bool aes_is_fine_;
-  const bool security_128_is_fine_;
-};
-
-const SSL_CIPHER *ssl_choose_tls13_cipher(CBS cipher_suites, uint16_t version,
-                                          uint16_t group_id) {
-  if (CBS_len(&cipher_suites) % 2 != 0) {
-    return nullptr;
-  }
-
-  const SSL_CIPHER *best = nullptr;
-  CipherScorer scorer(group_id);
-  CipherScorer::Score best_score = scorer.MinScore();
-
-  while (CBS_len(&cipher_suites) > 0) {
-    uint16_t cipher_suite;
-    if (!CBS_get_u16(&cipher_suites, &cipher_suite)) {
-      return nullptr;
-    }
-
-    // Limit to TLS 1.3 ciphers we know about.
-    const SSL_CIPHER *candidate = SSL_get_cipher_by_value(cipher_suite);
-    if (candidate == nullptr ||
-        SSL_CIPHER_get_min_version(candidate) > version ||
-        SSL_CIPHER_get_max_version(candidate) < version) {
-      continue;
-    }
-
-    const CipherScorer::Score candidate_score = scorer.Evaluate(candidate);
-    // |candidate_score| must be larger to displace the current choice. That way
-    // the client's order controls between ciphers with an equal score.
-    if (candidate_score > best_score) {
-      best = candidate;
-      best_score = candidate_score;
-    }
-  }
-
-  return best;
-}
-
 BSSL_NAMESPACE_END
diff --git a/src/ssl/s3_lib.cc b/src/ssl/s3_lib.cc
index 41dd588..0e0770c 100644
--- a/src/ssl/s3_lib.cc
+++ b/src/ssl/s3_lib.cc
@@ -172,16 +172,13 @@
       has_message(false),
       initial_handshake_complete(false),
       session_reused(false),
-      delegated_credential_used(false),
       send_connection_binding(false),
       channel_id_valid(false),
       key_update_pending(false),
       wpend_pending(false),
       early_data_accepted(false),
       tls13_downgrade(false),
-      token_binding_negotiated(false),
-      pq_experiment_signal_seen(false),
-      alert_dispatch(false) {}
+      token_binding_negotiated(false) {}
 
 SSL3_STATE::~SSL3_STATE() {}
 
diff --git a/src/ssl/s3_pkt.cc b/src/ssl/s3_pkt.cc
index a54bb00..abc6798 100644
--- a/src/ssl/s3_pkt.cc
+++ b/src/ssl/s3_pkt.cc
@@ -118,7 +118,6 @@
 #include <openssl/mem.h>
 #include <openssl/rand.h>
 
-#include "../crypto/err/internal.h"
 #include "../crypto/internal.h"
 #include "internal.h"
 
@@ -382,24 +381,7 @@
   return ssl_open_record_success;
 }
 
-void ssl_send_alert(SSL *ssl, int level, int desc) {
-  // This function is called in response to a fatal error from the peer. Ignore
-  // any failures writing the alert and report only the original error. In
-  // particular, if the transport uses |SSL_write|, our existing error will be
-  // clobbered so we must save and restore the error queue. See
-  // https://crbug.com/959305.
-  //
-  // TODO(davidben): Return the alert out of the handshake, rather than calling
-  // this function internally everywhere.
-  //
-  // TODO(davidben): This does not allow retrying if the alert hit EAGAIN. See
-  // https://crbug.com/boringssl/130.
-  UniquePtr<ERR_SAVE_STATE> err_state(ERR_save_state());
-  ssl_send_alert_impl(ssl, level, desc);
-  ERR_restore_state(err_state.get());
-}
-
-int ssl_send_alert_impl(SSL *ssl, int level, int desc) {
+int ssl_send_alert(SSL *ssl, int level, int desc) {
   // It is illegal to send an alert when we've already sent a closing one.
   if (ssl->s3->write_shutdown != ssl_shutdown_none) {
     OPENSSL_PUT_ERROR(SSL, SSL_R_PROTOCOL_IS_SHUTDOWN);
@@ -414,7 +396,7 @@
     ssl->s3->write_shutdown = ssl_shutdown_error;
   }
 
-  ssl->s3->alert_dispatch = true;
+  ssl->s3->alert_dispatch = 1;
   ssl->s3->send_alert[0] = level;
   ssl->s3->send_alert[1] = desc;
   if (ssl->s3->write_buffer.empty()) {
@@ -441,7 +423,7 @@
     }
   }
 
-  ssl->s3->alert_dispatch = false;
+  ssl->s3->alert_dispatch = 0;
 
   // If the alert is fatal, flush the BIO now.
   if (ssl->s3->send_alert[0] == SSL3_AL_FATAL) {
diff --git a/src/ssl/ssl_c_test.c b/src/ssl/ssl_c_test.c
deleted file mode 100644
index 02f8655..0000000
--- a/src/ssl/ssl_c_test.c
+++ /dev/null
@@ -1,15 +0,0 @@
-#include <openssl/ssl.h>
-
-int BORINGSSL_enum_c_type_test(void);
-
-int BORINGSSL_enum_c_type_test(void) {
-#if defined(__cplusplus)
-#error "This is testing the behaviour of the C compiler."
-#error "It's pointless to build it in C++ mode."
-#endif
-
-  // In C++, the enums in ssl.h are explicitly typed as ints to allow them to
-  // be predeclared. This function confirms that the C compiler believes them
-  // to be the same size as ints. They may differ in signedness, however.
-  return sizeof(enum ssl_private_key_result_t) == sizeof(int);
-}
diff --git a/src/ssl/ssl_cert.cc b/src/ssl/ssl_cert.cc
index b565a35..54df38f 100644
--- a/src/ssl/ssl_cert.cc
+++ b/src/ssl/ssl_cert.cc
@@ -1010,7 +1010,3 @@
 
   return cert_set_dc(ssl->config->cert.get(), dc, pkey, key_method);
 }
-
-int SSL_delegated_credential_used(const SSL *ssl) {
-  return ssl->s3->delegated_credential_used;
-}
diff --git a/src/ssl/ssl_key_share.cc b/src/ssl/ssl_key_share.cc
index 826fb1a..78d2aa1 100644
--- a/src/ssl/ssl_key_share.cc
+++ b/src/ssl/ssl_key_share.cc
@@ -31,7 +31,7 @@
 
 #include "internal.h"
 #include "../crypto/internal.h"
-#include "../third_party/sike/sike.h"
+
 
 BSSL_NAMESPACE_BEGIN
 
@@ -300,87 +300,6 @@
   HRSS_private_key hrss_private_key_;
 };
 
-class CECPQ2bKeyShare : public SSLKeyShare {
- public:
-  uint16_t GroupID() const override { return SSL_CURVE_CECPQ2b; }
-
-  bool Offer(CBB *out) override {
-    uint8_t public_x25519[32] = {0};
-    X25519_keypair(public_x25519, private_x25519_);
-    if (!SIKE_keypair(private_sike_, public_sike_)) {
-      return false;
-    }
-
-    return CBB_add_bytes(out, public_x25519, sizeof(public_x25519)) &&
-           CBB_add_bytes(out, public_sike_, sizeof(public_sike_));
-  }
-
-  bool Accept(CBB *out_public_key, Array<uint8_t> *out_secret,
-              uint8_t *out_alert, Span<const uint8_t> peer_key) override {
-    uint8_t public_x25519[32];
-    uint8_t private_x25519[32];
-    uint8_t sike_ciphertext[SIKE_CT_BYTESZ] = {0};
-
-    *out_alert = SSL_AD_INTERNAL_ERROR;
-
-    if (peer_key.size() != sizeof(public_x25519) + SIKE_PUB_BYTESZ) {
-      *out_alert = SSL_AD_DECODE_ERROR;
-      OPENSSL_PUT_ERROR(SSL, SSL_R_BAD_ECPOINT);
-      return false;
-    }
-
-    Array<uint8_t> secret;
-    if (!secret.Init(sizeof(private_x25519_) + SIKE_SS_BYTESZ)) {
-      OPENSSL_PUT_ERROR(SSL, ERR_R_MALLOC_FAILURE);
-      return false;
-    }
-
-    X25519_keypair(public_x25519, private_x25519);
-    if (!X25519(secret.data(), private_x25519, peer_key.data())) {
-      *out_alert = SSL_AD_DECODE_ERROR;
-      OPENSSL_PUT_ERROR(SSL, SSL_R_BAD_ECPOINT);
-      return false;
-    }
-
-    SIKE_encaps(secret.data() + sizeof(private_x25519_), sike_ciphertext,
-                peer_key.data() + sizeof(public_x25519));
-    *out_secret = std::move(secret);
-
-    return CBB_add_bytes(out_public_key, public_x25519,
-                         sizeof(public_x25519)) &&
-           CBB_add_bytes(out_public_key, sike_ciphertext,
-                         sizeof(sike_ciphertext));
-  }
-
-  bool Finish(Array<uint8_t> *out_secret, uint8_t *out_alert,
-              Span<const uint8_t> peer_key) override {
-    *out_alert = SSL_AD_INTERNAL_ERROR;
-
-    Array<uint8_t> secret;
-    if (!secret.Init(sizeof(private_x25519_) + SIKE_SS_BYTESZ)) {
-      OPENSSL_PUT_ERROR(SSL, ERR_R_MALLOC_FAILURE);
-      return false;
-    }
-
-    if (peer_key.size() != 32 + SIKE_CT_BYTESZ ||
-        !X25519(secret.data(), private_x25519_, peer_key.data())) {
-      *out_alert = SSL_AD_DECODE_ERROR;
-      OPENSSL_PUT_ERROR(SSL, SSL_R_BAD_ECPOINT);
-      return false;
-    }
-
-    SIKE_decaps(secret.data() + sizeof(private_x25519_), peer_key.data() + 32,
-                public_sike_, private_sike_);
-    *out_secret = std::move(secret);
-    return true;
-  }
-
- private:
-  uint8_t private_x25519_[32];
-  uint8_t private_sike_[SIKE_PRV_BYTESZ];
-  uint8_t public_sike_[SIKE_PUB_BYTESZ];
-};
-
 CONSTEXPR_ARRAY NamedGroup kNamedGroups[] = {
     {NID_secp224r1, SSL_CURVE_SECP224R1, "P-224", "secp224r1"},
     {NID_X9_62_prime256v1, SSL_CURVE_SECP256R1, "P-256", "prime256v1"},
@@ -388,7 +307,6 @@
     {NID_secp521r1, SSL_CURVE_SECP521R1, "P-521", "secp521r1"},
     {NID_X25519, SSL_CURVE_X25519, "X25519", "x25519"},
     {NID_CECPQ2, SSL_CURVE_CECPQ2, "CECPQ2", "CECPQ2"},
-    {NID_CECPQ2b, SSL_CURVE_CECPQ2b, "CECPQ2b", "CECPQ2b"},
 };
 
 }  // namespace
@@ -415,8 +333,6 @@
       return UniquePtr<SSLKeyShare>(New<X25519KeyShare>());
     case SSL_CURVE_CECPQ2:
       return UniquePtr<SSLKeyShare>(New<CECPQ2KeyShare>());
-    case SSL_CURVE_CECPQ2b:
-      return UniquePtr<SSLKeyShare>(New<CECPQ2bKeyShare>());
     default:
       return nullptr;
   }
diff --git a/src/ssl/ssl_lib.cc b/src/ssl/ssl_lib.cc
index 00ee7da..f9910f7 100644
--- a/src/ssl/ssl_lib.cc
+++ b/src/ssl/ssl_lib.cc
@@ -569,8 +569,7 @@
       false_start_allowed_without_alpn(false),
       ignore_tls13_downgrade(false),
       handoff(false),
-      enable_early_data(false),
-      pq_experiment_signal(false) {
+      enable_early_data(false) {
   CRYPTO_MUTEX_init(&lock);
   CRYPTO_new_ex_data(&ex_data);
 }
@@ -1196,7 +1195,7 @@
 
   if (ssl->s3->write_shutdown != ssl_shutdown_close_notify) {
     // Send a close_notify.
-    if (ssl_send_alert_impl(ssl, SSL3_AL_WARNING, SSL_AD_CLOSE_NOTIFY) <= 0) {
+    if (ssl_send_alert(ssl, SSL3_AL_WARNING, SSL_AD_CLOSE_NOTIFY) <= 0) {
       return -1;
     }
   } else if (ssl->s3->alert_dispatch) {
@@ -1243,15 +1242,7 @@
     return ssl->method->dispatch_alert(ssl);
   }
 
-  return ssl_send_alert_impl(ssl, SSL3_AL_FATAL, alert);
-}
-
-void SSL_CTX_enable_pq_experiment_signal(SSL_CTX *ctx) {
-  ctx->pq_experiment_signal = true;
-}
-
-int SSL_pq_experiment_signal_seen(const SSL *ssl) {
-  return ssl->s3->pq_experiment_signal_seen;
+  return ssl_send_alert(ssl, SSL3_AL_FATAL, alert);
 }
 
 int SSL_set_quic_transport_params(SSL *ssl, const uint8_t *params,
@@ -1303,10 +1294,6 @@
   ssl->s3->wpend_pending = false;
 }
 
-enum ssl_early_data_reason_t SSL_get_early_data_reason(const SSL *ssl) {
-  return ssl->s3->early_data_reason;
-}
-
 static int bio_retry_reason_to_error(int reason) {
   switch (reason) {
     case BIO_RR_CONNECT:
diff --git a/src/ssl/ssl_privkey.cc b/src/ssl/ssl_privkey.cc
index 23f8d12..1ddb1b1 100644
--- a/src/ssl/ssl_privkey.cc
+++ b/src/ssl/ssl_privkey.cc
@@ -236,16 +236,9 @@
                            uint16_t sigalg, EVP_PKEY *pkey,
                            Span<const uint8_t> in) {
   ScopedEVP_MD_CTX ctx;
-  if (!setup_ctx(ssl, ctx.get(), pkey, sigalg, true /* verify */)) {
-    return false;
-  }
-  bool ok = EVP_DigestVerify(ctx.get(), signature.data(), signature.size(),
-                             in.data(), in.size());
-#if defined(BORINGSSL_UNSAFE_FUZZER_MODE)
-  ok = true;
-  ERR_clear_error();
-#endif
-  return ok;
+  return setup_ctx(ssl, ctx.get(), pkey, sigalg, true /* verify */) &&
+         EVP_DigestVerify(ctx.get(), signature.data(), signature.size(),
+                          in.data(), in.size());
 }
 
 enum ssl_private_key_result_t ssl_private_key_decrypt(SSL_HANDSHAKE *hs,
diff --git a/src/ssl/ssl_session.cc b/src/ssl/ssl_session.cc
index bb04b1a..927dd1b 100644
--- a/src/ssl/ssl_session.cc
+++ b/src/ssl/ssl_session.cc
@@ -1044,11 +1044,6 @@
   }
 }
 
-int SSL_SESSION_early_data_capable(const SSL_SESSION *session) {
-  return ssl_session_protocol_version(session) >= TLS1_3_VERSION &&
-         session->ticket_max_early_data != 0;
-}
-
 SSL_SESSION *SSL_magic_pending_session_ptr(void) {
   return (SSL_SESSION *)&g_pending_session_magic;
 }
diff --git a/src/ssl/ssl_test.cc b/src/ssl/ssl_test.cc
index 6f180c7..d01b649 100644
--- a/src/ssl/ssl_test.cc
+++ b/src/ssl/ssl_test.cc
@@ -737,77 +737,103 @@
   return true;
 }
 
-TEST(SSLTest, SessionEncoding) {
-  for (const char *input_b64 : {
-           kOpenSSLSession,
-           kCustomSession,
-           kBoringSSLSession,
-       }) {
-    SCOPED_TRACE(std::string(input_b64));
-    // Decode the input.
-    std::vector<uint8_t> input;
-    ASSERT_TRUE(DecodeBase64(&input, input_b64));
+static bool TestSSL_SESSIONEncoding(const char *input_b64) {
+  const uint8_t *cptr;
+  uint8_t *ptr;
 
-    // Verify the SSL_SESSION decodes.
-    bssl::UniquePtr<SSL_CTX> ssl_ctx(SSL_CTX_new(TLS_method()));
-    ASSERT_TRUE(ssl_ctx);
-    bssl::UniquePtr<SSL_SESSION> session(
-        SSL_SESSION_from_bytes(input.data(), input.size(), ssl_ctx.get()));
-    ASSERT_TRUE(session) << "SSL_SESSION_from_bytes failed";
-
-    // Verify the SSL_SESSION encoding round-trips.
-    size_t encoded_len;
-    bssl::UniquePtr<uint8_t> encoded;
-    uint8_t *encoded_raw;
-    ASSERT_TRUE(SSL_SESSION_to_bytes(session.get(), &encoded_raw, &encoded_len))
-        << "SSL_SESSION_to_bytes failed";
-    encoded.reset(encoded_raw);
-    EXPECT_EQ(Bytes(encoded.get(), encoded_len), Bytes(input))
-        << "SSL_SESSION_to_bytes did not round-trip";
-
-    // Verify the SSL_SESSION also decodes with the legacy API.
-    const uint8_t *cptr = input.data();
-    session.reset(d2i_SSL_SESSION(NULL, &cptr, input.size()));
-    ASSERT_TRUE(session) << "d2i_SSL_SESSION failed";
-    EXPECT_EQ(cptr, input.data() + input.size());
-
-    // Verify the SSL_SESSION encoding round-trips via the legacy API.
-    int len = i2d_SSL_SESSION(session.get(), NULL);
-    ASSERT_GT(len, 0) << "i2d_SSL_SESSION failed";
-    ASSERT_EQ(static_cast<size_t>(len), input.size())
-        << "i2d_SSL_SESSION(NULL) returned invalid length";
-
-    encoded.reset((uint8_t *)OPENSSL_malloc(input.size()));
-    ASSERT_TRUE(encoded);
-
-    uint8_t *ptr = encoded.get();
-    len = i2d_SSL_SESSION(session.get(), &ptr);
-    ASSERT_GT(len, 0) << "i2d_SSL_SESSION failed";
-    ASSERT_EQ(static_cast<size_t>(len), input.size())
-        << "i2d_SSL_SESSION(NULL) returned invalid length";
-    ASSERT_EQ(ptr, encoded.get() + input.size())
-        << "i2d_SSL_SESSION did not advance ptr correctly";
-    EXPECT_EQ(Bytes(encoded.get(), encoded_len), Bytes(input))
-        << "SSL_SESSION_to_bytes did not round-trip";
+  // Decode the input.
+  std::vector<uint8_t> input;
+  if (!DecodeBase64(&input, input_b64)) {
+    return false;
   }
 
-  for (const char *input_b64 : {
-           kBadSessionExtraField,
-           kBadSessionVersion,
-           kBadSessionTrailingData,
-       }) {
-    SCOPED_TRACE(std::string(input_b64));
-    std::vector<uint8_t> input;
-    ASSERT_TRUE(DecodeBase64(&input, input_b64));
-
-    // Verify that the SSL_SESSION fails to decode.
-    bssl::UniquePtr<SSL_CTX> ssl_ctx(SSL_CTX_new(TLS_method()));
-    ASSERT_TRUE(ssl_ctx);
-    bssl::UniquePtr<SSL_SESSION> session(
-        SSL_SESSION_from_bytes(input.data(), input.size(), ssl_ctx.get()));
-    EXPECT_FALSE(session) << "SSL_SESSION_from_bytes unexpectedly succeeded";
-    ERR_clear_error();
+  // Verify the SSL_SESSION decodes.
+  bssl::UniquePtr<SSL_CTX> ssl_ctx(SSL_CTX_new(TLS_method()));
+  if (!ssl_ctx) {
+    return false;
   }
+  bssl::UniquePtr<SSL_SESSION> session(
+      SSL_SESSION_from_bytes(input.data(), input.size(), ssl_ctx.get()));
+  if (!session) {
+    fprintf(stderr, "SSL_SESSION_from_bytes failed\n");
+    return false;
+  }
+
+  // Verify the SSL_SESSION encoding round-trips.
+  size_t encoded_len;
+  bssl::UniquePtr<uint8_t> encoded;
+  uint8_t *encoded_raw;
+  if (!SSL_SESSION_to_bytes(session.get(), &encoded_raw, &encoded_len)) {
+    fprintf(stderr, "SSL_SESSION_to_bytes failed\n");
+    return false;
+  }
+  encoded.reset(encoded_raw);
+  if (encoded_len != input.size() ||
+      OPENSSL_memcmp(input.data(), encoded.get(), input.size()) != 0) {
+    fprintf(stderr, "SSL_SESSION_to_bytes did not round-trip\n");
+    hexdump(stderr, "Before: ", input.data(), input.size());
+    hexdump(stderr, "After:  ", encoded_raw, encoded_len);
+    return false;
+  }
+
+  // Verify the SSL_SESSION also decodes with the legacy API.
+  cptr = input.data();
+  session.reset(d2i_SSL_SESSION(NULL, &cptr, input.size()));
+  if (!session || cptr != input.data() + input.size()) {
+    fprintf(stderr, "d2i_SSL_SESSION failed\n");
+    return false;
+  }
+
+  // Verify the SSL_SESSION encoding round-trips via the legacy API.
+  int len = i2d_SSL_SESSION(session.get(), NULL);
+  if (len < 0 || (size_t)len != input.size()) {
+    fprintf(stderr, "i2d_SSL_SESSION(NULL) returned invalid length\n");
+    return false;
+  }
+
+  encoded.reset((uint8_t *)OPENSSL_malloc(input.size()));
+  if (!encoded) {
+    fprintf(stderr, "malloc failed\n");
+    return false;
+  }
+
+  ptr = encoded.get();
+  len = i2d_SSL_SESSION(session.get(), &ptr);
+  if (len < 0 || (size_t)len != input.size()) {
+    fprintf(stderr, "i2d_SSL_SESSION returned invalid length\n");
+    return false;
+  }
+  if (ptr != encoded.get() + input.size()) {
+    fprintf(stderr, "i2d_SSL_SESSION did not advance ptr correctly\n");
+    return false;
+  }
+  if (OPENSSL_memcmp(input.data(), encoded.get(), input.size()) != 0) {
+    fprintf(stderr, "i2d_SSL_SESSION did not round-trip\n");
+    return false;
+  }
+
+  return true;
+}
+
+static bool TestBadSSL_SESSIONEncoding(const char *input_b64) {
+  std::vector<uint8_t> input;
+  if (!DecodeBase64(&input, input_b64)) {
+    return false;
+  }
+
+  // Verify that the SSL_SESSION fails to decode.
+  bssl::UniquePtr<SSL_CTX> ssl_ctx(SSL_CTX_new(TLS_method()));
+  if (!ssl_ctx) {
+    return false;
+  }
+  bssl::UniquePtr<SSL_SESSION> session(
+      SSL_SESSION_from_bytes(input.data(), input.size(), ssl_ctx.get()));
+  if (session) {
+    fprintf(stderr, "SSL_SESSION_from_bytes unexpectedly succeeded\n");
+    return false;
+  }
+  ERR_clear_error();
+  return true;
 }
 
 static void ExpectDefaultVersion(uint16_t min_version, uint16_t max_version,
@@ -1061,67 +1087,63 @@
   return client_hello.size() - SSL3_RT_HEADER_LENGTH;
 }
 
-TEST(SSLTest, Padding) {
-  struct PaddingVersions {
-    uint16_t max_version, session_version;
-  };
-  static const PaddingVersions kPaddingVersions[] = {
-      // Test the padding extension at TLS 1.2.
-      {TLS1_2_VERSION, TLS1_2_VERSION},
-      // Test the padding extension at TLS 1.3 with a TLS 1.2 session, so there
-      // will be no PSK binder after the padding extension.
-      {TLS1_3_VERSION, TLS1_2_VERSION},
-      // Test the padding extension at TLS 1.3 with a TLS 1.3 session, so there
-      // will be a PSK binder after the padding extension.
-      {TLS1_3_VERSION, TLS1_3_VERSION},
+struct PaddingTest {
+  size_t input_len, padded_len;
+};
 
-  };
+static const PaddingTest kPaddingTests[] = {
+    // ClientHellos of length below 0x100 do not require padding.
+    {0xfe, 0xfe},
+    {0xff, 0xff},
+    // ClientHellos of length 0x100 through 0x1fb are padded up to 0x200.
+    {0x100, 0x200},
+    {0x123, 0x200},
+    {0x1fb, 0x200},
+    // ClientHellos of length 0x1fc through 0x1ff get padded beyond 0x200. The
+    // padding extension takes a minimum of four bytes plus one required content
+    // byte. (To work around yet more server bugs, we avoid empty final
+    // extensions.)
+    {0x1fc, 0x201},
+    {0x1fd, 0x202},
+    {0x1fe, 0x203},
+    {0x1ff, 0x204},
+    // Finally, larger ClientHellos need no padding.
+    {0x200, 0x200},
+    {0x201, 0x201},
+};
 
-  struct PaddingTest {
-    size_t input_len, padded_len;
-  };
-  static const PaddingTest kPaddingTests[] = {
-      // ClientHellos of length below 0x100 do not require padding.
-      {0xfe, 0xfe},
-      {0xff, 0xff},
-      // ClientHellos of length 0x100 through 0x1fb are padded up to 0x200.
-      {0x100, 0x200},
-      {0x123, 0x200},
-      {0x1fb, 0x200},
-      // ClientHellos of length 0x1fc through 0x1ff get padded beyond 0x200. The
-      // padding extension takes a minimum of four bytes plus one required
-      // content
-      // byte. (To work around yet more server bugs, we avoid empty final
-      // extensions.)
-      {0x1fc, 0x201},
-      {0x1fd, 0x202},
-      {0x1fe, 0x203},
-      {0x1ff, 0x204},
-      // Finally, larger ClientHellos need no padding.
-      {0x200, 0x200},
-      {0x201, 0x201},
-  };
+static bool TestPaddingExtension(uint16_t max_version,
+                                 uint16_t session_version) {
+  // Sample a baseline length.
+  size_t base_len = GetClientHelloLen(max_version, session_version, 1);
+  if (base_len == 0) {
+    return false;
+  }
 
-  for (const PaddingVersions &versions : kPaddingVersions) {
-    SCOPED_TRACE(versions.max_version);
-    SCOPED_TRACE(versions.session_version);
+  for (const PaddingTest &test : kPaddingTests) {
+    if (base_len > test.input_len) {
+      fprintf(stderr,
+              "Baseline ClientHello too long (max_version = %04x, "
+              "session_version = %04x).\n",
+              max_version, session_version);
+      return false;
+    }
 
-    // Sample a baseline length.
-    size_t base_len =
-        GetClientHelloLen(versions.max_version, versions.session_version, 1);
-    ASSERT_NE(base_len, 0u) << "Baseline length could not be sampled";
-
-    for (const PaddingTest &test : kPaddingTests) {
-      SCOPED_TRACE(test.input_len);
-      ASSERT_LE(base_len, test.input_len) << "Baseline ClientHello too long";
-
-      size_t padded_len =
-          GetClientHelloLen(versions.max_version, versions.session_version,
-                            1 + test.input_len - base_len);
-      EXPECT_EQ(padded_len, test.padded_len)
-          << "ClientHello was not padded to expected length";
+    size_t padded_len = GetClientHelloLen(max_version, session_version,
+                                          1 + test.input_len - base_len);
+    if (padded_len != test.padded_len) {
+      fprintf(stderr,
+              "%u-byte ClientHello padded to %u bytes, not %u (max_version = "
+              "%04x, session_version = %04x).\n",
+              static_cast<unsigned>(test.input_len),
+              static_cast<unsigned>(padded_len),
+              static_cast<unsigned>(test.padded_len), max_version,
+              session_version);
+      return false;
     }
   }
+
+  return true;
 }
 
 static bssl::UniquePtr<X509> GetTestCertificate() {
@@ -1528,37 +1550,6 @@
   return true;
 }
 
-static bool FlushNewSessionTickets(SSL *client, SSL *server) {
-  // NewSessionTickets are deferred on the server to |SSL_write|, and clients do
-  // not pick them up until |SSL_read|.
-  for (;;) {
-    int server_ret = SSL_write(server, nullptr, 0);
-    int server_err = SSL_get_error(server, server_ret);
-    // The server may either succeed (|server_ret| is zero) or block on write
-    // (|server_ret| is -1 and |server_err| is |SSL_ERROR_WANT_WRITE|).
-    if (server_ret > 0 ||
-        (server_ret < 0 && server_err != SSL_ERROR_WANT_WRITE)) {
-      fprintf(stderr, "Unexpected server result: %d %d\n", server_ret,
-              server_err);
-      return false;
-    }
-
-    int client_ret = SSL_read(client, nullptr, 0);
-    int client_err = SSL_get_error(client, client_ret);
-    // The client must always block on read.
-    if (client_ret != -1 || client_err != SSL_ERROR_WANT_READ) {
-      fprintf(stderr, "Unexpected client result: %d %d\n", client_ret,
-              client_err);
-      return false;
-    }
-
-    // The server flushed everything it had to write.
-    if (server_ret == 0) {
-      return true;
-    }
-  }
-}
-
 struct ClientConfig {
   SSL_SESSION *session = nullptr;
   std::string servername;
@@ -1670,7 +1661,9 @@
 
   // Drain any post-handshake messages to ensure there are no unread records
   // on either end.
-  ASSERT_TRUE(FlushNewSessionTickets(client_.get(), server_.get()));
+  uint8_t byte = 0;
+  ASSERT_LE(SSL_read(client_.get(), &byte, 1), 0);
+  ASSERT_LE(SSL_read(server_.get(), &byte, 1), 0);
 
   uint64_t client_read_seq = SSL_get_read_sequence(client_.get());
   uint64_t client_write_seq = SSL_get_write_sequence(client_.get());
@@ -1694,7 +1687,6 @@
   }
 
   // Send a record from client to server.
-  uint8_t byte = 0;
   EXPECT_EQ(SSL_write(client_.get(), &byte, 1), 1);
   EXPECT_EQ(SSL_read(server_.get(), &byte, 1), 1);
 
@@ -2092,12 +2084,14 @@
   // Connect client and server to get a session.
   bssl::UniquePtr<SSL> client, server;
   if (!ConnectClientAndServer(&client, &server, client_ctx, server_ctx,
-                              config) ||
-      !FlushNewSessionTickets(client.get(), server.get())) {
+                              config)) {
     fprintf(stderr, "Failed to connect client and server.\n");
     return nullptr;
   }
 
+  // Run the read loop to account for post-handshake tickets in TLS 1.3.
+  SSL_read(client.get(), nullptr, 0);
+
   SSL_CTX_sess_set_new_cb(client_ctx, nullptr);
 
   if (!g_last_session) {
@@ -2131,8 +2125,7 @@
   ClientConfig config;
   config.session = session;
   if (!ConnectClientAndServer(&client, &server, client_ctx, server_ctx,
-                              config) ||
-      !FlushNewSessionTickets(client.get(), server.get())) {
+                              config)) {
     fprintf(stderr, "Failed to connect client and server.\n");
     return nullptr;
   }
@@ -2147,6 +2140,9 @@
     return nullptr;
   }
 
+  // Run the read loop to account for post-handshake tickets in TLS 1.3.
+  SSL_read(client.get(), nullptr, 0);
+
   SSL_CTX_sess_set_new_cb(client_ctx, nullptr);
 
   if (!g_last_session) {
@@ -3059,82 +3055,6 @@
   EXPECT_FALSE(CreateClientSession(client_ctx_.get(), server_ctx_.get()));
 }
 
-// Test that all versions survive tiny write buffers. In particular, TLS 1.3
-// NewSessionTickets are written post-handshake. Servers that block
-// |SSL_do_handshake| on writing them will deadlock if clients are not draining
-// the buffer. Test that we do not do this.
-TEST_P(SSLVersionTest, SmallBuffer) {
-  // DTLS is a datagram protocol and requires packet-sized buffers.
-  if (is_dtls()) {
-    return;
-  }
-
-  // Test both flushing NewSessionTickets with a zero-sized write and
-  // non-zero-sized write.
-  for (bool use_zero_write : {false, true}) {
-    SCOPED_TRACE(use_zero_write);
-
-    g_last_session = nullptr;
-    SSL_CTX_set_session_cache_mode(client_ctx_.get(), SSL_SESS_CACHE_BOTH);
-    SSL_CTX_sess_set_new_cb(client_ctx_.get(), SaveLastSession);
-
-    bssl::UniquePtr<SSL> client(SSL_new(client_ctx_.get())),
-        server(SSL_new(server_ctx_.get()));
-    ASSERT_TRUE(client);
-    ASSERT_TRUE(server);
-    SSL_set_connect_state(client.get());
-    SSL_set_accept_state(server.get());
-
-    // Use a tiny buffer.
-    BIO *bio1, *bio2;
-    ASSERT_TRUE(BIO_new_bio_pair(&bio1, 1, &bio2, 1));
-
-    // SSL_set_bio takes ownership.
-    SSL_set_bio(client.get(), bio1, bio1);
-    SSL_set_bio(server.get(), bio2, bio2);
-
-    ASSERT_TRUE(CompleteHandshakes(client.get(), server.get()));
-    if (version() >= TLS1_3_VERSION) {
-      // The post-handshake ticket should not have been processed yet.
-      EXPECT_FALSE(g_last_session);
-    }
-
-    if (use_zero_write) {
-      ASSERT_TRUE(FlushNewSessionTickets(client.get(), server.get()));
-      EXPECT_TRUE(g_last_session);
-    }
-
-    // Send some data from server to client. If |use_zero_write| is false, this
-    // will also flush the NewSessionTickets.
-    static const char kMessage[] = "hello world";
-    char buf[sizeof(kMessage)];
-    for (;;) {
-      int server_ret = SSL_write(server.get(), kMessage, sizeof(kMessage));
-      int server_err = SSL_get_error(server.get(), server_ret);
-      int client_ret = SSL_read(client.get(), buf, sizeof(buf));
-      int client_err = SSL_get_error(client.get(), client_ret);
-
-      // The server will write a single record, so every iteration should see
-      // |SSL_ERROR_WANT_WRITE| and |SSL_ERROR_WANT_READ|, until the final
-      // iteration, where both will complete.
-      if (server_ret > 0) {
-        EXPECT_EQ(server_ret, static_cast<int>(sizeof(kMessage)));
-        EXPECT_EQ(client_ret, static_cast<int>(sizeof(kMessage)));
-        EXPECT_EQ(Bytes(buf), Bytes(kMessage));
-        break;
-      }
-
-      ASSERT_EQ(server_ret, -1);
-      ASSERT_EQ(server_err, SSL_ERROR_WANT_WRITE);
-      ASSERT_EQ(client_ret, -1);
-      ASSERT_EQ(client_err, SSL_ERROR_WANT_READ);
-    }
-
-    // The NewSessionTickets should have been flushed and processed.
-    EXPECT_TRUE(g_last_session);
-  }
-}
-
 TEST(SSLTest, AddChainCertHack) {
   // Ensure that we don't accidently break the hack that we have in place to
   // keep curl and serf happy when they use an |X509| even after transfering
@@ -3594,7 +3514,9 @@
   EXPECT_FALSE(SSL_session_reused(client.get()));
   EXPECT_FALSE(SSL_session_reused(server.get()));
 
-  ASSERT_TRUE(FlushNewSessionTickets(client.get(), server.get()));
+  // Run the read loop to account for post-handshake tickets in TLS 1.3.
+  SSL_read(client.get(), nullptr, 0);
+
   bssl::UniquePtr<SSL_SESSION> session = std::move(g_last_session);
   ConnectClientAndServerWithTicketMethod(&client, &server, client_ctx.get(),
                                          server_ctx.get(), retry_count,
@@ -4684,7 +4606,7 @@
     thread.join();
   }
 }
-#endif  // OPENSSL_THREADS
+#endif
 
 constexpr size_t kNumQUICLevels = 4;
 static_assert(ssl_encryption_initial < kNumQUICLevels,
@@ -5341,101 +5263,23 @@
   EXPECT_EQ(SSL_process_quic_post_handshake(client_.get()), 0);
 }
 
-extern "C" {
-int BORINGSSL_enum_c_type_test(void);
-}
-
-TEST(SSLTest, EnumTypes) {
-  EXPECT_EQ(sizeof(int), sizeof(ssl_private_key_result_t));
-  EXPECT_EQ(1, BORINGSSL_enum_c_type_test());
-}
-
-TEST_P(SSLVersionTest, DoubleSSLError) {
-  // Connect the inner SSL connections.
-  ASSERT_TRUE(Connect());
-
-  // Make a pair of |BIO|s which wrap |client_| and |server_|.
-  UniquePtr<BIO_METHOD> bio_method(BIO_meth_new(0, nullptr));
-  ASSERT_TRUE(bio_method);
-  ASSERT_TRUE(BIO_meth_set_read(
-      bio_method.get(), [](BIO *bio, char *out, int len) -> int {
-        SSL *ssl = static_cast<SSL *>(BIO_get_data(bio));
-        int ret = SSL_read(ssl, out, len);
-        int ssl_ret = SSL_get_error(ssl, ret);
-        if (ssl_ret == SSL_ERROR_WANT_READ) {
-          BIO_set_retry_read(bio);
-        }
-        return ret;
-      }));
-  ASSERT_TRUE(BIO_meth_set_write(
-      bio_method.get(), [](BIO *bio, const char *in, int len) -> int {
-        SSL *ssl = static_cast<SSL *>(BIO_get_data(bio));
-        int ret = SSL_write(ssl, in, len);
-        int ssl_ret = SSL_get_error(ssl, ret);
-        if (ssl_ret == SSL_ERROR_WANT_WRITE) {
-          BIO_set_retry_write(bio);
-        }
-        return ret;
-      }));
-  ASSERT_TRUE(BIO_meth_set_ctrl(
-      bio_method.get(), [](BIO *bio, int cmd, long larg, void *parg) -> long {
-        // |SSL| objects require |BIO_flush| support.
-        if (cmd == BIO_CTRL_FLUSH) {
-          return 1;
-        }
-        return 0;
-      }));
-
-  UniquePtr<BIO> client_bio(BIO_new(bio_method.get()));
-  ASSERT_TRUE(client_bio);
-  BIO_set_data(client_bio.get(), client_.get());
-  BIO_set_init(client_bio.get(), 1);
-
-  UniquePtr<BIO> server_bio(BIO_new(bio_method.get()));
-  ASSERT_TRUE(server_bio);
-  BIO_set_data(server_bio.get(), server_.get());
-  BIO_set_init(server_bio.get(), 1);
-
-  // Wrap the inner connections in another layer of SSL.
-  UniquePtr<SSL> client_outer(SSL_new(client_ctx_.get()));
-  ASSERT_TRUE(client_outer);
-  SSL_set_connect_state(client_outer.get());
-  SSL_set_bio(client_outer.get(), client_bio.get(), client_bio.get());
-  client_bio.release();  // |SSL_set_bio| takes ownership.
-
-  UniquePtr<SSL> server_outer(SSL_new(server_ctx_.get()));
-  ASSERT_TRUE(server_outer);
-  SSL_set_accept_state(server_outer.get());
-  SSL_set_bio(server_outer.get(), server_bio.get(), server_bio.get());
-  server_bio.release();  // |SSL_set_bio| takes ownership.
-
-  // Configure |client_outer| to reject the server certificate.
-  SSL_set_custom_verify(
-      client_outer.get(), SSL_VERIFY_PEER,
-      [](SSL *ssl, uint8_t *out_alert) -> ssl_verify_result_t {
-        return ssl_verify_invalid;
-      });
-
-  for (;;) {
-    int client_ret = SSL_do_handshake(client_outer.get());
-    int client_err = SSL_get_error(client_outer.get(), client_ret);
-    if (client_err != SSL_ERROR_WANT_READ &&
-        client_err != SSL_ERROR_WANT_WRITE) {
-      // The client handshake should terminate on a certificate verification
-      // error.
-      EXPECT_EQ(SSL_ERROR_SSL, client_err);
-      uint32_t err = ERR_peek_error();
-      EXPECT_EQ(ERR_LIB_SSL, ERR_GET_LIB(err));
-      EXPECT_EQ(SSL_R_CERTIFICATE_VERIFY_FAILED, ERR_GET_REASON(err));
-      break;
-    }
-
-    // Run the server handshake and continue.
-    int server_ret = SSL_do_handshake(server_outer.get());
-    int server_err = SSL_get_error(server_outer.get(), server_ret);
-    ASSERT_TRUE(server_err == SSL_ERROR_NONE ||
-                server_err == SSL_ERROR_WANT_READ ||
-                server_err == SSL_ERROR_WANT_WRITE);
+// TODO(davidben): Convert this file to GTest properly.
+TEST(SSLTest, AllTests) {
+  if (!TestSSL_SESSIONEncoding(kOpenSSLSession) ||
+      !TestSSL_SESSIONEncoding(kCustomSession) ||
+      !TestSSL_SESSIONEncoding(kBoringSSLSession) ||
+      !TestBadSSL_SESSIONEncoding(kBadSessionExtraField) ||
+      !TestBadSSL_SESSIONEncoding(kBadSessionVersion) ||
+      !TestBadSSL_SESSIONEncoding(kBadSessionTrailingData) ||
+      // Test the padding extension at TLS 1.2.
+      !TestPaddingExtension(TLS1_2_VERSION, TLS1_2_VERSION) ||
+      // Test the padding extension at TLS 1.3 with a TLS 1.2 session, so there
+      // will be no PSK binder after the padding extension.
+      !TestPaddingExtension(TLS1_3_VERSION, TLS1_2_VERSION) ||
+      // Test the padding extension at TLS 1.3 with a TLS 1.3 session, so there
+      // will be a PSK binder after the padding extension.
+      !TestPaddingExtension(TLS1_3_VERSION, TLS1_3_VERSION)) {
+    ADD_FAILURE() << "Tests failed";
   }
 }
 
diff --git a/src/ssl/ssl_x509.cc b/src/ssl/ssl_x509.cc
index cda7611..841482f 100644
--- a/src/ssl/ssl_x509.cc
+++ b/src/ssl/ssl_x509.cc
@@ -200,19 +200,19 @@
 // forms of elements of |chain|. It returns one on success or zero on error, in
 // which case no change to |cert->chain| is made. It preverses the existing
 // leaf from |cert->chain|, if any.
-static bool ssl_cert_set_chain(CERT *cert, STACK_OF(X509) *chain) {
+static int ssl_cert_set_chain(CERT *cert, STACK_OF(X509) *chain) {
   UniquePtr<STACK_OF(CRYPTO_BUFFER)> new_chain;
 
   if (cert->chain != nullptr) {
     new_chain.reset(sk_CRYPTO_BUFFER_new_null());
     if (!new_chain) {
-      return false;
+      return 0;
     }
 
     // |leaf| might be NULL if it's a “leafless” chain.
     CRYPTO_BUFFER *leaf = sk_CRYPTO_BUFFER_value(cert->chain.get(), 0);
     if (!PushToStack(new_chain.get(), UpRef(leaf))) {
-      return false;
+      return 0;
     }
   }
 
@@ -220,32 +220,32 @@
     if (!new_chain) {
       new_chain = new_leafless_chain();
       if (!new_chain) {
-        return false;
+        return 0;
       }
     }
 
     UniquePtr<CRYPTO_BUFFER> buffer = x509_to_buffer(x509);
     if (!buffer ||
         !PushToStack(new_chain.get(), std::move(buffer))) {
-      return false;
+      return 0;
     }
   }
 
   cert->chain = std::move(new_chain);
-  return true;
+  return 1;
 }
 
 static void ssl_crypto_x509_cert_flush_cached_leaf(CERT *cert) {
   X509_free(cert->x509_leaf);
-  cert->x509_leaf = nullptr;
+  cert->x509_leaf = NULL;
 }
 
 static void ssl_crypto_x509_cert_flush_cached_chain(CERT *cert) {
   sk_X509_pop_free(cert->x509_chain, X509_free);
-  cert->x509_chain = nullptr;
+  cert->x509_chain = NULL;
 }
 
-static bool ssl_crypto_x509_check_client_CA_list(
+static int ssl_crypto_x509_check_client_CA_list(
     STACK_OF(CRYPTO_BUFFER) *names) {
   for (const CRYPTO_BUFFER *buffer : names) {
     const uint8_t *inp = CRYPTO_BUFFER_data(buffer);
@@ -253,11 +253,11 @@
         d2i_X509_NAME(nullptr, &inp, CRYPTO_BUFFER_len(buffer)));
     if (name == nullptr ||
         inp != CRYPTO_BUFFER_data(buffer) + CRYPTO_BUFFER_len(buffer)) {
-      return false;
+      return 0;
     }
   }
 
-  return true;
+  return 1;
 }
 
 static void ssl_crypto_x509_cert_clear(CERT *cert) {
@@ -265,7 +265,7 @@
   ssl_crypto_x509_cert_flush_cached_chain(cert);
 
   X509_free(cert->x509_stash);
-  cert->x509_stash = nullptr;
+  cert->x509_stash = NULL;
 }
 
 static void ssl_crypto_x509_cert_free(CERT *cert) {
@@ -274,19 +274,19 @@
 }
 
 static void ssl_crypto_x509_cert_dup(CERT *new_cert, const CERT *cert) {
-  if (cert->verify_store != nullptr) {
+  if (cert->verify_store != NULL) {
     X509_STORE_up_ref(cert->verify_store);
     new_cert->verify_store = cert->verify_store;
   }
 }
 
-static bool ssl_crypto_x509_session_cache_objects(SSL_SESSION *sess) {
+static int ssl_crypto_x509_session_cache_objects(SSL_SESSION *sess) {
   bssl::UniquePtr<STACK_OF(X509)> chain, chain_without_leaf;
   if (sk_CRYPTO_BUFFER_num(sess->certs.get()) > 0) {
     chain.reset(sk_X509_new_null());
     if (!chain) {
       OPENSSL_PUT_ERROR(SSL, ERR_R_MALLOC_FAILURE);
-      return false;
+      return 0;
     }
     if (sess->is_server) {
       // chain_without_leaf is only needed for server sessions. See
@@ -294,7 +294,7 @@
       chain_without_leaf.reset(sk_X509_new_null());
       if (!chain_without_leaf) {
         OPENSSL_PUT_ERROR(SSL, ERR_R_MALLOC_FAILURE);
-        return false;
+        return 0;
       }
     }
   }
@@ -304,18 +304,18 @@
     UniquePtr<X509> x509(X509_parse_from_buffer(cert));
     if (!x509) {
       OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
-      return false;
+      return 0;
     }
     if (leaf == nullptr) {
       leaf = UpRef(x509);
     } else if (chain_without_leaf &&
                !PushToStack(chain_without_leaf.get(), UpRef(x509))) {
       OPENSSL_PUT_ERROR(SSL, ERR_R_MALLOC_FAILURE);
-      return false;
+      return 0;
     }
     if (!PushToStack(chain.get(), std::move(x509))) {
       OPENSSL_PUT_ERROR(SSL, ERR_R_MALLOC_FAILURE);
-      return false;
+      return 0;
     }
   }
 
@@ -327,76 +327,80 @@
 
   X509_free(sess->x509_peer);
   sess->x509_peer = leaf.release();
-  return true;
+  return 1;
 }
 
-static bool ssl_crypto_x509_session_dup(SSL_SESSION *new_session,
-                                        const SSL_SESSION *session) {
+static int ssl_crypto_x509_session_dup(SSL_SESSION *new_session,
+                                       const SSL_SESSION *session) {
   new_session->x509_peer = UpRef(session->x509_peer).release();
   if (session->x509_chain != nullptr) {
     new_session->x509_chain = X509_chain_up_ref(session->x509_chain);
     if (new_session->x509_chain == nullptr) {
-      return false;
+      return 0;
     }
   }
   if (session->x509_chain_without_leaf != nullptr) {
     new_session->x509_chain_without_leaf =
         X509_chain_up_ref(session->x509_chain_without_leaf);
     if (new_session->x509_chain_without_leaf == nullptr) {
-      return false;
+      return 0;
     }
   }
 
-  return true;
+  return 1;
 }
 
 static void ssl_crypto_x509_session_clear(SSL_SESSION *session) {
   X509_free(session->x509_peer);
-  session->x509_peer = nullptr;
+  session->x509_peer = NULL;
   sk_X509_pop_free(session->x509_chain, X509_free);
-  session->x509_chain = nullptr;
+  session->x509_chain = NULL;
   sk_X509_pop_free(session->x509_chain_without_leaf, X509_free);
-  session->x509_chain_without_leaf = nullptr;
+  session->x509_chain_without_leaf = NULL;
 }
 
-static bool ssl_crypto_x509_session_verify_cert_chain(SSL_SESSION *session,
-                                                      SSL_HANDSHAKE *hs,
-                                                      uint8_t *out_alert) {
+static int ssl_crypto_x509_session_verify_cert_chain(SSL_SESSION *session,
+                                                     SSL_HANDSHAKE *hs,
+                                                     uint8_t *out_alert) {
   *out_alert = SSL_AD_INTERNAL_ERROR;
   STACK_OF(X509) *const cert_chain = session->x509_chain;
-  if (cert_chain == nullptr || sk_X509_num(cert_chain) == 0) {
-    return false;
+  if (cert_chain == NULL || sk_X509_num(cert_chain) == 0) {
+    return 0;
   }
 
   SSL_CTX *ssl_ctx = hs->ssl->ctx.get();
   X509_STORE *verify_store = ssl_ctx->cert_store;
-  if (hs->config->cert->verify_store != nullptr) {
+  if (hs->config->cert->verify_store != NULL) {
     verify_store = hs->config->cert->verify_store;
   }
 
   X509 *leaf = sk_X509_value(cert_chain, 0);
   ScopedX509_STORE_CTX ctx;
-  if (!X509_STORE_CTX_init(ctx.get(), verify_store, leaf, cert_chain) ||
-      !X509_STORE_CTX_set_ex_data(
-          ctx.get(), SSL_get_ex_data_X509_STORE_CTX_idx(), hs->ssl) ||
-      // We need to inherit the verify parameters. These can be determined by
-      // the context: if its a server it will verify SSL client certificates or
-      // vice versa.
-      !X509_STORE_CTX_set_default(
-          ctx.get(), hs->ssl->server ? "ssl_client" : "ssl_server") ||
-      // Anything non-default in "param" should overwrite anything in the ctx.
-      !X509_VERIFY_PARAM_set1(X509_STORE_CTX_get0_param(ctx.get()),
-                              hs->config->param)) {
+  if (!X509_STORE_CTX_init(ctx.get(), verify_store, leaf, cert_chain)) {
     OPENSSL_PUT_ERROR(SSL, ERR_R_X509_LIB);
-    return false;
+    return 0;
   }
+  if (!X509_STORE_CTX_set_ex_data(
+          ctx.get(), SSL_get_ex_data_X509_STORE_CTX_idx(), hs->ssl)) {
+    return 0;
+  }
+
+  // We need to inherit the verify parameters. These can be determined by the
+  // context: if its a server it will verify SSL client certificates or vice
+  // versa.
+  X509_STORE_CTX_set_default(ctx.get(),
+                             hs->ssl->server ? "ssl_client" : "ssl_server");
+
+  // Anything non-default in "param" should overwrite anything in the ctx.
+  X509_VERIFY_PARAM_set1(X509_STORE_CTX_get0_param(ctx.get()),
+                         hs->config->param);
 
   if (hs->config->verify_callback) {
     X509_STORE_CTX_set_verify_cb(ctx.get(), hs->config->verify_callback);
   }
 
   int verify_ret;
-  if (ssl_ctx->app_verify_callback != nullptr) {
+  if (ssl_ctx->app_verify_callback != NULL) {
     verify_ret =
         ssl_ctx->app_verify_callback(ctx.get(), ssl_ctx->app_verify_arg);
   } else {
@@ -408,59 +412,59 @@
   // If |SSL_VERIFY_NONE|, the error is non-fatal, but we keep the result.
   if (verify_ret <= 0 && hs->config->verify_mode != SSL_VERIFY_NONE) {
     *out_alert = SSL_alert_from_verify_result(ctx->error);
-    return false;
+    return 0;
   }
 
   ERR_clear_error();
-  return true;
+  return 1;
 }
 
 static void ssl_crypto_x509_hs_flush_cached_ca_names(SSL_HANDSHAKE *hs) {
   sk_X509_NAME_pop_free(hs->cached_x509_ca_names, X509_NAME_free);
-  hs->cached_x509_ca_names = nullptr;
+  hs->cached_x509_ca_names = NULL;
 }
 
-static bool ssl_crypto_x509_ssl_new(SSL_HANDSHAKE *hs) {
+static int ssl_crypto_x509_ssl_new(SSL_HANDSHAKE *hs) {
   hs->config->param = X509_VERIFY_PARAM_new();
-  if (hs->config->param == nullptr) {
-    return false;
+  if (hs->config->param == NULL) {
+    return 0;
   }
   X509_VERIFY_PARAM_inherit(hs->config->param, hs->ssl->ctx->param);
-  return true;
+  return 1;
 }
 
 static void ssl_crypto_x509_ssl_flush_cached_client_CA(SSL_CONFIG *cfg) {
   sk_X509_NAME_pop_free(cfg->cached_x509_client_CA, X509_NAME_free);
-  cfg->cached_x509_client_CA = nullptr;
+  cfg->cached_x509_client_CA = NULL;
 }
 
 static void ssl_crypto_x509_ssl_config_free(SSL_CONFIG *cfg) {
   sk_X509_NAME_pop_free(cfg->cached_x509_client_CA, X509_NAME_free);
-  cfg->cached_x509_client_CA = nullptr;
+  cfg->cached_x509_client_CA = NULL;
   X509_VERIFY_PARAM_free(cfg->param);
 }
 
-static bool ssl_crypto_x509_ssl_auto_chain_if_needed(SSL_HANDSHAKE *hs) {
+static int ssl_crypto_x509_ssl_auto_chain_if_needed(SSL_HANDSHAKE *hs) {
   // Only build a chain if there are no intermediates configured and the feature
   // isn't disabled.
   if ((hs->ssl->mode & SSL_MODE_NO_AUTO_CHAIN) ||
       !ssl_has_certificate(hs) || hs->config->cert->chain == NULL ||
       sk_CRYPTO_BUFFER_num(hs->config->cert->chain.get()) > 1) {
-    return true;
+    return 1;
   }
 
   UniquePtr<X509> leaf(X509_parse_from_buffer(
       sk_CRYPTO_BUFFER_value(hs->config->cert->chain.get(), 0)));
   if (!leaf) {
     OPENSSL_PUT_ERROR(SSL, ERR_R_X509_LIB);
-    return false;
+    return 0;
   }
 
   ScopedX509_STORE_CTX ctx;
   if (!X509_STORE_CTX_init(ctx.get(), hs->ssl->ctx->cert_store, leaf.get(),
                            NULL)) {
     OPENSSL_PUT_ERROR(SSL, ERR_R_X509_LIB);
-    return false;
+    return 0;
   }
 
   // Attempt to build a chain, ignoring the result.
@@ -471,23 +475,23 @@
   X509_free(sk_X509_shift(ctx->chain));
 
   if (!ssl_cert_set_chain(hs->config->cert.get(), ctx->chain)) {
-    return false;
+    return 0;
   }
 
   ssl_crypto_x509_cert_flush_cached_chain(hs->config->cert.get());
 
-  return true;
+  return 1;
 }
 
 static void ssl_crypto_x509_ssl_ctx_flush_cached_client_CA(SSL_CTX *ctx) {
   sk_X509_NAME_pop_free(ctx->cached_x509_client_CA, X509_NAME_free);
-  ctx->cached_x509_client_CA = nullptr;
+  ctx->cached_x509_client_CA = NULL;
 }
 
-static bool ssl_crypto_x509_ssl_ctx_new(SSL_CTX *ctx) {
+static int ssl_crypto_x509_ssl_ctx_new(SSL_CTX *ctx) {
   ctx->cert_store = X509_STORE_new();
   ctx->param = X509_VERIFY_PARAM_new();
-  return (ctx->cert_store != nullptr && ctx->param != nullptr);
+  return (ctx->cert_store != NULL && ctx->param != NULL);
 }
 
 static void ssl_crypto_x509_ssl_ctx_free(SSL_CTX *ctx) {
diff --git a/src/ssl/t1_enc.cc b/src/ssl/t1_enc.cc
index 4c2fffb..c6b2844 100644
--- a/src/ssl/t1_enc.cc
+++ b/src/ssl/t1_enc.cc
@@ -359,3 +359,27 @@
       MakeConstSpan(session->master_key, session->master_key_length),
       MakeConstSpan(label, label_len), seed, {});
 }
+
+int SSL_export_early_keying_material(
+    SSL *ssl, uint8_t *out, size_t out_len, const char *label, size_t label_len,
+    const uint8_t *context, size_t context_len) {
+  if (!SSL_in_early_data(ssl) &&
+      (!ssl->s3->have_version ||
+       ssl_protocol_version(ssl) < TLS1_3_VERSION)) {
+    OPENSSL_PUT_ERROR(SSL, SSL_R_WRONG_SSL_VERSION);
+    return 0;
+  }
+
+  // The early exporter only exists if we accepted early data or offered it as
+  // a client.
+  if (!SSL_in_early_data(ssl) && !SSL_early_data_accepted(ssl)) {
+    OPENSSL_PUT_ERROR(SSL, SSL_R_EARLY_DATA_NOT_IN_USE);
+    return 0;
+  }
+
+  return tls13_export_keying_material(
+      ssl, MakeSpan(out, out_len),
+      MakeConstSpan(ssl->s3->early_exporter_secret,
+                    ssl->s3->early_exporter_secret_len),
+      MakeConstSpan(label, label_len), MakeConstSpan(context, context_len));
+}
diff --git a/src/ssl/t1_lib.cc b/src/ssl/t1_lib.cc
index c1c41a8..87f1888 100644
--- a/src/ssl/t1_lib.cc
+++ b/src/ssl/t1_lib.cc
@@ -199,10 +199,6 @@
   return true;
 }
 
-static bool is_post_quantum_group(uint16_t id) {
-  return id == SSL_CURVE_CECPQ2 || id == SSL_CURVE_CECPQ2b;
-}
-
 bool ssl_client_hello_init(const SSL *ssl, SSL_CLIENT_HELLO *out,
                            const SSLMessage &msg) {
   OPENSSL_memset(out, 0, sizeof(*out));
@@ -329,10 +325,10 @@
   for (uint16_t pref_group : pref) {
     for (uint16_t supp_group : supp) {
       if (pref_group == supp_group &&
-          // CECPQ2(b) doesn't fit in the u8-length-prefixed ECPoint field in
-          // TLS 1.2 and below.
+          // CECPQ2 doesn't fit in the u8-length-prefixed ECPoint field in TLS
+          // 1.2 and below.
           (ssl_protocol_version(ssl) >= TLS1_3_VERSION ||
-           !is_post_quantum_group(pref_group))) {
+           pref_group != SSL_CURVE_CECPQ2)) {
         *out_group_id = pref_group;
         return true;
       }
@@ -394,9 +390,9 @@
 }
 
 bool tls1_check_group_id(const SSL_HANDSHAKE *hs, uint16_t group_id) {
-  if (is_post_quantum_group(group_id) &&
+  if (group_id == SSL_CURVE_CECPQ2 &&
       ssl_protocol_version(hs->ssl) < TLS1_3_VERSION) {
-    // CECPQ2(b) requires TLS 1.3.
+    // CECPQ2 requires TLS 1.3.
     return false;
   }
 
@@ -633,7 +629,45 @@
 
 static bool ext_sni_parse_clienthello(SSL_HANDSHAKE *hs, uint8_t *out_alert,
                                       CBS *contents) {
-  // SNI has already been parsed earlier in the handshake. See |extract_sni|.
+  SSL *const ssl = hs->ssl;
+  if (contents == NULL) {
+    return true;
+  }
+
+  CBS server_name_list, host_name;
+  uint8_t name_type;
+  if (!CBS_get_u16_length_prefixed(contents, &server_name_list) ||
+      !CBS_get_u8(&server_name_list, &name_type) ||
+      // Although the server_name extension was intended to be extensible to
+      // new name types and multiple names, OpenSSL 1.0.x had a bug which meant
+      // different name types will cause an error. Further, RFC 4366 originally
+      // defined syntax inextensibly. RFC 6066 corrected this mistake, but
+      // adding new name types is no longer feasible.
+      //
+      // Act as if the extensibility does not exist to simplify parsing.
+      !CBS_get_u16_length_prefixed(&server_name_list, &host_name) ||
+      CBS_len(&server_name_list) != 0 ||
+      CBS_len(contents) != 0) {
+    return false;
+  }
+
+  if (name_type != TLSEXT_NAMETYPE_host_name ||
+      CBS_len(&host_name) == 0 ||
+      CBS_len(&host_name) > TLSEXT_MAXLEN_host_name ||
+      CBS_contains_zero_byte(&host_name)) {
+    *out_alert = SSL_AD_UNRECOGNIZED_NAME;
+    return false;
+  }
+
+  // Copy the hostname as a string.
+  char *raw = nullptr;
+  if (!CBS_strdup(&host_name, &raw)) {
+    *out_alert = SSL_AD_INTERNAL_ERROR;
+    return false;
+  }
+  ssl->s3->hostname.reset(raw);
+
+  hs->should_ack_sni = true;
   return true;
 }
 
@@ -1756,7 +1790,7 @@
 }
 
 static bool ext_ec_point_add_clienthello(SSL_HANDSHAKE *hs, CBB *out) {
-  // The point format extension is unnecessary in TLS 1.3.
+  // The point format extension is unneccessary in TLS 1.3.
   if (hs->min_version >= TLS1_3_VERSION) {
     return true;
   }
@@ -2023,46 +2057,20 @@
 
 static bool ext_early_data_add_clienthello(SSL_HANDSHAKE *hs, CBB *out) {
   SSL *const ssl = hs->ssl;
-  // The second ClientHello never offers early data, and we must have already
-  // filled in |early_data_reason| by this point.
-  if (hs->received_hello_retry_request) {
-    assert(ssl->s3->early_data_reason != ssl_early_data_unknown);
+  if (!ssl->enable_early_data ||
+      // Session must be 0-RTT capable.
+      ssl->session == nullptr ||
+      ssl_session_protocol_version(ssl->session.get()) < TLS1_3_VERSION ||
+      ssl->session->ticket_max_early_data == 0 ||
+      // The second ClientHello never offers early data.
+      hs->received_hello_retry_request ||
+      // In case ALPN preferences changed since this session was established,
+      // avoid reporting a confusing value in |SSL_get0_alpn_selected|.
+      (!ssl->session->early_alpn.empty() &&
+       !ssl_is_alpn_protocol_allowed(hs, ssl->session->early_alpn))) {
     return true;
   }
 
-  if (!ssl->enable_early_data) {
-    ssl->s3->early_data_reason = ssl_early_data_disabled;
-    return true;
-  }
-
-  if (hs->max_version < TLS1_3_VERSION) {
-    // We discard inapplicable sessions, so this is redundant with the session
-    // checks below, but we check give a more useful reason.
-    ssl->s3->early_data_reason = ssl_early_data_protocol_version;
-    return true;
-  }
-
-  if (ssl->session == nullptr) {
-    ssl->s3->early_data_reason = ssl_early_data_no_session_offered;
-    return true;
-  }
-
-  if (ssl_session_protocol_version(ssl->session.get()) < TLS1_3_VERSION ||
-      ssl->session->ticket_max_early_data == 0) {
-    ssl->s3->early_data_reason = ssl_early_data_unsupported_for_session;
-    return true;
-  }
-
-  // In case ALPN preferences changed since this session was established, avoid
-  // reporting a confusing value in |SSL_get0_alpn_selected| and sending early
-  // data we know will be rejected.
-  if (!ssl->session->early_alpn.empty() &&
-      !ssl_is_alpn_protocol_allowed(hs, ssl->session->early_alpn)) {
-    ssl->s3->early_data_reason = ssl_early_data_alpn_mismatch;
-    return true;
-  }
-
-  // |early_data_reason| will be filled in later when the server responds.
   hs->early_data_offered = true;
 
   if (!CBB_add_u16(out, TLSEXT_TYPE_early_data) ||
@@ -2075,27 +2083,12 @@
 }
 
 static bool ext_early_data_parse_serverhello(SSL_HANDSHAKE *hs,
-                                             uint8_t *out_alert,
-                                             CBS *contents) {
+                                             uint8_t *out_alert, CBS *contents) {
   SSL *const ssl = hs->ssl;
   if (contents == NULL) {
-    if (hs->early_data_offered && !hs->received_hello_retry_request) {
-      ssl->s3->early_data_reason = ssl->s3->session_reused
-                                       ? ssl_early_data_peer_declined
-                                       : ssl_early_data_session_not_resumed;
-    } else {
-      // We already filled in |early_data_reason| when declining to offer 0-RTT
-      // or handling the implicit HelloRetryRequest reject.
-      assert(ssl->s3->early_data_reason != ssl_early_data_unknown);
-    }
     return true;
   }
 
-  // If we received an HRR, the second ClientHello never offers early data, so
-  // the extensions logic will automatically reject early data extensions as
-  // unsolicited. This covered by the ServerAcceptsEarlyDataOnHRR test.
-  assert(!hs->received_hello_retry_request);
-
   if (CBS_len(contents) != 0) {
     *out_alert = SSL_AD_DECODE_ERROR;
     return false;
@@ -2107,7 +2100,6 @@
     return false;
   }
 
-  ssl->s3->early_data_reason = ssl_early_data_accepted;
   ssl->s3->early_data_accepted = true;
   return true;
 }
@@ -2194,8 +2186,8 @@
 
     group_id = groups[0];
 
-    if (is_post_quantum_group(group_id) && groups.size() >= 2) {
-      // CECPQ2(b) is not sent as the only initial key share. We'll include the
+    if (group_id == SSL_CURVE_CECPQ2 && groups.size() >= 2) {
+      // CECPQ2 is not sent as the only initial key share. We'll include the
       // 2nd preference group too to avoid round-trips.
       second_group_id = groups[1];
       assert(second_group_id != group_id);
@@ -2432,7 +2424,7 @@
   }
 
   for (uint16_t group : tls1_get_grouplist(hs)) {
-    if (is_post_quantum_group(group) &&
+    if (group == SSL_CURVE_CECPQ2 &&
         hs->max_version < TLS1_3_VERSION) {
       continue;
     }
@@ -2848,67 +2840,6 @@
   return true;
 }
 
-
-// Post-quantum experiment signal
-//
-// This extension may be used in order to identify a control group for
-// experimenting with post-quantum key exchange algorithms.
-
-static bool ext_pq_experiment_signal_add_clienthello(SSL_HANDSHAKE *hs,
-                                                     CBB *out) {
-  if (hs->ssl->ctx->pq_experiment_signal &&
-      (!CBB_add_u16(out, TLSEXT_TYPE_pq_experiment_signal) ||
-       !CBB_add_u16(out, 0))) {
-    return false;
-  }
-
-  return true;
-}
-
-static bool ext_pq_experiment_signal_parse_serverhello(SSL_HANDSHAKE *hs,
-                                                       uint8_t *out_alert,
-                                                       CBS *contents) {
-  if (contents == nullptr) {
-    return true;
-  }
-
-  if (!hs->ssl->ctx->pq_experiment_signal || CBS_len(contents) != 0) {
-    return false;
-  }
-
-  hs->ssl->s3->pq_experiment_signal_seen = true;
-  return true;
-}
-
-static bool ext_pq_experiment_signal_parse_clienthello(SSL_HANDSHAKE *hs,
-                                                       uint8_t *out_alert,
-                                                       CBS *contents) {
-  if (contents == nullptr) {
-    return true;
-  }
-
-  if (CBS_len(contents) != 0) {
-    return false;
-  }
-
-  if (hs->ssl->ctx->pq_experiment_signal) {
-    hs->ssl->s3->pq_experiment_signal_seen = true;
-  }
-
-  return true;
-}
-
-static bool ext_pq_experiment_signal_add_serverhello(SSL_HANDSHAKE *hs,
-                                                     CBB *out) {
-  if (hs->ssl->s3->pq_experiment_signal_seen &&
-      (!CBB_add_u16(out, TLSEXT_TYPE_pq_experiment_signal) ||
-       !CBB_add_u16(out, 0))) {
-    return false;
-  }
-
-  return true;
-}
-
 // kExtensions contains all the supported extensions.
 static const struct tls_extension kExtensions[] = {
   {
@@ -3097,14 +3028,6 @@
     ext_delegated_credential_parse_clienthello,
     dont_add_serverhello,
   },
-  {
-    TLSEXT_TYPE_pq_experiment_signal,
-    NULL,
-    ext_pq_experiment_signal_add_clienthello,
-    ext_pq_experiment_signal_parse_serverhello,
-    ext_pq_experiment_signal_parse_clienthello,
-    ext_pq_experiment_signal_add_serverhello,
-  },
 };
 
 #define kNumExtensions (sizeof(kExtensions) / sizeof(struct tls_extension))
@@ -3138,9 +3061,6 @@
     return false;
   }
 
-  // Note we may send multiple ClientHellos for DTLS HelloVerifyRequest and TLS
-  // 1.3 HelloRetryRequest. For the latter, the extensions may change, so it is
-  // important to reset this value.
   hs->extensions.sent = 0;
 
   for (size_t i = 0; i < kNumExtensions; i++) {
diff --git a/src/ssl/test/bssl_shim.cc b/src/ssl/test/bssl_shim.cc
index f58c151..62db076 100644
--- a/src/ssl/test/bssl_shim.cc
+++ b/src/ssl/test/bssl_shim.cc
@@ -279,23 +279,23 @@
 // after a renegotiation, that authentication-related properties match |config|.
 static bool CheckAuthProperties(SSL *ssl, bool is_resume,
                                 const TestConfig *config) {
-  if (!config->expect_ocsp_response.empty()) {
+  if (!config->expected_ocsp_response.empty()) {
     const uint8_t *data;
     size_t len;
     SSL_get0_ocsp_response(ssl, &data, &len);
-    if (config->expect_ocsp_response.size() != len ||
-        OPENSSL_memcmp(config->expect_ocsp_response.data(), data, len) != 0) {
+    if (config->expected_ocsp_response.size() != len ||
+        OPENSSL_memcmp(config->expected_ocsp_response.data(), data, len) != 0) {
       fprintf(stderr, "OCSP response mismatch\n");
       return false;
     }
   }
 
-  if (!config->expect_signed_cert_timestamps.empty()) {
+  if (!config->expected_signed_cert_timestamps.empty()) {
     const uint8_t *data;
     size_t len;
     SSL_get0_signed_cert_timestamp_list(ssl, &data, &len);
-    if (config->expect_signed_cert_timestamps.size() != len ||
-        OPENSSL_memcmp(config->expect_signed_cert_timestamps.data(), data,
+    if (config->expected_signed_cert_timestamps.size() != len ||
+        OPENSSL_memcmp(config->expected_signed_cert_timestamps.data(), data,
                        len) != 0) {
       fprintf(stderr, "SCT list mismatch\n");
       return false;
@@ -389,39 +389,6 @@
   return true;
 }
 
-static const char *EarlyDataReasonToString(ssl_early_data_reason_t reason) {
-  switch (reason) {
-    case ssl_early_data_unknown:
-      return "unknown";
-    case ssl_early_data_disabled:
-      return "disabled";
-    case ssl_early_data_accepted:
-      return "accepted";
-    case ssl_early_data_protocol_version:
-      return "protocol_version";
-    case ssl_early_data_peer_declined:
-      return "peer_declined";
-    case ssl_early_data_no_session_offered:
-      return "no_session_offered";
-    case ssl_early_data_session_not_resumed:
-      return "session_not_resumed";
-    case ssl_early_data_unsupported_for_session:
-      return "unsupported_for_session";
-    case ssl_early_data_hello_retry_request:
-      return "hello_retry_request";
-    case ssl_early_data_alpn_mismatch:
-      return "alpn_mismatch";
-    case ssl_early_data_channel_id:
-      return "channel_id";
-    case ssl_early_data_token_binding:
-      return "token_binding";
-    case ssl_early_data_ticket_age_skew:
-      return "ticket_age_skew";
-  }
-
-  abort();
-}
-
 // CheckHandshakeProperties checks, immediately after |ssl| completes its
 // initial handshake (or False Starts), whether all the properties are
 // consistent with the test configuration and invariants.
@@ -492,23 +459,23 @@
     return false;
   }
 
-  if (!config->expect_server_name.empty()) {
+  if (!config->expected_server_name.empty()) {
     const char *server_name =
         SSL_get_servername(ssl, TLSEXT_NAMETYPE_host_name);
     if (server_name == nullptr ||
-        server_name != config->expect_server_name) {
+        server_name != config->expected_server_name) {
       fprintf(stderr, "servername mismatch (got %s; want %s)\n",
-              server_name, config->expect_server_name.c_str());
+              server_name, config->expected_server_name.c_str());
       return false;
     }
   }
 
-  if (!config->expect_next_proto.empty()) {
+  if (!config->expected_next_proto.empty()) {
     const uint8_t *next_proto;
     unsigned next_proto_len;
     SSL_get0_next_proto_negotiated(ssl, &next_proto, &next_proto_len);
-    if (next_proto_len != config->expect_next_proto.size() ||
-        OPENSSL_memcmp(next_proto, config->expect_next_proto.data(),
+    if (next_proto_len != config->expected_next_proto.size() ||
+        OPENSSL_memcmp(next_proto, config->expected_next_proto.data(),
                        next_proto_len) != 0) {
       fprintf(stderr, "negotiated next proto mismatch\n");
       return false;
@@ -519,48 +486,48 @@
     const uint8_t *alpn_proto;
     unsigned alpn_proto_len;
     SSL_get0_alpn_selected(ssl, &alpn_proto, &alpn_proto_len);
-    if (alpn_proto_len != config->expect_alpn.size() ||
-        OPENSSL_memcmp(alpn_proto, config->expect_alpn.data(),
+    if (alpn_proto_len != config->expected_alpn.size() ||
+        OPENSSL_memcmp(alpn_proto, config->expected_alpn.data(),
                        alpn_proto_len) != 0) {
       fprintf(stderr, "negotiated alpn proto mismatch\n");
       return false;
     }
   }
 
-  if (!config->expect_quic_transport_params.empty()) {
+  if (!config->expected_quic_transport_params.empty()) {
     const uint8_t *peer_params;
     size_t peer_params_len;
     SSL_get_peer_quic_transport_params(ssl, &peer_params, &peer_params_len);
-    if (peer_params_len != config->expect_quic_transport_params.size() ||
+    if (peer_params_len != config->expected_quic_transport_params.size() ||
         OPENSSL_memcmp(peer_params,
-                       config->expect_quic_transport_params.data(),
+                       config->expected_quic_transport_params.data(),
                        peer_params_len) != 0) {
       fprintf(stderr, "QUIC transport params mismatch\n");
       return false;
     }
   }
 
-  if (!config->expect_channel_id.empty()) {
+  if (!config->expected_channel_id.empty()) {
     uint8_t channel_id[64];
     if (!SSL_get_tls_channel_id(ssl, channel_id, sizeof(channel_id))) {
       fprintf(stderr, "no channel id negotiated\n");
       return false;
     }
-    if (config->expect_channel_id.size() != 64 ||
-        OPENSSL_memcmp(config->expect_channel_id.data(), channel_id, 64) !=
+    if (config->expected_channel_id.size() != 64 ||
+        OPENSSL_memcmp(config->expected_channel_id.data(), channel_id, 64) !=
             0) {
       fprintf(stderr, "channel id mismatch\n");
       return false;
     }
   }
 
-  if (config->expect_token_binding_param != -1) {
+  if (config->expected_token_binding_param != -1) {
     if (!SSL_is_token_binding_negotiated(ssl)) {
       fprintf(stderr, "no Token Binding negotiated\n");
       return false;
     }
     if (SSL_get_negotiated_token_binding_param(ssl) !=
-        static_cast<uint8_t>(config->expect_token_binding_param)) {
+        static_cast<uint8_t>(config->expected_token_binding_param)) {
       fprintf(stderr, "Token Binding param mismatch\n");
       return false;
     }
@@ -620,8 +587,7 @@
     return false;
   }
 
-  // The early data status is only applicable after the handshake is confirmed.
-  if (!SSL_in_early_data(ssl)) {
+  if (is_resume && !SSL_in_early_data(ssl)) {
     if ((config->expect_accept_early_data && !SSL_early_data_accepted(ssl)) ||
         (config->expect_reject_early_data && SSL_early_data_accepted(ssl))) {
       fprintf(stderr,
@@ -629,15 +595,6 @@
               SSL_early_data_accepted(ssl) ? "" : " not");
       return false;
     }
-
-    const char *early_data_reason =
-        EarlyDataReasonToString(SSL_get_early_data_reason(ssl));
-    if (!config->expect_early_data_reason.empty() &&
-        config->expect_early_data_reason != early_data_reason) {
-      fprintf(stderr, "Early data reason was \"%s\", expected \"%s\"\n",
-              early_data_reason, config->expect_early_data_reason.c_str());
-      return false;
-    }
   }
 
   if (!config->psk.empty()) {
@@ -665,21 +622,6 @@
     return false;
   }
 
-  if (config->expect_delegated_credential_used !=
-      !!SSL_delegated_credential_used(ssl)) {
-    fprintf(stderr,
-            "Got %s delegated credential usage, but wanted opposite. \n",
-            SSL_delegated_credential_used(ssl) ? "" : "no");
-    return false;
-  }
-
-  if (config->expect_pq_experiment_signal !=
-      !!SSL_pq_experiment_signal_seen(ssl)) {
-    fprintf(stderr, "Got %sPQ experiment signal, but wanted opposite. \n",
-            SSL_pq_experiment_signal_seen(ssl) ? "" : "no ");
-    return false;
-  }
-
   return true;
 }
 
@@ -759,16 +701,6 @@
       return false;
     }
 
-    // Client pre- and post-0-RTT reject states are considered logically
-    // different connections with different test expections. Check that the test
-    // did not mistakenly configure reason expectations on the wrong one.
-    if (!config->expect_early_data_reason.empty()) {
-      fprintf(stderr,
-              "Test error: client reject -expect-early-data-reason flags "
-              "should be configured with -on-retry, not -on-resume.\n");
-      return false;
-    }
-
     // Reset the connection and try again at 1-RTT.
     SSL_reset_early_data_reject(ssl.get());
     GetTestState(ssl.get())->cert_verified = false;
@@ -872,6 +804,22 @@
     GetTestState(ssl)->got_new_session = false;
   }
 
+  if (config->export_early_keying_material > 0) {
+    std::vector<uint8_t> result(
+        static_cast<size_t>(config->export_early_keying_material));
+    if (!SSL_export_early_keying_material(
+            ssl, result.data(), result.size(), config->export_label.data(),
+            config->export_label.size(),
+            reinterpret_cast<const uint8_t *>(config->export_context.data()),
+            config->export_context.size())) {
+      fprintf(stderr, "failed to export keying material\n");
+      return false;
+    }
+    if (WriteAll(ssl, result.data(), result.size()) < 0) {
+      return false;
+    }
+  }
+
   if (config->export_keying_material > 0) {
     std::vector<uint8_t> result(
         static_cast<size_t>(config->export_keying_material));
diff --git a/src/ssl/test/runner/common.go b/src/ssl/test/runner/common.go
index b56b9b3..bbcacf5 100644
--- a/src/ssl/test/runner/common.go
+++ b/src/ssl/test/runner/common.go
@@ -126,7 +126,6 @@
 	extensionQUICTransportParams        uint16 = 0xffa5 // draft-ietf-quic-tls-13
 	extensionChannelID                  uint16 = 30032  // not IANA assigned
 	extensionDelegatedCredentials       uint16 = 0xff02 // not IANA assigned
-	extensionPQExperimentSignal         uint16 = 54538
 )
 
 // TLS signaling cipher suite values
@@ -145,13 +144,12 @@
 type CurveID uint16
 
 const (
-	CurveP224    CurveID = 21
-	CurveP256    CurveID = 23
-	CurveP384    CurveID = 24
-	CurveP521    CurveID = 25
-	CurveX25519  CurveID = 29
-	CurveCECPQ2  CurveID = 16696
-	CurveCECPQ2b CurveID = 65074
+	CurveP224   CurveID = 21
+	CurveP256   CurveID = 23
+	CurveP384   CurveID = 24
+	CurveP521   CurveID = 25
+	CurveX25519 CurveID = 29
+	CurveCECPQ2 CurveID = 16696
 )
 
 // TLS Elliptic Curve Point Formats
@@ -501,11 +499,6 @@
 
 	CertCompressionAlgs map[uint16]CertCompressionAlg
 
-	// PQExperimentSignal instructs a client to send a non-IANA defined extension
-	// that signals participation in an experiment of post-quantum key exchange
-	// methods.
-	PQExperimentSignal bool
-
 	// Bugs specifies optional misbehaviour to be used for testing other
 	// implementations.
 	Bugs ProtocolBugs
@@ -1326,6 +1319,21 @@
 	// it was accepted.
 	SendEarlyDataExtension bool
 
+	// ExpectEarlyKeyingMaterial, if non-zero, causes a TLS 1.3 server to
+	// read an application data record after the ClientHello before it sends
+	// a ServerHello. The record's contents have the specified length and
+	// match the corresponding early exporter value. This is used to test
+	// the client using the early exporter in the 0-RTT state.
+	ExpectEarlyKeyingMaterial int
+
+	// ExpectEarlyKeyingLabel is the label to use with
+	// ExpectEarlyKeyingMaterial.
+	ExpectEarlyKeyingLabel string
+
+	// ExpectEarlyKeyingContext is the context string to use with
+	// ExpectEarlyKeyingMaterial
+	ExpectEarlyKeyingContext string
+
 	// ExpectEarlyData causes a TLS 1.3 server to read application
 	// data after the ClientHello (assuming the server is able to
 	// derive the key under which the data is encrypted) before it
@@ -1641,10 +1649,6 @@
 	// DisableDelegatedCredentials, if true, disables client support for delegated
 	// credentials.
 	DisableDelegatedCredentials bool
-
-	// ExpectPQExperimentSignal specifies whether or not the post-quantum
-	// experiment signal should be received by a client or server.
-	ExpectPQExperimentSignal bool
 }
 
 func (c *Config) serverInit() {
@@ -1724,7 +1728,7 @@
 	return ret
 }
 
-var defaultCurvePreferences = []CurveID{CurveCECPQ2b, CurveCECPQ2, CurveX25519, CurveP256, CurveP384, CurveP521}
+var defaultCurvePreferences = []CurveID{CurveCECPQ2, CurveX25519, CurveP256, CurveP384, CurveP521}
 
 func (c *Config) curvePreferences() []CurveID {
 	if c == nil || len(c.CurvePreferences) == 0 {
diff --git a/src/ssl/test/runner/ecdsa_p224_key.pem b/src/ssl/test/runner/ecdsa_p224_key.pem
index d62594b..cfe411b 100644
--- a/src/ssl/test/runner/ecdsa_p224_key.pem
+++ b/src/ssl/test/runner/ecdsa_p224_key.pem
@@ -1,5 +1,5 @@
------BEGIN PRIVATE KEY-----
-MHgCAQAwEAYHKoZIzj0CAQYFK4EEACEEYTBfAgEBBBxovqzS4voByapkUbXZSwTs
-NVmL+x/1Z5WBgGdPoTwDOgAE6dul6dL0+CyooFiKK4V+EYNYPbMZoLTxRcjRgrw3
-db6QzBAviDSxKADTVuyRmaVC74Mf6boBHDk=
------END PRIVATE KEY-----
+-----BEGIN EC PRIVATE KEY-----
+MGgCAQEEHGi+rNLi+gHJqmRRtdlLBOw1WYv7H/VnlYGAZ0+gBwYFK4EEACGhPAM6
+AATp26Xp0vT4LKigWIorhX4Rg1g9sxmgtPFFyNGCvDd1vpDMEC+INLEoANNW7JGZ
+pULvgx/pugEcOQ==
+-----END EC PRIVATE KEY-----
diff --git a/src/ssl/test/runner/fuzzer_mode.json b/src/ssl/test/runner/fuzzer_mode.json
index 0a50722..1a154c2 100644
--- a/src/ssl/test/runner/fuzzer_mode.json
+++ b/src/ssl/test/runner/fuzzer_mode.json
@@ -18,6 +18,9 @@
 
     "BadECDSA-*": "Fuzzer mode always accepts a signature.",
     "*-InvalidSignature-*": "Fuzzer mode always accepts a signature.",
+    "*Auth-Verify-RSA-PKCS1-*-TLS13*": "Fuzzer mode always accepts a signature.",
+    "*Auth-Verify-ECDSA-SHA1-TLS13*": "Fuzzer mode always accepts a signature.",
+    "*Auth-Verify-ECDSA-P224-*-TLS13*": "Fuzzer mode always accepts a signature.",
     "Verify-*Auth-SignatureType*": "Fuzzer mode always accepts a signature.",
     "ECDSACurveMismatch-Verify-TLS13*": "Fuzzer mode always accepts a signature.",
     "InvalidChannelIDSignature-*": "Fuzzer mode always accepts a signature.",
@@ -27,7 +30,6 @@
     "Resume-Server-DeclineCrossVersion*": "Fuzzer mode does not encrypt tickets.",
     "TicketCallback-SingleCall-*": "Fuzzer mode does not encrypt tickets.",
     "CorruptTicket-*": "Fuzzer mode does not encrypt tickets.",
-    "*RejectTicket-Server-*": "Fuzzer mode does not encrypt tickets.",
     "ShimTicketRewritable*": "Fuzzer mode does not encrypt tickets.",
 
     "Resume-Server-*Binder*": "Fuzzer mode does not check binders.",
@@ -44,7 +46,6 @@
     "*-EarlyData-RejectUnfinishedWrite-Client-*": "Trial decryption does not work with the NULL cipher.",
     "EarlyData-Reject*-Client-*": "Trial decryption does not work with the NULL cipher.",
     "CustomExtensions-Server-EarlyDataOffered": "Trial decryption does not work with the NULL cipher.",
-    "*-TicketAgeSkew-*-Reject": "Trial decryption does not work with the NULL cipher.",
 
     "Renegotiate-Client-BadExt*": "Fuzzer mode does not check renegotiation_info.",
 
diff --git a/src/ssl/test/runner/handshake_client.go b/src/ssl/test/runner/handshake_client.go
index 2574ec3..45dc75d 100644
--- a/src/ssl/test/runner/handshake_client.go
+++ b/src/ssl/test/runner/handshake_client.go
@@ -129,7 +129,6 @@
 		omitExtensions:          c.config.Bugs.OmitExtensions,
 		emptyExtensions:         c.config.Bugs.EmptyExtensions,
 		delegatedCredentials:    !c.config.Bugs.DisableDelegatedCredentials,
-		pqExperimentSignal:      c.config.PQExperimentSignal,
 	}
 
 	if maxVersion >= VersionTLS13 {
@@ -1667,10 +1666,6 @@
 		c.quicTransportParams = serverExtensions.quicTransportParams
 	}
 
-	if c.config.Bugs.ExpectPQExperimentSignal != serverExtensions.pqExperimentSignal {
-		return fmt.Errorf("tls: PQ experiment signal presence (%t) was not what was expected", serverExtensions.pqExperimentSignal)
-	}
-
 	return nil
 }
 
diff --git a/src/ssl/test/runner/handshake_messages.go b/src/ssl/test/runner/handshake_messages.go
index ac52eed..f12ca1a 100644
--- a/src/ssl/test/runner/handshake_messages.go
+++ b/src/ssl/test/runner/handshake_messages.go
@@ -298,7 +298,6 @@
 	pad                     int
 	compressedCertAlgs      []uint16
 	delegatedCredentials    bool
-	pqExperimentSignal      bool
 }
 
 func (m *clientHelloMsg) equal(i interface{}) bool {
@@ -353,8 +352,7 @@
 		m.emptyExtensions == m1.emptyExtensions &&
 		m.pad == m1.pad &&
 		eqUint16s(m.compressedCertAlgs, m1.compressedCertAlgs) &&
-		m.delegatedCredentials == m1.delegatedCredentials &&
-		m.pqExperimentSignal == m1.pqExperimentSignal
+		m.delegatedCredentials == m1.delegatedCredentials
 }
 
 func (m *clientHelloMsg) marshalKeyShares(bb *byteBuilder) {
@@ -600,11 +598,6 @@
 		extensions.addU16(extensionDelegatedCredentials)
 		extensions.addU16(0) // Length is always 0
 	}
-	if m.pqExperimentSignal {
-		extensions.addU16(extensionPQExperimentSignal)
-		extensions.addU16(0) // Length is always 0
-	}
-
 	// The PSK extension must be last. See https://tools.ietf.org/html/rfc8446#section-4.2.11
 	if len(m.pskIdentities) > 0 && !m.pskBinderFirst {
 		extensions.addU16(extensionPreSharedKey)
@@ -731,7 +724,6 @@
 	m.extendedMasterSecret = false
 	m.customExtension = ""
 	m.delegatedCredentials = false
-	m.pqExperimentSignal = false
 
 	if len(reader) == 0 {
 		// ClientHello is optionally followed by extension data
@@ -967,11 +959,6 @@
 				return false
 			}
 			m.delegatedCredentials = true
-		case extensionPQExperimentSignal:
-			if len(body) != 0 {
-				return false
-			}
-			m.pqExperimentSignal = true
 		}
 
 		if isGREASEValue(extension) {
@@ -1239,7 +1226,6 @@
 	supportedCurves         []CurveID
 	quicTransportParams     []byte
 	serverNameAck           bool
-	pqExperimentSignal      bool
 }
 
 func (m *serverExtensions) marshal(extensions *byteBuilder) {
@@ -1374,10 +1360,6 @@
 		extensions.addU16(extensionServerName)
 		extensions.addU16(0) // zero length
 	}
-	if m.pqExperimentSignal {
-		extensions.addU16(extensionPQExperimentSignal)
-		extensions.addU16(0) // zero length
-	}
 }
 
 func (m *serverExtensions) unmarshal(data byteReader, version uint16) bool {
@@ -1486,11 +1468,6 @@
 				return false
 			}
 			m.hasEarlyData = true
-		case extensionPQExperimentSignal:
-			if len(body) != 0 {
-				return false
-			}
-			m.pqExperimentSignal = true
 		default:
 			// Unknown extensions are illegal from the server.
 			return false
diff --git a/src/ssl/test/runner/handshake_server.go b/src/ssl/test/runner/handshake_server.go
index 3a6c810..d2ef9b4 100644
--- a/src/ssl/test/runner/handshake_server.go
+++ b/src/ssl/test/runner/handshake_server.go
@@ -210,8 +210,8 @@
 
 	if config.Bugs.FailIfCECPQ2Offered {
 		for _, offeredCurve := range hs.clientHello.supportedCurves {
-			if isPqGroup(offeredCurve) {
-				return errors.New("tls: CECPQ2 or CECPQ2b was offered")
+			if offeredCurve == CurveCECPQ2 {
+				return errors.New("tls: CECPQ2 was offered")
 			}
 		}
 	}
@@ -228,10 +228,6 @@
 		}
 	}
 
-	if c.config.Bugs.ExpectPQExperimentSignal != hs.clientHello.pqExperimentSignal {
-		return fmt.Errorf("tls: PQ experiment signal presence (%t) was not what was expected", hs.clientHello.pqExperimentSignal)
-	}
-
 	c.clientVersion = hs.clientHello.vers
 
 	// Use the versions extension if supplied, otherwise use the legacy ClientHello version.
@@ -726,7 +722,16 @@
 			}
 
 			c.earlyCipherSuite = hs.suite
-			for _, expectedMsg := range config.Bugs.ExpectEarlyData {
+			expectEarlyData := config.Bugs.ExpectEarlyData
+			if n := config.Bugs.ExpectEarlyKeyingMaterial; n > 0 {
+				exporter, err := c.ExportEarlyKeyingMaterial(n, []byte(config.Bugs.ExpectEarlyKeyingLabel), []byte(config.Bugs.ExpectEarlyKeyingContext))
+				if err != nil {
+					return err
+				}
+				expectEarlyData = append([][]byte{exporter}, expectEarlyData...)
+			}
+
+			for _, expectedMsg := range expectEarlyData {
 				if err := c.readRecord(recordTypeApplicationData); err != nil {
 					return err
 				}
@@ -1227,8 +1232,8 @@
 	preferredCurves := config.curvePreferences()
 Curves:
 	for _, curve := range hs.clientHello.supportedCurves {
-		if isPqGroup(curve) && c.vers < VersionTLS13 {
-			// CECPQ2 and CECPQ2b is TLS 1.3-only.
+		if curve == CurveCECPQ2 && c.vers < VersionTLS13 {
+			// CECPQ2 is TLS 1.3-only.
 			continue
 		}
 
@@ -1451,7 +1456,6 @@
 	}
 
 	serverExtensions.serverNameAck = c.config.Bugs.SendServerNameAck
-	serverExtensions.pqExperimentSignal = hs.clientHello.pqExperimentSignal
 
 	return nil
 }
diff --git a/src/ssl/test/runner/key_agreement.go b/src/ssl/test/runner/key_agreement.go
index f4789b6..13e78bc 100644
--- a/src/ssl/test/runner/key_agreement.go
+++ b/src/ssl/test/runner/key_agreement.go
@@ -19,7 +19,6 @@
 	"boringssl.googlesource.com/boringssl/ssl/test/runner/curve25519"
 	"boringssl.googlesource.com/boringssl/ssl/test/runner/ed25519"
 	"boringssl.googlesource.com/boringssl/ssl/test/runner/hrss"
-	"boringssl.googlesource.com/boringssl/ssl/test/runner/sike"
 )
 
 type keyType int
@@ -434,98 +433,6 @@
 	return preMasterSecret, nil
 }
 
-// cecpq2BCurve implements CECPQ2b, which is SIKE combined with X25519.
-type cecpq2BCurve struct {
-	// Both public key and shared secret size
-	x25519PrivateKey [32]byte
-	sikePrivateKey   *sike.PrivateKey
-}
-
-func (e *cecpq2BCurve) offer(rand io.Reader) (publicKey []byte, err error) {
-	if _, err = io.ReadFull(rand, e.x25519PrivateKey[:]); err != nil {
-		return nil, err
-	}
-
-	var x25519Public [32]byte
-	curve25519.ScalarBaseMult(&x25519Public, &e.x25519PrivateKey)
-
-	e.sikePrivateKey = sike.NewPrivateKey(sike.KeyVariant_SIKE)
-	if err = e.sikePrivateKey.Generate(rand); err != nil {
-		return nil, err
-	}
-
-	sikePublic := e.sikePrivateKey.GeneratePublicKey().Export()
-	var ret []byte
-	ret = append(ret, x25519Public[:]...)
-	ret = append(ret, sikePublic...)
-	return ret, nil
-}
-
-func (e *cecpq2BCurve) accept(rand io.Reader, peerKey []byte) (publicKey []byte, preMasterSecret []byte, err error) {
-	if len(peerKey) != 32+sike.Params.PublicKeySize {
-		return nil, nil, errors.New("tls: bad length CECPQ2b offer")
-	}
-
-	if _, err = io.ReadFull(rand, e.x25519PrivateKey[:]); err != nil {
-		return nil, nil, err
-	}
-
-	var x25519Shared, x25519PeerKey, x25519Public [32]byte
-	copy(x25519PeerKey[:], peerKey)
-	curve25519.ScalarBaseMult(&x25519Public, &e.x25519PrivateKey)
-	curve25519.ScalarMult(&x25519Shared, &e.x25519PrivateKey, &x25519PeerKey)
-
-	// Per RFC 7748, reject the all-zero value in constant time.
-	var zeros [32]byte
-	if subtle.ConstantTimeCompare(zeros[:], x25519Shared[:]) == 1 {
-		return nil, nil, errors.New("tls: X25519 value with wrong order")
-	}
-
-	var sikePubKey = sike.NewPublicKey(sike.KeyVariant_SIKE)
-	if err = sikePubKey.Import(peerKey[32:]); err != nil {
-		// should never happen as size was already checked
-		return nil, nil, errors.New("tls: implementation error")
-	}
-	sikeCiphertext, sikeShared, err := sike.Encapsulate(rand, sikePubKey)
-	if err != nil {
-		return nil, nil, err
-	}
-
-	publicKey = append(publicKey, x25519Public[:]...)
-	publicKey = append(publicKey, sikeCiphertext...)
-	preMasterSecret = append(preMasterSecret, x25519Shared[:]...)
-	preMasterSecret = append(preMasterSecret, sikeShared...)
-
-	return publicKey, preMasterSecret, nil
-}
-
-func (e *cecpq2BCurve) finish(peerKey []byte) (preMasterSecret []byte, err error) {
-	if len(peerKey) != 32+(sike.Params.PublicKeySize+sike.Params.MsgLen) {
-		return nil, errors.New("tls: bad length CECPQ2b reply")
-	}
-
-	var x25519Shared, x25519PeerKey [32]byte
-	copy(x25519PeerKey[:], peerKey)
-	curve25519.ScalarMult(&x25519Shared, &e.x25519PrivateKey, &x25519PeerKey)
-
-	// Per RFC 7748, reject the all-zero value in constant time.
-	var zeros [32]byte
-	if subtle.ConstantTimeCompare(zeros[:], x25519Shared[:]) == 1 {
-		return nil, errors.New("tls: X25519 value with wrong order")
-	}
-
-	var sikePubKey = e.sikePrivateKey.GeneratePublicKey()
-	sikeShared, err := sike.Decapsulate(e.sikePrivateKey, sikePubKey, peerKey[32:])
-	if err != nil {
-		return nil, errors.New("tls: invalid SIKE ciphertext")
-	}
-
-	preMasterSecret = append(preMasterSecret, x25519Shared[:]...)
-	preMasterSecret = append(preMasterSecret, sikeShared...)
-
-	return preMasterSecret, nil
-}
-
 func curveForCurveID(id CurveID, config *Config) (ecdhCurve, bool) {
 	switch id {
 	case CurveP224:
@@ -540,8 +447,6 @@
 		return &x25519ECDHCurve{setHighBit: config.Bugs.SetX25519HighBit}, true
 	case CurveCECPQ2:
 		return &cecpq2Curve{}, true
-	case CurveCECPQ2b:
-		return &cecpq2BCurve{}, true
 	default:
 		return nil, false
 	}
@@ -689,8 +594,8 @@
 
 NextCandidate:
 	for _, candidate := range preferredCurves {
-		if isPqGroup(candidate) && version < VersionTLS13 {
-			// CECPQ2 and CECPQ2b is TLS 1.3-only.
+		if candidate == CurveCECPQ2 && version < VersionTLS13 {
+			// CECPQ2 is TLS 1.3-only.
 			continue
 		}
 
diff --git a/src/ssl/test/runner/runner.go b/src/ssl/test/runner/runner.go
index 877a239..8461bd8 100644
--- a/src/ssl/test/runner/runner.go
+++ b/src/ssl/test/runner/runner.go
@@ -589,6 +589,9 @@
 	exportLabel          string
 	exportContext        string
 	useExportContext     bool
+	// exportEarlyKeyingMaterial, if non-zero, behaves like
+	// exportKeyingMaterial, but for the early exporter.
+	exportEarlyKeyingMaterial int
 	// flags, if not empty, contains a list of command-line flags that will
 	// be passed to the shim program.
 	flags []string
@@ -878,6 +881,20 @@
 		}
 	}
 
+	if isResume && test.exportEarlyKeyingMaterial > 0 {
+		actual := make([]byte, test.exportEarlyKeyingMaterial)
+		if _, err := io.ReadFull(tlsConn, actual); err != nil {
+			return err
+		}
+		expected, err := tlsConn.ExportEarlyKeyingMaterial(test.exportEarlyKeyingMaterial, []byte(test.exportLabel), []byte(test.exportContext))
+		if err != nil {
+			return err
+		}
+		if !bytes.Equal(actual, expected) {
+			return fmt.Errorf("early keying material mismatch; got %x, wanted %x", actual, expected)
+		}
+	}
+
 	if test.exportKeyingMaterial > 0 {
 		actual := make([]byte, test.exportKeyingMaterial)
 		if _, err := io.ReadFull(tlsConn, actual); err != nil {
@@ -1255,7 +1272,10 @@
 			flags = append(flags, "-use-export-context")
 		}
 	}
-	if test.exportKeyingMaterial > 0 {
+	if test.exportEarlyKeyingMaterial > 0 {
+		flags = append(flags, "-on-resume-export-early-keying-material", strconv.Itoa(test.exportEarlyKeyingMaterial))
+	}
+	if test.exportKeyingMaterial > 0 || test.exportEarlyKeyingMaterial > 0 {
 		flags = append(flags, "-export-label", test.exportLabel)
 		flags = append(flags, "-export-context", test.exportContext)
 	}
@@ -1549,34 +1569,34 @@
 }
 
 var testCipherSuites = []testCipherSuite{
-	{"RSA_WITH_3DES_EDE_CBC_SHA", TLS_RSA_WITH_3DES_EDE_CBC_SHA},
-	{"RSA_WITH_AES_128_GCM_SHA256", TLS_RSA_WITH_AES_128_GCM_SHA256},
-	{"RSA_WITH_AES_128_CBC_SHA", TLS_RSA_WITH_AES_128_CBC_SHA},
-	{"RSA_WITH_AES_256_GCM_SHA384", TLS_RSA_WITH_AES_256_GCM_SHA384},
-	{"RSA_WITH_AES_256_CBC_SHA", TLS_RSA_WITH_AES_256_CBC_SHA},
-	{"ECDHE_ECDSA_WITH_AES_128_GCM_SHA256", TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256},
-	{"ECDHE_ECDSA_WITH_AES_128_CBC_SHA", TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA},
-	{"ECDHE_ECDSA_WITH_AES_256_GCM_SHA384", TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384},
-	{"ECDHE_ECDSA_WITH_AES_256_CBC_SHA", TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA},
-	{"ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256", TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256},
-	{"ECDHE_RSA_WITH_AES_128_GCM_SHA256", TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256},
-	{"ECDHE_RSA_WITH_AES_128_CBC_SHA", TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA},
-	{"ECDHE_RSA_WITH_AES_256_GCM_SHA384", TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384},
-	{"ECDHE_RSA_WITH_AES_256_CBC_SHA", TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA},
-	{"ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256", TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256},
-	{"PSK_WITH_AES_128_CBC_SHA", TLS_PSK_WITH_AES_128_CBC_SHA},
-	{"PSK_WITH_AES_256_CBC_SHA", TLS_PSK_WITH_AES_256_CBC_SHA},
-	{"ECDHE_PSK_WITH_AES_128_CBC_SHA", TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA},
-	{"ECDHE_PSK_WITH_AES_256_CBC_SHA", TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA},
-	{"ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256", TLS_ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256},
-	{"CHACHA20_POLY1305_SHA256", TLS_CHACHA20_POLY1305_SHA256},
-	{"AES_128_GCM_SHA256", TLS_AES_128_GCM_SHA256},
-	{"AES_256_GCM_SHA384", TLS_AES_256_GCM_SHA384},
-	{"RSA_WITH_NULL_SHA", TLS_RSA_WITH_NULL_SHA},
+	{"3DES-SHA", TLS_RSA_WITH_3DES_EDE_CBC_SHA},
+	{"AES128-GCM", TLS_RSA_WITH_AES_128_GCM_SHA256},
+	{"AES128-SHA", TLS_RSA_WITH_AES_128_CBC_SHA},
+	{"AES256-GCM", TLS_RSA_WITH_AES_256_GCM_SHA384},
+	{"AES256-SHA", TLS_RSA_WITH_AES_256_CBC_SHA},
+	{"ECDHE-ECDSA-AES128-GCM", TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256},
+	{"ECDHE-ECDSA-AES128-SHA", TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA},
+	{"ECDHE-ECDSA-AES256-GCM", TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384},
+	{"ECDHE-ECDSA-AES256-SHA", TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA},
+	{"ECDHE-ECDSA-CHACHA20-POLY1305", TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256},
+	{"ECDHE-RSA-AES128-GCM", TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256},
+	{"ECDHE-RSA-AES128-SHA", TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA},
+	{"ECDHE-RSA-AES256-GCM", TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384},
+	{"ECDHE-RSA-AES256-SHA", TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA},
+	{"ECDHE-RSA-CHACHA20-POLY1305", TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256},
+	{"PSK-AES128-CBC-SHA", TLS_PSK_WITH_AES_128_CBC_SHA},
+	{"PSK-AES256-CBC-SHA", TLS_PSK_WITH_AES_256_CBC_SHA},
+	{"ECDHE-PSK-AES128-CBC-SHA", TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA},
+	{"ECDHE-PSK-AES256-CBC-SHA", TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA},
+	{"ECDHE-PSK-CHACHA20-POLY1305", TLS_ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256},
+	{"AEAD-CHACHA20-POLY1305", TLS_CHACHA20_POLY1305_SHA256},
+	{"AEAD-AES128-GCM-SHA256", TLS_AES_128_GCM_SHA256},
+	{"AEAD-AES256-GCM-SHA384", TLS_AES_256_GCM_SHA384},
+	{"NULL-SHA", TLS_RSA_WITH_NULL_SHA},
 }
 
 func hasComponent(suiteName, component string) bool {
-	return strings.Contains("_"+suiteName+"_", "_"+component+"_")
+	return strings.Contains("-"+suiteName+"-", "-"+component+"-")
 }
 
 func isTLS12Only(suiteName string) bool {
@@ -1587,7 +1607,7 @@
 }
 
 func isTLS13Suite(suiteName string) bool {
-	return !hasComponent(suiteName, "WITH")
+	return strings.HasPrefix(suiteName, "AEAD-")
 }
 
 func bigFromHex(hex string) *big.Int {
@@ -4446,8 +4466,6 @@
 			},
 			resumeSession:        true,
 			resumeRenewedSession: true,
-			// 0-RTT being disabled overrides all other 0-RTT reasons.
-			flags: []string{"-expect-early-data-reason", "disabled"},
 		})
 
 		tests = append(tests, testCase{
@@ -4459,13 +4477,9 @@
 			},
 			resumeSession:        true,
 			resumeRenewedSession: true,
-			flags: []string{
-				// TLS 1.3 uses tickets, so the session should not be
-				// cached statefully.
-				"-expect-no-session-id",
-				// 0-RTT being disabled overrides all other 0-RTT reasons.
-				"-expect-early-data-reason", "disabled",
-			},
+			// TLS 1.3 uses tickets, so the session should not be
+			// cached statefully.
+			flags: []string{"-expect-no-session-id"},
 		})
 
 		tests = append(tests, testCase{
@@ -4518,7 +4532,7 @@
 			flags: []string{
 				"-enable-early-data",
 				"-expect-ticket-supports-early-data",
-				"-on-resume-expect-accept-early-data",
+				"-expect-accept-early-data",
 				"-on-resume-shim-writes-first",
 			},
 		})
@@ -4547,7 +4561,7 @@
 				flags: []string{
 					"-enable-early-data",
 					"-expect-ticket-supports-early-data",
-					"-on-resume-expect-accept-early-data",
+					"-expect-accept-early-data",
 					"-on-resume-read-with-unfinished-write",
 					"-on-resume-shim-writes-first",
 				},
@@ -4598,7 +4612,7 @@
 			resumeSession: true,
 			flags: []string{
 				"-enable-early-data",
-				"-on-resume-expect-accept-early-data",
+				"-expect-accept-early-data",
 			},
 			shouldFail:    true,
 			expectedError: ":TOO_MUCH_READ_EARLY_DATA:",
@@ -6649,7 +6663,7 @@
 			flags: []string{
 				"-token-binding-params",
 				base64.StdEncoding.EncodeToString([]byte{2, 1, 0}),
-				"-expect-token-binding-param",
+				"-expected-token-binding-param",
 				"2",
 			},
 		})
@@ -6698,7 +6712,7 @@
 			flags: []string{
 				"-token-binding-params",
 				base64.StdEncoding.EncodeToString([]byte{2, 1, 0}),
-				"-expect-token-binding-param",
+				"-expected-token-binding-param",
 				"2",
 			},
 		})
@@ -6734,7 +6748,7 @@
 			flags: []string{
 				"-token-binding-params",
 				base64.StdEncoding.EncodeToString([]byte{2, 1, 0}),
-				"-expect-token-binding-param",
+				"-expected-token-binding-param",
 				"2",
 			},
 		})
@@ -6752,7 +6766,7 @@
 			flags: []string{
 				"-token-binding-params",
 				base64.StdEncoding.EncodeToString([]byte{0, 1, 2}),
-				"-expect-token-binding-param",
+				"-expected-token-binding-param",
 				"2",
 			},
 		})
@@ -6783,7 +6797,7 @@
 			flags: []string{
 				"-token-binding-params",
 				base64.StdEncoding.EncodeToString([]byte{0, 1, 2}),
-				"-expect-token-binding-param",
+				"-expected-token-binding-param",
 				"2",
 			},
 			shouldFail:    true,
@@ -6803,7 +6817,7 @@
 			flags: []string{
 				"-token-binding-params",
 				base64.StdEncoding.EncodeToString([]byte{0, 1, 2}),
-				"-expect-token-binding-param",
+				"-expected-token-binding-param",
 				"2",
 			},
 			shouldFail:    true,
@@ -6823,7 +6837,7 @@
 			flags: []string{
 				"-token-binding-params",
 				base64.StdEncoding.EncodeToString([]byte{0, 1, 2}),
-				"-expect-token-binding-param",
+				"-expected-token-binding-param",
 				"2",
 			},
 			shouldFail:    true,
@@ -6859,7 +6873,7 @@
 			flags: []string{
 				"-token-binding-params",
 				base64.StdEncoding.EncodeToString([]byte{0, 1, 2}),
-				"-expect-token-binding-param",
+				"-expected-token-binding-param",
 				"2",
 			},
 		})
@@ -7004,8 +7018,6 @@
 					"-expect-ticket-supports-early-data",
 					"-token-binding-params",
 					base64.StdEncoding.EncodeToString([]byte{2, 1, 0}),
-					"-expect-reject-early-data",
-					"-on-retry-expect-early-data-reason", "token_binding",
 				},
 			})
 		}
@@ -7024,7 +7036,7 @@
 				flags: []string{
 					"-quic-transport-params",
 					base64.StdEncoding.EncodeToString([]byte{3, 4}),
-					"-expect-quic-transport-params",
+					"-expected-quic-transport-params",
 					base64.StdEncoding.EncodeToString([]byte{1, 2}),
 				},
 				expectedQUICTransportParams: []byte{3, 4},
@@ -7041,7 +7053,7 @@
 				flags: []string{
 					"-quic-transport-params",
 					base64.StdEncoding.EncodeToString([]byte{3, 4}),
-					"-expect-quic-transport-params",
+					"-expected-quic-transport-params",
 					base64.StdEncoding.EncodeToString([]byte{1, 2}),
 				},
 				expectedQUICTransportParams: []byte{3, 4},
@@ -7085,7 +7097,7 @@
 					QUICTransportParams: []byte{1, 2},
 				},
 				flags: []string{
-					"-expect-quic-transport-params",
+					"-expected-quic-transport-params",
 					base64.StdEncoding.EncodeToString([]byte{1, 2}),
 				},
 				shouldFail:    true,
@@ -8700,21 +8712,21 @@
 	id   signatureAlgorithm
 	cert testCert
 }{
-	{"RSA_PKCS1_SHA1", signatureRSAPKCS1WithSHA1, testCertRSA},
-	{"RSA_PKCS1_SHA256", signatureRSAPKCS1WithSHA256, testCertRSA},
-	{"RSA_PKCS1_SHA384", signatureRSAPKCS1WithSHA384, testCertRSA},
-	{"RSA_PKCS1_SHA512", signatureRSAPKCS1WithSHA512, testCertRSA},
-	{"ECDSA_SHA1", signatureECDSAWithSHA1, testCertECDSAP256},
+	{"RSA-PKCS1-SHA1", signatureRSAPKCS1WithSHA1, testCertRSA},
+	{"RSA-PKCS1-SHA256", signatureRSAPKCS1WithSHA256, testCertRSA},
+	{"RSA-PKCS1-SHA384", signatureRSAPKCS1WithSHA384, testCertRSA},
+	{"RSA-PKCS1-SHA512", signatureRSAPKCS1WithSHA512, testCertRSA},
+	{"ECDSA-SHA1", signatureECDSAWithSHA1, testCertECDSAP256},
 	// The “P256” in the following line is not a mistake. In TLS 1.2 the
 	// hash function doesn't have to match the curve and so the same
 	// signature algorithm works with P-224.
-	{"ECDSA_P224_SHA256", signatureECDSAWithP256AndSHA256, testCertECDSAP224},
-	{"ECDSA_P256_SHA256", signatureECDSAWithP256AndSHA256, testCertECDSAP256},
-	{"ECDSA_P384_SHA384", signatureECDSAWithP384AndSHA384, testCertECDSAP384},
-	{"ECDSA_P521_SHA512", signatureECDSAWithP521AndSHA512, testCertECDSAP521},
-	{"RSA_PSS_SHA256", signatureRSAPSSWithSHA256, testCertRSA},
-	{"RSA_PSS_SHA384", signatureRSAPSSWithSHA384, testCertRSA},
-	{"RSA_PSS_SHA512", signatureRSAPSSWithSHA512, testCertRSA},
+	{"ECDSA-P224-SHA256", signatureECDSAWithP256AndSHA256, testCertECDSAP224},
+	{"ECDSA-P256-SHA256", signatureECDSAWithP256AndSHA256, testCertECDSAP256},
+	{"ECDSA-P384-SHA384", signatureECDSAWithP384AndSHA384, testCertECDSAP384},
+	{"ECDSA-P521-SHA512", signatureECDSAWithP521AndSHA512, testCertECDSAP521},
+	{"RSA-PSS-SHA256", signatureRSAPSSWithSHA256, testCertRSA},
+	{"RSA-PSS-SHA384", signatureRSAPSSWithSHA384, testCertRSA},
+	{"RSA-PSS-SHA512", signatureRSAPSSWithSHA512, testCertRSA},
 	{"Ed25519", signatureEd25519, testCertEd25519},
 	// Tests for key types prior to TLS 1.2.
 	{"RSA", 0, testCertRSA},
@@ -10117,7 +10129,7 @@
 				flags: []string{
 					"-enable-early-data",
 					"-expect-ticket-supports-early-data",
-					"-on-resume-expect-accept-early-data",
+					"-expect-accept-early-data",
 					"-on-resume-export-keying-material", "1024",
 					"-on-resume-export-label", "label",
 					"-on-resume-export-context", "context",
@@ -10126,6 +10138,106 @@
 				expectedError: ":HANDSHAKE_NOT_COMPLETE:",
 			})
 
+			// Test the early exporter works while the client is
+			// sending 0-RTT data. This data arrives during the
+			// server handshake, so we test it with ProtocolBugs.
+			testCases = append(testCases, testCase{
+				name: "ExportEarlyKeyingMaterial-Client-InEarlyData-" + vers.name,
+				config: Config{
+					MaxVersion:       vers.version,
+					MaxEarlyDataSize: 16384,
+				},
+				resumeConfig: &Config{
+					MaxVersion:       vers.version,
+					MaxEarlyDataSize: 16384,
+					Bugs: ProtocolBugs{
+						ExpectEarlyKeyingMaterial: 1024,
+						ExpectEarlyKeyingLabel:    "label",
+						ExpectEarlyKeyingContext:  "context",
+					},
+				},
+				resumeSession: true,
+				flags: []string{
+					"-enable-early-data",
+					"-expect-ticket-supports-early-data",
+					"-expect-accept-early-data",
+					"-on-resume-export-early-keying-material", "1024",
+					"-on-resume-export-label", "label",
+					"-on-resume-export-context", "context",
+				},
+			})
+
+			// Test the early exporter still works on the client
+			// after the handshake is confirmed. This arrives after
+			// the server handshake, so the normal hooks work.
+			testCases = append(testCases, testCase{
+				name: "ExportEarlyKeyingMaterial-Client-EarlyDataAccept-" + vers.name,
+				config: Config{
+					MaxVersion:       vers.version,
+					MaxEarlyDataSize: 16384,
+				},
+				resumeConfig: &Config{
+					MaxVersion:       vers.version,
+					MaxEarlyDataSize: 16384,
+				},
+				resumeSession:             true,
+				exportEarlyKeyingMaterial: 1024,
+				exportLabel:               "label",
+				exportContext:             "context",
+				flags: []string{
+					"-enable-early-data",
+					"-expect-ticket-supports-early-data",
+					"-expect-accept-early-data",
+					// Handshake twice on the client to force
+					// handshake confirmation.
+					"-handshake-twice",
+				},
+			})
+
+			// Test the early exporter does not work on the client
+			// if 0-RTT was not offered.
+			testCases = append(testCases, testCase{
+				name: "NoExportEarlyKeyingMaterial-Client-Initial-" + vers.name,
+				config: Config{
+					MaxVersion: vers.version,
+				},
+				flags:         []string{"-export-early-keying-material", "1024"},
+				shouldFail:    true,
+				expectedError: ":EARLY_DATA_NOT_IN_USE:",
+			})
+			testCases = append(testCases, testCase{
+				name: "NoExportEarlyKeyingMaterial-Client-Resume-" + vers.name,
+				config: Config{
+					MaxVersion: vers.version,
+				},
+				resumeSession: true,
+				flags:         []string{"-on-resume-export-early-keying-material", "1024"},
+				shouldFail:    true,
+				expectedError: ":EARLY_DATA_NOT_IN_USE:",
+			})
+
+			// Test the early exporter does not work on the client
+			// after a 0-RTT reject.
+			testCases = append(testCases, testCase{
+				name: "NoExportEarlyKeyingMaterial-Client-EarlyDataReject-" + vers.name,
+				config: Config{
+					MaxVersion:       vers.version,
+					MaxEarlyDataSize: 16384,
+					Bugs: ProtocolBugs{
+						AlwaysRejectEarlyData: true,
+					},
+				},
+				resumeSession: true,
+				flags: []string{
+					"-enable-early-data",
+					"-expect-ticket-supports-early-data",
+					"-expect-reject-early-data",
+					"-on-retry-export-early-keying-material", "1024",
+				},
+				shouldFail:    true,
+				expectedError: ":EARLY_DATA_NOT_IN_USE:",
+			})
+
 			// Test the normal exporter on the server in half-RTT.
 			testCases = append(testCases, testCase{
 				testType: serverTest,
@@ -10144,6 +10256,75 @@
 				useExportContext:     true,
 				flags:                []string{"-enable-early-data"},
 			})
+
+			// Test the early exporter works on the server in half-RTT.
+			testCases = append(testCases, testCase{
+				testType: serverTest,
+				name:     "ExportEarlyKeyingMaterial-Server-HalfRTT-" + vers.name,
+				config: Config{
+					MaxVersion: vers.version,
+					Bugs: ProtocolBugs{
+						SendEarlyData:           [][]byte{},
+						ExpectEarlyDataAccepted: true,
+					},
+				},
+				resumeSession:             true,
+				exportEarlyKeyingMaterial: 1024,
+				exportLabel:               "label",
+				exportContext:             "context",
+				flags:                     []string{"-enable-early-data"},
+			})
+
+			// Test the early exporter does not work on the server
+			// if 0-RTT was not offered.
+			testCases = append(testCases, testCase{
+				testType: serverTest,
+				name:     "NoExportEarlyKeyingMaterial-Server-Initial-" + vers.name,
+				config: Config{
+					MaxVersion: vers.version,
+				},
+				flags:         []string{"-export-early-keying-material", "1024"},
+				shouldFail:    true,
+				expectedError: ":EARLY_DATA_NOT_IN_USE:",
+			})
+			testCases = append(testCases, testCase{
+				testType: serverTest,
+				name:     "NoExportEarlyKeyingMaterial-Server-Resume-" + vers.name,
+				config: Config{
+					MaxVersion: vers.version,
+				},
+				resumeSession: true,
+				flags:         []string{"-on-resume-export-early-keying-material", "1024"},
+				shouldFail:    true,
+				expectedError: ":EARLY_DATA_NOT_IN_USE:",
+			})
+		} else {
+			// Test the early exporter fails before TLS 1.3.
+			testCases = append(testCases, testCase{
+				name: "NoExportEarlyKeyingMaterial-Client-" + vers.name,
+				config: Config{
+					MaxVersion: vers.version,
+				},
+				resumeSession:             true,
+				exportEarlyKeyingMaterial: 1024,
+				exportLabel:               "label",
+				exportContext:             "context",
+				shouldFail:                true,
+				expectedError:             ":WRONG_SSL_VERSION:",
+			})
+			testCases = append(testCases, testCase{
+				testType: serverTest,
+				name:     "NoExportEarlyKeyingMaterial-Server-" + vers.name,
+				config: Config{
+					MaxVersion: vers.version,
+				},
+				resumeSession:             true,
+				exportEarlyKeyingMaterial: 1024,
+				exportLabel:               "label",
+				exportContext:             "context",
+				shouldFail:                true,
+				expectedError:             ":WRONG_SSL_VERSION:",
+			})
 		}
 	}
 
@@ -10399,19 +10580,14 @@
 	{"P-521", CurveP521},
 	{"X25519", CurveX25519},
 	{"CECPQ2", CurveCECPQ2},
-	{"CECPQ2b", CurveCECPQ2b},
 }
 
 const bogusCurve = 0x1234
 
-func isPqGroup(r CurveID) bool {
-	return r == CurveCECPQ2 || r == CurveCECPQ2b
-}
-
 func addCurveTests() {
 	for _, curve := range testCurves {
 		for _, ver := range tlsVersions {
-			if isPqGroup(curve.id) && ver.version < VersionTLS13 {
+			if curve.id == CurveCECPQ2 && ver.version < VersionTLS13 {
 				continue
 			}
 
@@ -10453,7 +10629,7 @@
 				expectedCurveID: curve.id,
 			})
 
-			if curve.id != CurveX25519 && !isPqGroup(curve.id) {
+			if curve.id != CurveX25519 && curve.id != CurveCECPQ2 {
 				testCases = append(testCases, testCase{
 					name: "CurveTest-Client-Compressed-" + suffix,
 					config: Config{
@@ -10878,21 +11054,6 @@
 		},
 	})
 
-	// CECPQ2b should not be offered by a TLS < 1.3 client.
-	testCases = append(testCases, testCase{
-		name: "CECPQ2bNotInTLS12",
-		config: Config{
-			Bugs: ProtocolBugs{
-				FailIfCECPQ2Offered: true,
-			},
-		},
-		flags: []string{
-			"-max-version", strconv.Itoa(VersionTLS12),
-			"-curves", strconv.Itoa(int(CurveCECPQ2b)),
-			"-curves", strconv.Itoa(int(CurveX25519)),
-		},
-	})
-
 	// CECPQ2 should not crash a TLS < 1.3 client if the server mistakenly
 	// selects it.
 	testCases = append(testCases, testCase{
@@ -10911,24 +11072,6 @@
 		expectedError: ":WRONG_CURVE:",
 	})
 
-	// CECPQ2b should not crash a TLS < 1.3 client if the server mistakenly
-	// selects it.
-	testCases = append(testCases, testCase{
-		name: "CECPQ2bNotAcceptedByTLS12Client",
-		config: Config{
-			Bugs: ProtocolBugs{
-				SendCurve: CurveCECPQ2b,
-			},
-		},
-		flags: []string{
-			"-max-version", strconv.Itoa(VersionTLS12),
-			"-curves", strconv.Itoa(int(CurveCECPQ2b)),
-			"-curves", strconv.Itoa(int(CurveX25519)),
-		},
-		shouldFail:    true,
-		expectedError: ":WRONG_CURVE:",
-	})
-
 	// CECPQ2 should not be offered by default as a client.
 	testCases = append(testCases, testCase{
 		name: "CECPQ2NotEnabledByDefaultInClients",
@@ -10940,17 +11083,6 @@
 		},
 	})
 
-	// CECPQ2b should not be offered by default as a client.
-	testCases = append(testCases, testCase{
-		name: "CECPQ2bNotEnabledByDefaultInClients",
-		config: Config{
-			MinVersion: VersionTLS13,
-			Bugs: ProtocolBugs{
-				FailIfCECPQ2Offered: true,
-			},
-		},
-	})
-
 	// If CECPQ2 is offered, both X25519 and CECPQ2 should have a key-share.
 	testCases = append(testCases, testCase{
 		name: "NotJustCECPQ2KeyShare",
@@ -10983,38 +11115,6 @@
 		},
 	})
 
-	// If CECPQ2b is offered, both X25519 and CECPQ2b should have a key-share.
-	testCases = append(testCases, testCase{
-		name: "NotJustCECPQ2bKeyShare",
-		config: Config{
-			MinVersion: VersionTLS13,
-			Bugs: ProtocolBugs{
-				ExpectedKeyShares: []CurveID{CurveCECPQ2b, CurveX25519},
-			},
-		},
-		flags: []string{
-			"-curves", strconv.Itoa(int(CurveCECPQ2b)),
-			"-curves", strconv.Itoa(int(CurveX25519)),
-			"-expect-curve-id", strconv.Itoa(int(CurveCECPQ2b)),
-		},
-	})
-
-	// ... but only if CECPQ2b is listed first.
-	testCases = append(testCases, testCase{
-		name: "CECPQ2bKeyShareNotIncludedSecond",
-		config: Config{
-			MinVersion: VersionTLS13,
-			Bugs: ProtocolBugs{
-				ExpectedKeyShares: []CurveID{CurveX25519},
-			},
-		},
-		flags: []string{
-			"-curves", strconv.Itoa(int(CurveX25519)),
-			"-curves", strconv.Itoa(int(CurveCECPQ2b)),
-			"-expect-curve-id", strconv.Itoa(int(CurveX25519)),
-		},
-	})
-
 	// If CECPQ2 is the only configured curve, the key share is sent.
 	testCases = append(testCases, testCase{
 		name: "JustConfiguringCECPQ2Works",
@@ -11030,21 +11130,6 @@
 		},
 	})
 
-	// If CECPQ2b is the only configured curve, the key share is sent.
-	testCases = append(testCases, testCase{
-		name: "JustConfiguringCECPQ2bWorks",
-		config: Config{
-			MinVersion: VersionTLS13,
-			Bugs: ProtocolBugs{
-				ExpectedKeyShares: []CurveID{CurveCECPQ2b},
-			},
-		},
-		flags: []string{
-			"-curves", strconv.Itoa(int(CurveCECPQ2b)),
-			"-expect-curve-id", strconv.Itoa(int(CurveCECPQ2b)),
-		},
-	})
-
 	// As a server, CECPQ2 is not yet supported by default.
 	testCases = append(testCases, testCase{
 		testType: serverTest,
@@ -11059,21 +11144,6 @@
 			"-expect-curve-id", strconv.Itoa(int(CurveX25519)),
 		},
 	})
-
-	// As a server, CECPQ2b is not yet supported by default.
-	testCases = append(testCases, testCase{
-		testType: serverTest,
-		name:     "CECPQ2bNotEnabledByDefaultForAServer",
-		config: Config{
-			MinVersion:       VersionTLS13,
-			CurvePreferences: []CurveID{CurveCECPQ2b, CurveX25519},
-			DefaultCurves:    []CurveID{CurveCECPQ2b},
-		},
-		flags: []string{
-			"-server-preference",
-			"-expect-curve-id", strconv.Itoa(int(CurveX25519)),
-		},
-	})
 }
 
 func addTLS13RecordTests() {
@@ -11252,99 +11322,9 @@
 		},
 	})
 
-	// Test that ticket age skew up to 60 seconds in either direction is accepted.
-	testCases = append(testCases, testCase{
-		testType: serverTest,
-		name:     "TLS13-TicketAgeSkew-Forward-60-Accept",
-		config: Config{
-			MaxVersion: VersionTLS13,
-			Bugs: ProtocolBugs{
-				SendTicketAge:           70 * time.Second,
-				SendEarlyData:           [][]byte{{1, 2, 3, 4}},
-				ExpectEarlyDataAccepted: true,
-				ExpectHalfRTTData:       [][]byte{{254, 253, 252, 251}},
-			},
-		},
-		resumeSession: true,
-		flags: []string{
-			"-resumption-delay", "10",
-			"-expect-ticket-age-skew", "60",
-			// 0-RTT is accepted.
-			"-enable-early-data",
-			"-on-resume-expect-accept-early-data",
-			"-on-resume-expect-early-data-reason", "accept",
-		},
-	})
-	testCases = append(testCases, testCase{
-		testType: serverTest,
-		name:     "TLS13-TicketAgeSkew-Backward-60-Accept",
-		config: Config{
-			MaxVersion: VersionTLS13,
-			Bugs: ProtocolBugs{
-				SendTicketAge:           10 * time.Second,
-				SendEarlyData:           [][]byte{{1, 2, 3, 4}},
-				ExpectEarlyDataAccepted: true,
-				ExpectHalfRTTData:       [][]byte{{254, 253, 252, 251}},
-			},
-		},
-		resumeSession: true,
-		flags: []string{
-			"-resumption-delay", "70",
-			"-expect-ticket-age-skew", "-60",
-			// 0-RTT is accepted.
-			"-enable-early-data",
-			"-on-resume-expect-accept-early-data",
-			"-on-resume-expect-early-data-reason", "accept",
-		},
-	})
-
-	// Test that ticket age skew beyond 60 seconds in either direction is rejected.
-	testCases = append(testCases, testCase{
-		testType: serverTest,
-		name:     "TLS13-TicketAgeSkew-Forward-61-Reject",
-		config: Config{
-			MaxVersion: VersionTLS13,
-			Bugs: ProtocolBugs{
-				SendTicketAge:           71 * time.Second,
-				SendEarlyData:           [][]byte{{1, 2, 3, 4}},
-				ExpectEarlyDataAccepted: false,
-			},
-		},
-		resumeSession: true,
-		flags: []string{
-			"-resumption-delay", "10",
-			"-expect-ticket-age-skew", "61",
-			// 0-RTT is rejected.
-			"-enable-early-data",
-			"-expect-reject-early-data",
-			"-on-resume-expect-early-data-reason", "ticket_age_skew",
-		},
-	})
-	testCases = append(testCases, testCase{
-		testType: serverTest,
-		name:     "TLS13-TicketAgeSkew-Backward-61-Reject",
-		config: Config{
-			MaxVersion: VersionTLS13,
-			Bugs: ProtocolBugs{
-				SendTicketAge:           10 * time.Second,
-				SendEarlyData:           [][]byte{{1, 2, 3, 4}},
-				ExpectEarlyDataAccepted: false,
-			},
-		},
-		resumeSession: true,
-		flags: []string{
-			"-resumption-delay", "71",
-			"-expect-ticket-age-skew", "-61",
-			// 0-RTT is rejected.
-			"-enable-early-data",
-			"-expect-reject-early-data",
-			"-on-resume-expect-early-data-reason", "ticket_age_skew",
-		},
-	})
-
 	testCases = append(testCases, testCase{
 		testType: clientTest,
-		name:     "TLS13-SendTicketEarlyDataSupport",
+		name:     "TLS13-SendTicketEarlyDataInfo",
 		config: Config{
 			MaxVersion:       VersionTLS13,
 			MaxEarlyDataSize: 16384,
@@ -11355,22 +11335,19 @@
 		},
 	})
 
-	// Test that 0-RTT tickets are still recorded as such when early data is disabled overall.
+	// Test that 0-RTT tickets are ignored in clients unless opted in.
 	testCases = append(testCases, testCase{
 		testType: clientTest,
-		name:     "TLS13-SendTicketEarlyDataSupport-Disabled",
+		name:     "TLS13-SendTicketEarlyDataInfo-Disabled",
 		config: Config{
 			MaxVersion:       VersionTLS13,
 			MaxEarlyDataSize: 16384,
 		},
-		flags: []string{
-			"-expect-ticket-supports-early-data",
-		},
 	})
 
 	testCases = append(testCases, testCase{
 		testType: clientTest,
-		name:     "TLS13-DuplicateTicketEarlyDataSupport",
+		name:     "TLS13-DuplicateTicketEarlyDataInfo",
 		config: Config{
 			MaxVersion:       VersionTLS13,
 			MaxEarlyDataSize: 16384,
@@ -11385,7 +11362,7 @@
 
 	testCases = append(testCases, testCase{
 		testType: serverTest,
-		name:     "TLS13-ExpectTicketEarlyDataSupport",
+		name:     "TLS13-ExpectTicketEarlyDataInfo",
 		config: Config{
 			MaxVersion: VersionTLS13,
 			Bugs: ProtocolBugs{
@@ -12352,9 +12329,7 @@
 		flags: []string{
 			"-enable-early-data",
 			"-expect-ticket-supports-early-data",
-			"-on-initial-expect-early-data-reason", "no_session_offered",
-			"-on-resume-expect-accept-early-data",
-			"-on-resume-expect-early-data-reason", "accept",
+			"-expect-accept-early-data",
 			"-on-resume-shim-writes-first",
 		},
 	})
@@ -12379,7 +12354,6 @@
 			"-expect-ticket-supports-early-data",
 			"-expect-reject-early-data",
 			"-on-resume-shim-writes-first",
-			"-on-retry-expect-early-data-reason", "peer_declined",
 		},
 	})
 
@@ -12399,14 +12373,10 @@
 		resumeSession: true,
 		flags: []string{
 			"-enable-early-data",
-			"-on-initial-expect-early-data-reason", "no_session_offered",
-			"-on-resume-expect-accept-early-data",
-			"-on-resume-expect-early-data-reason", "accept",
+			"-expect-accept-early-data",
 		},
 	})
 
-	// The above tests the most recent ticket. Additionally test that 0-RTT
-	// works on the first ticket issued by the server.
 	testCases = append(testCases, testCase{
 		testType: serverTest,
 		name:     "EarlyData-FirstTicket-Server-TLS13",
@@ -12424,8 +12394,7 @@
 		resumeSession: true,
 		flags: []string{
 			"-enable-early-data",
-			"-on-resume-expect-accept-early-data",
-			"-on-resume-expect-early-data-reason", "accept",
+			"-expect-accept-early-data",
 		},
 	})
 
@@ -12494,9 +12463,6 @@
 			},
 			DefaultCurves: []CurveID{},
 		},
-		// Though the session is not resumed and we send HelloRetryRequest,
-		// early data being disabled takes priority as the reject reason.
-		flags: []string{"-expect-early-data-reason", "disabled"},
 	})
 
 	testCases = append(testCases, testCase{
@@ -13013,8 +12979,6 @@
 			},
 		},
 	})
-
-	// Test the client handles 0-RTT being rejected by a full handshake.
 	testCases = append(testCases, testCase{
 		testType: clientTest,
 		name:     "EarlyData-RejectTicket-Client-TLS13",
@@ -13036,9 +13000,6 @@
 			"-expect-ticket-supports-early-data",
 			"-expect-reject-early-data",
 			"-on-resume-shim-writes-first",
-			"-on-retry-expect-early-data-reason", "session_not_resumed",
-			// Test the peer certificate is reported correctly in each of the
-			// three logical connections.
 			"-on-initial-expect-peer-cert-file", path.Join(*resourceDir, rsaCertificateFile),
 			"-on-resume-expect-peer-cert-file", path.Join(*resourceDir, rsaCertificateFile),
 			"-on-retry-expect-peer-cert-file", path.Join(*resourceDir, ecdsaP256CertificateFile),
@@ -13047,34 +13008,6 @@
 		},
 	})
 
-	// Test the server rejects 0-RTT if it does not recognize the ticket.
-	testCases = append(testCases, testCase{
-		testType: serverTest,
-		name:     "EarlyData-RejectTicket-Server-TLS13",
-		config: Config{
-			MaxVersion: VersionTLS13,
-			MinVersion: VersionTLS13,
-			Bugs: ProtocolBugs{
-				SendEarlyData:           [][]byte{{1, 2, 3, 4}},
-				ExpectEarlyDataAccepted: false,
-				// Corrupt the ticket.
-				FilterTicket: func(in []byte) ([]byte, error) {
-					in[len(in)-1] ^= 1
-					return in, nil
-				},
-			},
-		},
-		messageCount:         2,
-		resumeSession:        true,
-		expectResumeRejected: true,
-		flags: []string{
-			"-enable-early-data",
-			"-on-resume-expect-reject-early-data",
-			"-on-resume-expect-early-data-reason", "session_not_resumed",
-		},
-	})
-
-	// Test the client handles 0-RTT being rejected via a HelloRetryRequest.
 	testCases = append(testCases, testCase{
 		testType: clientTest,
 		name:     "EarlyData-HRR-Client-TLS13",
@@ -13094,99 +13027,6 @@
 			"-enable-early-data",
 			"-expect-ticket-supports-early-data",
 			"-expect-reject-early-data",
-			"-on-retry-expect-early-data-reason", "hello_retry_request",
-		},
-	})
-
-	// Test the server rejects 0-RTT if it needs to send a HelloRetryRequest.
-	testCases = append(testCases, testCase{
-		testType: serverTest,
-		name:     "EarlyData-HRR-Server-TLS13",
-		config: Config{
-			MaxVersion: VersionTLS13,
-			MinVersion: VersionTLS13,
-			// Require a HelloRetryRequest for every curve.
-			DefaultCurves: []CurveID{},
-			Bugs: ProtocolBugs{
-				SendEarlyData:           [][]byte{{1, 2, 3, 4}},
-				ExpectEarlyDataAccepted: false,
-			},
-		},
-		messageCount:  2,
-		resumeSession: true,
-		flags: []string{
-			"-enable-early-data",
-			"-on-resume-expect-reject-early-data",
-			"-on-resume-expect-early-data-reason", "hello_retry_request",
-		},
-	})
-
-	// Test the client handles a 0-RTT reject from both ticket rejection and
-	// HelloRetryRequest.
-	testCases = append(testCases, testCase{
-		testType: clientTest,
-		name:     "EarlyData-HRR-RejectTicket-Client-TLS13",
-		config: Config{
-			MaxVersion:       VersionTLS13,
-			MaxEarlyDataSize: 16384,
-			Certificates:     []Certificate{rsaCertificate},
-		},
-		resumeConfig: &Config{
-			MaxVersion:             VersionTLS13,
-			MaxEarlyDataSize:       16384,
-			Certificates:           []Certificate{ecdsaP256Certificate},
-			SessionTicketsDisabled: true,
-			Bugs: ProtocolBugs{
-				SendHelloRetryRequestCookie: []byte{1, 2, 3, 4},
-			},
-		},
-		resumeSession:        true,
-		expectResumeRejected: true,
-		flags: []string{
-			"-enable-early-data",
-			"-expect-ticket-supports-early-data",
-			"-expect-reject-early-data",
-			// The client sees HelloRetryRequest before the resumption result,
-			// though neither value is inherently preferable.
-			"-on-retry-expect-early-data-reason", "hello_retry_request",
-			// Test the peer certificate is reported correctly in each of the
-			// three logical connections.
-			"-on-initial-expect-peer-cert-file", path.Join(*resourceDir, rsaCertificateFile),
-			"-on-resume-expect-peer-cert-file", path.Join(*resourceDir, rsaCertificateFile),
-			"-on-retry-expect-peer-cert-file", path.Join(*resourceDir, ecdsaP256CertificateFile),
-			// Session tickets are disabled, so the runner will not send a ticket.
-			"-on-retry-expect-no-session",
-		},
-	})
-
-	// Test the server rejects 0-RTT if it needs to send a HelloRetryRequest.
-	testCases = append(testCases, testCase{
-		testType: serverTest,
-		name:     "EarlyData-HRR-RejectTicket-Server-TLS13",
-		config: Config{
-			MaxVersion: VersionTLS13,
-			MinVersion: VersionTLS13,
-			// Require a HelloRetryRequest for every curve.
-			DefaultCurves: []CurveID{},
-			Bugs: ProtocolBugs{
-				SendEarlyData:           [][]byte{{1, 2, 3, 4}},
-				ExpectEarlyDataAccepted: false,
-				// Corrupt the ticket.
-				FilterTicket: func(in []byte) ([]byte, error) {
-					in[len(in)-1] ^= 1
-					return in, nil
-				},
-			},
-		},
-		messageCount:         2,
-		resumeSession:        true,
-		expectResumeRejected: true,
-		flags: []string{
-			"-enable-early-data",
-			"-on-resume-expect-reject-early-data",
-			// The server sees the missed resumption before HelloRetryRequest,
-			// though neither value is inherently preferable.
-			"-on-resume-expect-early-data-reason", "session_not_resumed",
 		},
 	})
 
@@ -13352,10 +13192,6 @@
 			"-enable-early-data",
 			"-expect-ticket-supports-early-data",
 			"-expect-reject-early-data",
-			// The client does not learn ALPN was the cause.
-			"-on-retry-expect-early-data-reason", "peer_declined",
-			// In the 0-RTT state, we surface the predicted ALPN. After
-			// processing the reject, we surface the real one.
 			"-on-initial-expect-alpn", "foo",
 			"-on-resume-expect-alpn", "foo",
 			"-on-retry-expect-alpn", "bar",
@@ -13382,10 +13218,6 @@
 			"-enable-early-data",
 			"-expect-ticket-supports-early-data",
 			"-expect-reject-early-data",
-			// The client does not learn ALPN was the cause.
-			"-on-retry-expect-early-data-reason", "peer_declined",
-			// In the 0-RTT state, we surface the predicted ALPN. After
-			// processing the reject, we surface the real one.
 			"-on-initial-expect-alpn", "",
 			"-on-resume-expect-alpn", "",
 			"-on-retry-expect-alpn", "foo",
@@ -13413,10 +13245,6 @@
 			"-enable-early-data",
 			"-expect-ticket-supports-early-data",
 			"-expect-reject-early-data",
-			// The client does not learn ALPN was the cause.
-			"-on-retry-expect-early-data-reason", "peer_declined",
-			// In the 0-RTT state, we surface the predicted ALPN. After
-			// processing the reject, we surface the real one.
 			"-on-initial-expect-alpn", "foo",
 			"-on-resume-expect-alpn", "foo",
 			"-on-retry-expect-alpn", "",
@@ -13471,31 +13299,10 @@
 			"-enable-early-data",
 			"-expect-ticket-supports-early-data",
 			"-expect-no-offer-early-data",
-			// Offer different ALPN values in the initial and resumption.
 			"-on-initial-advertise-alpn", "\x03foo",
-			"-on-initial-expect-alpn", "foo",
 			"-on-resume-advertise-alpn", "\x03bar",
+			"-on-initial-expect-alpn", "foo",
 			"-on-resume-expect-alpn", "bar",
-			// The ALPN mismatch comes from the client, so it reports it as the
-			// reason.
-			"-on-resume-expect-early-data-reason", "alpn_mismatch",
-		},
-	})
-
-	// Test that the client does not offer 0-RTT to servers which never
-	// advertise it.
-	testCases = append(testCases, testCase{
-		testType: clientTest,
-		name:     "EarlyData-NonZeroRTTSession-Client-TLS13",
-		config: Config{
-			MaxVersion: VersionTLS13,
-		},
-		resumeSession: true,
-		flags: []string{
-			"-enable-early-data",
-			"-on-resume-expect-no-offer-early-data",
-			// The client declines to offer 0-RTT because of the session.
-			"-on-resume-expect-early-data-reason", "unsupported_for_session",
 		},
 	})
 
@@ -13518,8 +13325,6 @@
 		flags: []string{
 			"-on-resume-enable-early-data",
 			"-expect-reject-early-data",
-			// The server rejects 0-RTT because of the session.
-			"-on-resume-expect-early-data-reason", "unsupported_for_session",
 		},
 	})
 
@@ -13545,7 +13350,6 @@
 			"-enable-early-data",
 			"-on-initial-select-alpn", "",
 			"-on-resume-select-alpn", "foo",
-			"-on-resume-expect-early-data-reason", "alpn_mismatch",
 		},
 	})
 
@@ -13571,7 +13375,6 @@
 			"-enable-early-data",
 			"-on-initial-select-alpn", "foo",
 			"-on-resume-select-alpn", "",
-			"-on-resume-expect-early-data-reason", "alpn_mismatch",
 		},
 	})
 
@@ -13596,7 +13399,6 @@
 			"-enable-early-data",
 			"-on-initial-select-alpn", "foo",
 			"-on-resume-select-alpn", "bar",
-			"-on-resume-expect-early-data-reason", "alpn_mismatch",
 		},
 	})
 
@@ -13641,8 +13443,6 @@
 			"-expect-ticket-supports-early-data",
 			"-send-channel-id", path.Join(*resourceDir, channelIDKeyFile),
 			"-expect-reject-early-data",
-			// The client never learns the reason was Channel ID.
-			"-on-retry-expect-early-data-reason", "peer_declined",
 		},
 	})
 
@@ -13660,8 +13460,7 @@
 			"-enable-early-data",
 			"-expect-ticket-supports-early-data",
 			"-send-channel-id", path.Join(*resourceDir, channelIDKeyFile),
-			"-on-resume-expect-accept-early-data",
-			"-on-resume-expect-early-data-reason", "accept",
+			"-expect-accept-early-data",
 		},
 	})
 
@@ -13685,7 +13484,6 @@
 			"-expect-reject-early-data",
 			"-expect-channel-id",
 			base64.StdEncoding.EncodeToString(channelIDBytes),
-			"-on-resume-expect-early-data-reason", "channel_id",
 		},
 	})
 
@@ -13706,9 +13504,8 @@
 		expectChannelID: false,
 		flags: []string{
 			"-enable-early-data",
-			"-on-resume-expect-accept-early-data",
+			"-expect-accept-early-data",
 			"-enable-channel-id",
-			"-on-resume-expect-early-data-reason", "accept",
 		},
 	})
 
@@ -13768,7 +13565,7 @@
 		flags: []string{
 			"-enable-early-data",
 			"-expect-ticket-supports-early-data",
-			"-on-resume-expect-accept-early-data",
+			"-expect-accept-early-data",
 			"-expect-version", strconv.Itoa(VersionTLS13),
 		},
 	})
@@ -13793,7 +13590,7 @@
 		flags: []string{
 			"-enable-early-data",
 			"-expect-ticket-supports-early-data",
-			"-on-resume-expect-accept-early-data",
+			"-expect-accept-early-data",
 		},
 		shouldFail:         true,
 		expectedError:      ":DIGEST_CHECK_FAILED:",
@@ -13817,7 +13614,7 @@
 		resumeSession: true,
 		flags: []string{
 			"-enable-early-data",
-			"-on-resume-expect-accept-early-data",
+			"-expect-accept-early-data",
 		},
 		shouldFail:         true,
 		expectedError:      ":DIGEST_CHECK_FAILED:",
@@ -13842,7 +13639,7 @@
 		flags: []string{
 			"-enable-early-data",
 			"-expect-ticket-supports-early-data",
-			"-on-resume-expect-accept-early-data",
+			"-expect-accept-early-data",
 		},
 		shouldFail:    true,
 		expectedError: ":DECODE_ERROR:",
@@ -13890,45 +13687,6 @@
 		expectedLocalError: "remote error: unexpected message",
 	})
 
-	// If the client or server has 0-RTT enabled but disabled TLS 1.3, it should
-	// report a reason of protocol_version.
-	testCases = append(testCases, testCase{
-		testType:        clientTest,
-		name:            "EarlyDataEnabled-Client-MaxTLS12",
-		expectedVersion: VersionTLS12,
-		flags: []string{
-			"-enable-early-data",
-			"-max-version", strconv.Itoa(VersionTLS12),
-			"-expect-early-data-reason", "protocol_version",
-		},
-	})
-	testCases = append(testCases, testCase{
-		testType:        serverTest,
-		name:            "EarlyDataEnabled-Server-MaxTLS12",
-		expectedVersion: VersionTLS12,
-		flags: []string{
-			"-enable-early-data",
-			"-max-version", strconv.Itoa(VersionTLS12),
-			"-expect-early-data-reason", "protocol_version",
-		},
-	})
-
-	// The server additionally reports protocol_version if it enabled TLS 1.3,
-	// but the peer negotiated TLS 1.2. (The corresponding situation does not
-	// exist on the client because negotiating TLS 1.2 with a 0-RTT ClientHello
-	// is a fatal error.)
-	testCases = append(testCases, testCase{
-		testType: serverTest,
-		name:     "EarlyDataEnabled-Server-NegotiateTLS12",
-		config: Config{
-			MaxVersion: VersionTLS12,
-		},
-		expectedVersion: VersionTLS12,
-		flags: []string{
-			"-enable-early-data",
-			"-expect-early-data-reason", "protocol_version",
-		},
-	})
 }
 
 func addTLS13CipherPreferenceTests() {
@@ -13998,22 +13756,6 @@
 			"-curves", strconv.Itoa(int(CurveCECPQ2)),
 		},
 	})
-
-	// CECPQ2b prefers 256-bit ciphers but will use AES-128 if there's nothing else.
-	testCases = append(testCases, testCase{
-		testType: serverTest,
-		name:     "TLS13-CipherPreference-CECPQ2b-AES128Only",
-		config: Config{
-			MaxVersion: VersionTLS13,
-			CipherSuites: []uint16{
-				TLS_AES_128_GCM_SHA256,
-			},
-		},
-		flags: []string{
-			"-curves", strconv.Itoa(int(CurveCECPQ2b)),
-		},
-	})
-
 	// When a 256-bit cipher is offered, even if not in first place, it should be
 	// picked.
 	testCases = append(testCases, testCase{
@@ -14048,40 +13790,6 @@
 		expectedCipher: TLS_AES_128_GCM_SHA256,
 	})
 
-	// When a 256-bit cipher is offered, even if not in first place, it should be
-	// picked.
-	testCases = append(testCases, testCase{
-		testType: serverTest,
-		name:     "TLS13-CipherPreference-CECPQ2b-AES256Preferred",
-		config: Config{
-			MaxVersion: VersionTLS13,
-			CipherSuites: []uint16{
-				TLS_AES_128_GCM_SHA256,
-				TLS_AES_256_GCM_SHA384,
-			},
-		},
-		flags: []string{
-			"-curves", strconv.Itoa(int(CurveCECPQ2b)),
-		},
-		expectedCipher: TLS_AES_256_GCM_SHA384,
-	})
-	// ... but when CECPQ2b isn't being used, the client's preference controls.
-	testCases = append(testCases, testCase{
-		testType: serverTest,
-		name:     "TLS13-CipherPreference-CECPQ2b-AES128PreferredOtherwise",
-		config: Config{
-			MaxVersion: VersionTLS13,
-			CipherSuites: []uint16{
-				TLS_AES_128_GCM_SHA256,
-				TLS_AES_256_GCM_SHA384,
-			},
-		},
-		flags: []string{
-			"-curves", strconv.Itoa(int(CurveX25519)),
-		},
-		expectedCipher: TLS_AES_128_GCM_SHA256,
-	})
-
 	// Test that CECPQ2 continues to honor AES vs ChaCha20 logic.
 	testCases = append(testCases, testCase{
 		testType: serverTest,
@@ -14117,42 +13825,6 @@
 			"-expect-cipher-no-aes", strconv.Itoa(int(TLS_CHACHA20_POLY1305_SHA256)),
 		},
 	})
-
-	// Test that CECPQ2b continues to honor AES vs ChaCha20 logic.
-	testCases = append(testCases, testCase{
-		testType: serverTest,
-		name:     "TLS13-CipherPreference-CECPQ2b-AES128-ChaCha20-AES256",
-		config: Config{
-			MaxVersion: VersionTLS13,
-			CipherSuites: []uint16{
-				TLS_AES_128_GCM_SHA256,
-				TLS_CHACHA20_POLY1305_SHA256,
-				TLS_AES_256_GCM_SHA384,
-			},
-		},
-		flags: []string{
-			"-curves", strconv.Itoa(int(CurveCECPQ2b)),
-			"-expect-cipher-aes", strconv.Itoa(int(TLS_CHACHA20_POLY1305_SHA256)),
-			"-expect-cipher-no-aes", strconv.Itoa(int(TLS_CHACHA20_POLY1305_SHA256)),
-		},
-	})
-	testCases = append(testCases, testCase{
-		testType: serverTest,
-		name:     "TLS13-CipherPreference-CECPQ2b-AES128-AES256-ChaCha20",
-		config: Config{
-			MaxVersion: VersionTLS13,
-			CipherSuites: []uint16{
-				TLS_AES_128_GCM_SHA256,
-				TLS_AES_256_GCM_SHA384,
-				TLS_CHACHA20_POLY1305_SHA256,
-			},
-		},
-		flags: []string{
-			"-curves", strconv.Itoa(int(CurveCECPQ2b)),
-			"-expect-cipher-aes", strconv.Itoa(int(TLS_AES_256_GCM_SHA384)),
-			"-expect-cipher-no-aes", strconv.Itoa(int(TLS_CHACHA20_POLY1305_SHA256)),
-		},
-	})
 }
 
 func addPeekTests() {
@@ -14718,7 +14390,7 @@
 		flags: []string{
 			"-async",
 			"-enable-early-data",
-			"-on-resume-expect-accept-early-data",
+			"-expect-accept-early-data",
 			"-no-op-extra-handshake",
 		},
 	})
@@ -15291,7 +14963,6 @@
 		},
 		flags: []string{
 			"-delegated-credential", ecdsaFlagValue,
-			"-expect-delegated-credential-used",
 		},
 	})
 
@@ -15342,67 +15013,6 @@
 	})
 }
 
-func addPQExperimentSignalTests() {
-	testCases = append(testCases, testCase{
-		testType: serverTest,
-		name:     "PQExperimentSignal-Server-NoEchoIfNotConfigured",
-		config: Config{
-			MinVersion: VersionTLS13,
-			MaxVersion: VersionTLS13,
-			Bugs: ProtocolBugs{
-				ExpectPQExperimentSignal: false,
-			},
-			PQExperimentSignal: true,
-		},
-	})
-
-	testCases = append(testCases, testCase{
-		testType: serverTest,
-		name:     "PQExperimentSignal-Server-Echo",
-		config: Config{
-			MinVersion: VersionTLS13,
-			MaxVersion: VersionTLS13,
-			Bugs: ProtocolBugs{
-				ExpectPQExperimentSignal: true,
-			},
-			PQExperimentSignal: true,
-		},
-		flags: []string{
-			"-enable-pq-experiment-signal",
-			"-expect-pq-experiment-signal",
-		},
-	})
-
-	testCases = append(testCases, testCase{
-		testType: clientTest,
-		name:     "PQExperimentSignal-Client-NotDefault",
-		config: Config{
-			MinVersion: VersionTLS13,
-			MaxVersion: VersionTLS13,
-			Bugs: ProtocolBugs{
-				ExpectPQExperimentSignal: false,
-			},
-			PQExperimentSignal: true,
-		},
-	})
-
-	testCases = append(testCases, testCase{
-		testType: clientTest,
-		name:     "PQExperimentSignal-Client",
-		config: Config{
-			MinVersion: VersionTLS13,
-			MaxVersion: VersionTLS13,
-			Bugs: ProtocolBugs{
-				ExpectPQExperimentSignal: true,
-			},
-		},
-		flags: []string{
-			"-enable-pq-experiment-signal",
-			"-expect-pq-experiment-signal",
-		},
-	})
-}
-
 func worker(statusChan chan statusMsg, c chan *testCase, shimPath string, wg *sync.WaitGroup) {
 	defer wg.Done()
 
@@ -15540,7 +15150,6 @@
 	addCertCompressionTests()
 	addJDK11WorkaroundTests()
 	addDelegatedCredentialTests()
-	addPQExperimentSignalTests()
 
 	testCases = append(testCases, convertToSplitHandshakeTests(testCases)...)
 
diff --git a/src/ssl/test/runner/sike/arith.go b/src/ssl/test/runner/sike/arith.go
deleted file mode 100644
index 10a2ca6..0000000
--- a/src/ssl/test/runner/sike/arith.go
+++ /dev/null
@@ -1,374 +0,0 @@
-// Copyright (c) 2019, Cloudflare Inc.
-//
-// Permission to use, copy, modify, and/or distribute this software for any
-// purpose with or without fee is hereby granted, provided that the above
-// copyright notice and this permission notice appear in all copies.
-//
-// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
-// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
-// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
-// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
-// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
-// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-
-package sike
-
-import (
-	"math/bits"
-)
-
-// Compute z = x + y (mod 2*p).
-func fpAddRdc(z, x, y *Fp) {
-	var carry uint64
-
-	// z=x+y % p
-	for i := 0; i < FP_WORDS; i++ {
-		z[i], carry = bits.Add64(x[i], y[i], carry)
-	}
-
-	// z = z - pX2
-	carry = 0
-	for i := 0; i < FP_WORDS; i++ {
-		z[i], carry = bits.Sub64(z[i], pX2[i], carry)
-	}
-
-	// if z<0 add pX2 back
-	mask := uint64(0 - carry)
-	carry = 0
-	for i := 0; i < FP_WORDS; i++ {
-		z[i], carry = bits.Add64(z[i], pX2[i]&mask, carry)
-	}
-}
-
-// Compute z = x - y (mod 2*p).
-func fpSubRdc(z, x, y *Fp) {
-	var borrow uint64
-
-	// z = z - pX2
-	for i := 0; i < FP_WORDS; i++ {
-		z[i], borrow = bits.Sub64(x[i], y[i], borrow)
-	}
-
-	// if z<0 add pX2 back
-	mask := uint64(0 - borrow)
-	borrow = 0
-	for i := 0; i < FP_WORDS; i++ {
-		z[i], borrow = bits.Add64(z[i], pX2[i]&mask, borrow)
-	}
-}
-
-// Reduce a field element in [0, 2*p) to one in [0,p).
-func fpRdcP(x *Fp) {
-	var borrow, mask uint64
-	for i := 0; i < FP_WORDS; i++ {
-		x[i], borrow = bits.Sub64(x[i], p[i], borrow)
-	}
-
-	// Sets all bits if borrow = 1
-	mask = 0 - borrow
-	borrow = 0
-	for i := 0; i < FP_WORDS; i++ {
-		x[i], borrow = bits.Add64(x[i], p[i]&mask, borrow)
-	}
-}
-
-// Implementation doesn't actually depend on a prime field.
-func fpSwapCond(x, y *Fp, mask uint8) {
-	if mask != 0 {
-		var tmp Fp
-		copy(tmp[:], y[:])
-		copy(y[:], x[:])
-		copy(x[:], tmp[:])
-	}
-}
-
-// Compute z = x * y.
-func fpMul(z *FpX2, x, y *Fp) {
-	var carry, t, u, v uint64
-	var hi, lo uint64
-
-	for i := uint64(0); i < FP_WORDS; i++ {
-		for j := uint64(0); j <= i; j++ {
-			hi, lo = bits.Mul64(x[j], y[i-j])
-			v, carry = bits.Add64(lo, v, 0)
-			u, carry = bits.Add64(hi, u, carry)
-			t += carry
-		}
-		z[i] = v
-		v = u
-		u = t
-		t = 0
-	}
-
-	for i := FP_WORDS; i < (2*FP_WORDS)-1; i++ {
-		for j := i - FP_WORDS + 1; j < FP_WORDS; j++ {
-			hi, lo = bits.Mul64(x[j], y[i-j])
-			v, carry = bits.Add64(lo, v, 0)
-			u, carry = bits.Add64(hi, u, carry)
-			t += carry
-		}
-		z[i] = v
-		v = u
-		u = t
-		t = 0
-	}
-	z[2*FP_WORDS-1] = v
-}
-
-// Perform Montgomery reduction: set z = x R^{-1} (mod 2*p)
-// with R=2^512. Destroys the input value.
-func fpMontRdc(z *Fp, x *FpX2) {
-	var carry, t, u, v uint64
-	var hi, lo uint64
-	var count int
-
-	count = 3 // number of 0 digits in the least significat part of p + 1
-
-	for i := 0; i < FP_WORDS; i++ {
-		for j := 0; j < i; j++ {
-			if j < (i - count + 1) {
-				hi, lo = bits.Mul64(z[j], p1[i-j])
-				v, carry = bits.Add64(lo, v, 0)
-				u, carry = bits.Add64(hi, u, carry)
-				t += carry
-			}
-		}
-		v, carry = bits.Add64(v, x[i], 0)
-		u, carry = bits.Add64(u, 0, carry)
-		t += carry
-
-		z[i] = v
-		v = u
-		u = t
-		t = 0
-	}
-
-	for i := FP_WORDS; i < 2*FP_WORDS-1; i++ {
-		if count > 0 {
-			count--
-		}
-		for j := i - FP_WORDS + 1; j < FP_WORDS; j++ {
-			if j < (FP_WORDS - count) {
-				hi, lo = bits.Mul64(z[j], p1[i-j])
-				v, carry = bits.Add64(lo, v, 0)
-				u, carry = bits.Add64(hi, u, carry)
-				t += carry
-			}
-		}
-		v, carry = bits.Add64(v, x[i], 0)
-		u, carry = bits.Add64(u, 0, carry)
-
-		t += carry
-		z[i-FP_WORDS] = v
-		v = u
-		u = t
-		t = 0
-	}
-	v, carry = bits.Add64(v, x[2*FP_WORDS-1], 0)
-	z[FP_WORDS-1] = v
-}
-
-// Compute z = x + y, without reducing mod p.
-func fp2Add(z, x, y *FpX2) {
-	var carry uint64
-	for i := 0; i < 2*FP_WORDS; i++ {
-		z[i], carry = bits.Add64(x[i], y[i], carry)
-	}
-}
-
-// Compute z = x - y, without reducing mod p.
-func fp2Sub(z, x, y *FpX2) {
-	var borrow, mask uint64
-	for i := 0; i < 2*FP_WORDS; i++ {
-		z[i], borrow = bits.Sub64(x[i], y[i], borrow)
-	}
-
-	// Sets all bits if borrow = 1
-	mask = 0 - borrow
-	borrow = 0
-	for i := FP_WORDS; i < 2*FP_WORDS; i++ {
-		z[i], borrow = bits.Add64(z[i], p[i-FP_WORDS]&mask, borrow)
-	}
-}
-
-// Montgomery multiplication. Input values must be already
-// in Montgomery domain.
-func fpMulRdc(dest, lhs, rhs *Fp) {
-	a := lhs // = a*R
-	b := rhs // = b*R
-
-	var ab FpX2
-	fpMul(&ab, a, b)     // = a*b*R*R
-	fpMontRdc(dest, &ab) // = a*b*R mod p
-}
-
-// Set dest = x^((p-3)/4).  If x is square, this is 1/sqrt(x).
-// Uses variation of sliding-window algorithm from with window size
-// of 5 and least to most significant bit sliding (left-to-right)
-// See HAC 14.85 for general description.
-//
-// Allowed to overlap x with dest.
-// All values in Montgomery domains
-// Set dest = x^(2^k), for k >= 1, by repeated squarings.
-func p34(dest, x *Fp) {
-	var lookup [16]Fp
-
-	// This performs sum(powStrategy) + 1 squarings and len(lookup) + len(mulStrategy)
-	// multiplications.
-	powStrategy := []uint8{
-		0x03, 0x0A, 0x07, 0x05, 0x06, 0x05, 0x03, 0x08, 0x04, 0x07,
-		0x05, 0x06, 0x04, 0x05, 0x09, 0x06, 0x03, 0x0B, 0x05, 0x05,
-		0x02, 0x08, 0x04, 0x07, 0x07, 0x08, 0x05, 0x06, 0x04, 0x08,
-		0x05, 0x02, 0x0A, 0x06, 0x05, 0x04, 0x08, 0x05, 0x05, 0x05,
-		0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
-		0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
-		0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
-		0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x01}
-	mulStrategy := []uint8{
-		0x02, 0x0F, 0x09, 0x08, 0x0E, 0x0C, 0x02, 0x08, 0x05, 0x0F,
-		0x08, 0x0F, 0x06, 0x06, 0x03, 0x02, 0x00, 0x0A, 0x09, 0x0D,
-		0x01, 0x0C, 0x03, 0x07, 0x01, 0x0A, 0x08, 0x0B, 0x02, 0x0F,
-		0x0E, 0x01, 0x0B, 0x0C, 0x0E, 0x03, 0x0B, 0x0F, 0x0F, 0x0F,
-		0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F,
-		0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F,
-		0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F,
-		0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x00}
-	initialMul := uint8(8)
-
-	// Precompute lookup table of odd multiples of x for window
-	// size k=5.
-	var xx Fp
-	fpMulRdc(&xx, x, x)
-	lookup[0] = *x
-	for i := 1; i < 16; i++ {
-		fpMulRdc(&lookup[i], &lookup[i-1], &xx)
-	}
-
-	// Now lookup = {x, x^3, x^5, ... }
-	// so that lookup[i] = x^{2*i + 1}
-	// so that lookup[k/2] = x^k, for odd k
-	*dest = lookup[initialMul]
-	for i := uint8(0); i < uint8(len(powStrategy)); i++ {
-		fpMulRdc(dest, dest, dest)
-		for j := uint8(1); j < powStrategy[i]; j++ {
-			fpMulRdc(dest, dest, dest)
-		}
-		fpMulRdc(dest, dest, &lookup[mulStrategy[i]])
-	}
-}
-
-func add(dest, lhs, rhs *Fp2) {
-	fpAddRdc(&dest.A, &lhs.A, &rhs.A)
-	fpAddRdc(&dest.B, &lhs.B, &rhs.B)
-}
-
-func sub(dest, lhs, rhs *Fp2) {
-	fpSubRdc(&dest.A, &lhs.A, &rhs.A)
-	fpSubRdc(&dest.B, &lhs.B, &rhs.B)
-}
-
-func mul(dest, lhs, rhs *Fp2) {
-	// Let (a,b,c,d) = (lhs.a,lhs.b,rhs.a,rhs.b).
-	a := &lhs.A
-	b := &lhs.B
-	c := &rhs.A
-	d := &rhs.B
-
-	// We want to compute
-	//
-	// (a + bi)*(c + di) = (a*c - b*d) + (a*d + b*c)i
-	//
-	// Use Karatsuba's trick: note that
-	//
-	// (b - a)*(c - d) = (b*c + a*d) - a*c - b*d
-	//
-	// so (a*d + b*c) = (b-a)*(c-d) + a*c + b*d.
-
-	var ac, bd FpX2
-	fpMul(&ac, a, c) // = a*c*R*R
-	fpMul(&bd, b, d) // = b*d*R*R
-
-	var b_minus_a, c_minus_d Fp
-	fpSubRdc(&b_minus_a, b, a) // = (b-a)*R
-	fpSubRdc(&c_minus_d, c, d) // = (c-d)*R
-
-	var ad_plus_bc FpX2
-	fpMul(&ad_plus_bc, &b_minus_a, &c_minus_d) // = (b-a)*(c-d)*R*R
-	fp2Add(&ad_plus_bc, &ad_plus_bc, &ac)      // = ((b-a)*(c-d) + a*c)*R*R
-	fp2Add(&ad_plus_bc, &ad_plus_bc, &bd)      // = ((b-a)*(c-d) + a*c + b*d)*R*R
-
-	fpMontRdc(&dest.B, &ad_plus_bc) // = (a*d + b*c)*R mod p
-
-	var ac_minus_bd FpX2
-	fp2Sub(&ac_minus_bd, &ac, &bd)   // = (a*c - b*d)*R*R
-	fpMontRdc(&dest.A, &ac_minus_bd) // = (a*c - b*d)*R mod p
-}
-
-func inv(dest, x *Fp2) {
-	var a2PlusB2 Fp
-	var asq, bsq FpX2
-	var ac FpX2
-	var minusB Fp
-	var minusBC FpX2
-
-	a := &x.A
-	b := &x.B
-
-	// We want to compute
-	//
-	//    1          1     (a - bi)	    (a - bi)
-	// -------- = -------- -------- = -----------
-	// (a + bi)   (a + bi) (a - bi)   (a^2 + b^2)
-	//
-	// Letting c = 1/(a^2 + b^2), this is
-	//
-	// 1/(a+bi) = a*c - b*ci.
-
-	fpMul(&asq, a, a)          // = a*a*R*R
-	fpMul(&bsq, b, b)          // = b*b*R*R
-	fp2Add(&asq, &asq, &bsq)   // = (a^2 + b^2)*R*R
-	fpMontRdc(&a2PlusB2, &asq) // = (a^2 + b^2)*R mod p
-	// Now a2PlusB2 = a^2 + b^2
-
-	inv := a2PlusB2
-	fpMulRdc(&inv, &a2PlusB2, &a2PlusB2)
-	p34(&inv, &inv)
-	fpMulRdc(&inv, &inv, &inv)
-	fpMulRdc(&inv, &inv, &a2PlusB2)
-
-	fpMul(&ac, a, &inv)
-	fpMontRdc(&dest.A, &ac)
-
-	fpSubRdc(&minusB, &minusB, b)
-	fpMul(&minusBC, &minusB, &inv)
-	fpMontRdc(&dest.B, &minusBC)
-}
-
-func sqr(dest, x *Fp2) {
-	var a2, aPlusB, aMinusB Fp
-	var a2MinB2, ab2 FpX2
-
-	a := &x.A
-	b := &x.B
-
-	// (a + bi)*(a + bi) = (a^2 - b^2) + 2abi.
-	fpAddRdc(&a2, a, a)                // = a*R + a*R = 2*a*R
-	fpAddRdc(&aPlusB, a, b)            // = a*R + b*R = (a+b)*R
-	fpSubRdc(&aMinusB, a, b)           // = a*R - b*R = (a-b)*R
-	fpMul(&a2MinB2, &aPlusB, &aMinusB) // = (a+b)*(a-b)*R*R = (a^2 - b^2)*R*R
-	fpMul(&ab2, &a2, b)                // = 2*a*b*R*R
-	fpMontRdc(&dest.A, &a2MinB2)       // = (a^2 - b^2)*R mod p
-	fpMontRdc(&dest.B, &ab2)           // = 2*a*b*R mod p
-}
-
-// In case choice == 1, performs following swap in constant time:
-// 	xPx <-> xQx
-//	xPz <-> xQz
-// Otherwise returns xPx, xPz, xQx, xQz unchanged
-func condSwap(xPx, xPz, xQx, xQz *Fp2, choice uint8) {
-	fpSwapCond(&xPx.A, &xQx.A, choice)
-	fpSwapCond(&xPx.B, &xQx.B, choice)
-	fpSwapCond(&xPz.A, &xQz.A, choice)
-	fpSwapCond(&xPz.B, &xQz.B, choice)
-}
diff --git a/src/ssl/test/runner/sike/consts.go b/src/ssl/test/runner/sike/consts.go
deleted file mode 100644
index 9d68a4f..0000000
--- a/src/ssl/test/runner/sike/consts.go
+++ /dev/null
@@ -1,317 +0,0 @@
-// Copyright (c) 2019, Cloudflare Inc.
-//
-// Permission to use, copy, modify, and/or distribute this software for any
-// purpose with or without fee is hereby granted, provided that the above
-// copyright notice and this permission notice appear in all copies.
-//
-// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
-// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
-// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
-// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
-// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
-// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-
-package sike
-
-// I keep it bool in order to be able to apply logical NOT
-type KeyVariant uint
-
-// Representation of an element of the base field F_p.
-//
-// No particular meaning is assigned to the representation -- it could represent
-// an element in Montgomery form, or not.  Tracking the meaning of the field
-// element is left to higher types.
-type Fp [FP_WORDS]uint64
-
-// Represents an intermediate product of two elements of the base field F_p.
-type FpX2 [2 * FP_WORDS]uint64
-
-// Represents an element of the extended field Fp^2 = Fp(x+i)
-type Fp2 struct {
-	A Fp
-	B Fp
-}
-
-type DomainParams struct {
-	// P, Q and R=P-Q base points
-	Affine_P, Affine_Q, Affine_R Fp2
-	// Size of a compuatation strategy for x-torsion group
-	IsogenyStrategy []uint32
-	// Max size of secret key for x-torsion group
-	SecretBitLen uint
-	// Max size of secret key for x-torsion group
-	SecretByteLen uint
-}
-
-type SidhParams struct {
-	Id uint8
-	// Bytelen of P
-	Bytelen int
-	// The public key size, in bytes.
-	PublicKeySize int
-	// The shared secret size, in bytes.
-	SharedSecretSize int
-	// Defines A,C constant for starting curve Cy^2 = x^3 + Ax^2 + x
-	InitCurve ProjectiveCurveParameters
-	// 2- and 3-torsion group parameter definitions
-	A, B DomainParams
-	// Precomputed 1/2 in the Fp2 in Montgomery domain
-	HalfFp2 Fp2
-	// Precomputed identity element in the Fp2 in Montgomery domain
-	OneFp2 Fp2
-	// Length of SIKE secret message. Must be one of {24,32,40},
-	// depending on size of prime field used (see [SIKE], 1.4 and 5.1)
-	MsgLen int
-	// Length of SIKE ephemeral KEM key (see [SIKE], 1.4 and 5.1)
-	KemSize int
-	// Size of a ciphertext returned by encapsulation in bytes
-	CiphertextSize int
-}
-
-// Stores curve projective parameters equivalent to A/C. Meaning of the
-// values depends on the context. When working with isogenies over
-// subgroup that are powers of:
-// * three then  (A:C) ~ (A+2C:A-2C)
-// * four then   (A:C) ~ (A+2C:  4C)
-// See Appendix A of SIKE for more details
-type CurveCoefficientsEquiv struct {
-	A Fp2
-	C Fp2
-}
-
-// A point on the projective line P^1(F_{p^2}).
-//
-// This represents a point on the Kummer line of a Montgomery curve.  The
-// curve is specified by a ProjectiveCurveParameters struct.
-type ProjectivePoint struct {
-	X Fp2
-	Z Fp2
-}
-
-// Base type for public and private key. Used mainly to carry domain
-// parameters.
-type key struct {
-	// Domain parameters of the algorithm to be used with a key
-	params *SidhParams
-	// Flag indicates whether corresponds to 2-, 3-torsion group or SIKE
-	keyVariant KeyVariant
-}
-
-// Defines operations on private key
-type PrivateKey struct {
-	key
-	// Secret key
-	Scalar []byte
-	// Used only by KEM
-	S []byte
-}
-
-// Defines operations on public key
-type PublicKey struct {
-	key
-	affine_xP   Fp2
-	affine_xQ   Fp2
-	affine_xQmP Fp2
-}
-
-// A point on the projective line P^1(F_{p^2}).
-//
-// This is used to work projectively with the curve coefficients.
-type ProjectiveCurveParameters struct {
-	A Fp2
-	C Fp2
-}
-
-const (
-	// First 2 bits identify SIDH variant third bit indicates
-	// whether key is a SIKE variant (set) or SIDH (not set)
-
-	// 001 - SIDH: corresponds to 2-torsion group
-	KeyVariant_SIDH_A KeyVariant = 1 << 0
-	// 010 - SIDH: corresponds to 3-torsion group
-	KeyVariant_SIDH_B = 1 << 1
-	// 110 - SIKE
-	KeyVariant_SIKE = 1<<2 | KeyVariant_SIDH_B
-	// Number of uint64 limbs used to store field element
-	FP_WORDS = 7
-)
-
-// Used internally by this package
-// -------------------------------
-
-var (
-	p = Fp{
-		0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFDC1767AE2FFFFFF,
-		0x7BC65C783158AEA3, 0x6CFC5FD681C52056, 0x2341F27177344,
-	}
-
-	// 2*p434
-	pX2 = Fp{
-		0xFFFFFFFFFFFFFFFE, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFB82ECF5C5FFFFFF,
-		0xF78CB8F062B15D47, 0xD9F8BFAD038A40AC, 0x4683E4E2EE688,
-	}
-
-	// p434 + 1
-	p1 = Fp{
-		0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0xFDC1767AE3000000,
-		0x7BC65C783158AEA3, 0x6CFC5FD681C52056, 0x0002341F27177344,
-	}
-
-	// R^2=(2^448)^2 mod p
-	R2 = Fp{
-		0x28E55B65DCD69B30, 0xACEC7367768798C2, 0xAB27973F8311688D, 0x175CC6AF8D6C7C0B,
-		0xABCD92BF2DDE347E, 0x69E16A61C7686D9A, 0x000025A89BCDD12A,
-	}
-
-	// 1/2 * R mod p
-	half = Fp2{
-		A: Fp{
-			0x0000000000003A16, 0x0000000000000000, 0x0000000000000000, 0x5C87FA027E000000,
-			0x6C00D27DAACFD66A, 0x74992A2A2FBBA086, 0x0000767753DE976D},
-	}
-
-	// 1*R mod p
-	one = Fp2{
-		A: Fp{
-			0x000000000000742C, 0x0000000000000000, 0x0000000000000000, 0xB90FF404FC000000,
-			0xD801A4FB559FACD4, 0xE93254545F77410C, 0x0000ECEEA7BD2EDA},
-	}
-
-	// 6*R mod p
-	six = Fp2{
-		A: Fp{
-			0x000000000002B90A, 0x0000000000000000, 0x0000000000000000, 0x5ADCCB2822000000,
-			0x187D24F39F0CAFB4, 0x9D353A4D394145A0, 0x00012559A0403298},
-	}
-
-	Params SidhParams
-)
-
-func init() {
-	Params = SidhParams{
-		// SIDH public key byte size.
-		PublicKeySize: 330,
-		// SIDH shared secret byte size.
-		SharedSecretSize: 110,
-		InitCurve: ProjectiveCurveParameters{
-			A: six,
-			C: one,
-		},
-		A: DomainParams{
-			// The x-coordinate of PA
-			Affine_P: Fp2{
-				A: Fp{
-					0x05ADF455C5C345BF, 0x91935C5CC767AC2B, 0xAFE4E879951F0257, 0x70E792DC89FA27B1,
-					0xF797F526BB48C8CD, 0x2181DB6131AF621F, 0x00000A1C08B1ECC4,
-				},
-				B: Fp{
-					0x74840EB87CDA7788, 0x2971AA0ECF9F9D0B, 0xCB5732BDF41715D5, 0x8CD8E51F7AACFFAA,
-					0xA7F424730D7E419F, 0xD671EB919A179E8C, 0x0000FFA26C5A924A,
-				},
-			},
-			// The x-coordinate of QA
-			Affine_Q: Fp2{
-				A: Fp{
-					0xFEC6E64588B7273B, 0xD2A626D74CBBF1C6, 0xF8F58F07A78098C7, 0xE23941F470841B03,
-					0x1B63EDA2045538DD, 0x735CFEB0FFD49215, 0x0001C4CB77542876,
-				},
-				B: Fp{
-					0xADB0F733C17FFDD6, 0x6AFFBD037DA0A050, 0x680EC43DB144E02F, 0x1E2E5D5FF524E374,
-					0xE2DDA115260E2995, 0xA6E4B552E2EDE508, 0x00018ECCDDF4B53E,
-				},
-			},
-			// The x-coordinate of RA = PA-QA
-			Affine_R: Fp2{
-				A: Fp{
-					0x01BA4DB518CD6C7D, 0x2CB0251FE3CC0611, 0x259B0C6949A9121B, 0x60E17AC16D2F82AD,
-					0x3AA41F1CE175D92D, 0x413FBE6A9B9BC4F3, 0x00022A81D8D55643,
-				},
-				B: Fp{
-					0xB8ADBC70FC82E54A, 0xEF9CDDB0D5FADDED, 0x5820C734C80096A0, 0x7799994BAA96E0E4,
-					0x044961599E379AF8, 0xDB2B94FBF09F27E2, 0x0000B87FC716C0C6,
-				},
-			},
-			// Max size of secret key for 2-torsion group, corresponds to 2^e2 - 1
-			SecretBitLen: 216,
-			// SecretBitLen in bytes.
-			SecretByteLen: 27,
-			// 2-torsion group computation strategy
-			IsogenyStrategy: []uint32{
-				0x30, 0x1C, 0x10, 0x08, 0x04, 0x02, 0x01, 0x01, 0x02, 0x01,
-				0x01, 0x04, 0x02, 0x01, 0x01, 0x02, 0x01, 0x01, 0x08, 0x04,
-				0x02, 0x01, 0x01, 0x02, 0x01, 0x01, 0x04, 0x02, 0x01, 0x01,
-				0x02, 0x01, 0x01, 0x0D, 0x07, 0x04, 0x02, 0x01, 0x01, 0x02,
-				0x01, 0x01, 0x03, 0x02, 0x01, 0x01, 0x01, 0x01, 0x05, 0x04,
-				0x02, 0x01, 0x01, 0x02, 0x01, 0x01, 0x02, 0x01, 0x01, 0x01,
-				0x15, 0x0C, 0x07, 0x04, 0x02, 0x01, 0x01, 0x02, 0x01, 0x01,
-				0x03, 0x02, 0x01, 0x01, 0x01, 0x01, 0x05, 0x03, 0x02, 0x01,
-				0x01, 0x01, 0x01, 0x02, 0x01, 0x01, 0x01, 0x09, 0x05, 0x03,
-				0x02, 0x01, 0x01, 0x01, 0x01, 0x02, 0x01, 0x01, 0x01, 0x04,
-				0x02, 0x01, 0x01, 0x01, 0x02, 0x01, 0x01},
-		},
-		B: DomainParams{
-			// The x-coordinate of PB
-			Affine_P: Fp2{
-				A: Fp{
-					0x6E5497556EDD48A3, 0x2A61B501546F1C05, 0xEB919446D049887D, 0x5864A4A69D450C4F,
-					0xB883F276A6490D2B, 0x22CC287022D5F5B9, 0x0001BED4772E551F,
-				},
-				B: Fp{
-					0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
-					0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
-				},
-			},
-			// The x-coordinate of QB
-			Affine_Q: Fp2{
-				A: Fp{
-					0xFAE2A3F93D8B6B8E, 0x494871F51700FE1C, 0xEF1A94228413C27C, 0x498FF4A4AF60BD62,
-					0xB00AD2A708267E8A, 0xF4328294E017837F, 0x000034080181D8AE,
-				},
-				B: Fp{
-					0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
-					0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
-				},
-			},
-			// The x-coordinate of RB = PB - QB
-			Affine_R: Fp2{
-				A: Fp{
-					0x283B34FAFEFDC8E4, 0x9208F44977C3E647, 0x7DEAE962816F4E9A, 0x68A2BA8AA262EC9D,
-					0x8176F112EA43F45B, 0x02106D022634F504, 0x00007E8A50F02E37,
-				},
-				B: Fp{
-					0xB378B7C1DA22CCB1, 0x6D089C99AD1D9230, 0xEBE15711813E2369, 0x2B35A68239D48A53,
-					0x445F6FD138407C93, 0xBEF93B29A3F6B54B, 0x000173FA910377D3,
-				},
-			},
-			// Size of secret key for 3-torsion group, corresponds to log_2(3^e3) - 1.
-			SecretBitLen: 217,
-			// SecretBitLen in bytes.
-			SecretByteLen: 28,
-			// 3-torsion group computation strategy
-			IsogenyStrategy: []uint32{
-				0x42, 0x21, 0x11, 0x09, 0x05, 0x03, 0x02, 0x01, 0x01, 0x01,
-				0x01, 0x02, 0x01, 0x01, 0x01, 0x04, 0x02, 0x01, 0x01, 0x01,
-				0x02, 0x01, 0x01, 0x08, 0x04, 0x02, 0x01, 0x01, 0x01, 0x02,
-				0x01, 0x01, 0x04, 0x02, 0x01, 0x01, 0x02, 0x01, 0x01, 0x10,
-				0x08, 0x04, 0x02, 0x01, 0x01, 0x01, 0x02, 0x01, 0x01, 0x04,
-				0x02, 0x01, 0x01, 0x02, 0x01, 0x01, 0x08, 0x04, 0x02, 0x01,
-				0x01, 0x02, 0x01, 0x01, 0x04, 0x02, 0x01, 0x01, 0x02, 0x01,
-				0x01, 0x20, 0x10, 0x08, 0x04, 0x03, 0x01, 0x01, 0x01, 0x01,
-				0x02, 0x01, 0x01, 0x04, 0x02, 0x01, 0x01, 0x02, 0x01, 0x01,
-				0x08, 0x04, 0x02, 0x01, 0x01, 0x02, 0x01, 0x01, 0x04, 0x02,
-				0x01, 0x01, 0x02, 0x01, 0x01, 0x10, 0x08, 0x04, 0x02, 0x01,
-				0x01, 0x02, 0x01, 0x01, 0x04, 0x02, 0x01, 0x01, 0x02, 0x01,
-				0x01, 0x08, 0x04, 0x02, 0x01, 0x01, 0x02, 0x01, 0x01, 0x04,
-				0x02, 0x01, 0x01, 0x02, 0x01, 0x01},
-		},
-		OneFp2:  one,
-		HalfFp2: half,
-		MsgLen:  16,
-		// SIKEp434 provides 128 bit of classical security ([SIKE], 5.1)
-		KemSize: 16,
-		// ceil(434+7/8)
-		Bytelen:        55,
-		CiphertextSize: 16 + 330,
-	}
-}
diff --git a/src/ssl/test/runner/sike/curve.go b/src/ssl/test/runner/sike/curve.go
deleted file mode 100644
index 8172546..0000000
--- a/src/ssl/test/runner/sike/curve.go
+++ /dev/null
@@ -1,422 +0,0 @@
-// Copyright (c) 2019, Cloudflare Inc.
-//
-// Permission to use, copy, modify, and/or distribute this software for any
-// purpose with or without fee is hereby granted, provided that the above
-// copyright notice and this permission notice appear in all copies.
-//
-// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
-// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
-// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
-// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
-// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
-// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-
-package sike
-
-// Interface for working with isogenies.
-type isogeny interface {
-	// Given a torsion point on a curve computes isogenous curve.
-	// Returns curve coefficients (A:C), so that E_(A/C) = E_(A/C)/<P>,
-	// where P is a provided projective point. Sets also isogeny constants
-	// that are needed for isogeny evaluation.
-	GenerateCurve(*ProjectivePoint) CurveCoefficientsEquiv
-	// Evaluates isogeny at caller provided point. Requires isogeny curve constants
-	// to be earlier computed by GenerateCurve.
-	EvaluatePoint(*ProjectivePoint) ProjectivePoint
-}
-
-// Stores isogeny 3 curve constants
-type isogeny3 struct {
-	K1 Fp2
-	K2 Fp2
-}
-
-// Stores isogeny 4 curve constants
-type isogeny4 struct {
-	isogeny3
-	K3 Fp2
-}
-
-// Constructs isogeny3 objects
-func NewIsogeny3() isogeny {
-	return &isogeny3{}
-}
-
-// Constructs isogeny4 objects
-func NewIsogeny4() isogeny {
-	return &isogeny4{}
-}
-
-// Helper function for RightToLeftLadder(). Returns A+2C / 4.
-func calcAplus2Over4(cparams *ProjectiveCurveParameters) (ret Fp2) {
-	var tmp Fp2
-
-	// 2C
-	add(&tmp, &cparams.C, &cparams.C)
-	// A+2C
-	add(&ret, &cparams.A, &tmp)
-	// 1/4C
-	add(&tmp, &tmp, &tmp)
-	inv(&tmp, &tmp)
-	// A+2C/4C
-	mul(&ret, &ret, &tmp)
-	return
-}
-
-// Converts values in x.A and x.B to Montgomery domain
-// x.A = x.A * R mod p
-// x.B = x.B * R mod p
-// Performs v = v*R^2*R^(-1) mod p, for both x.A and x.B
-func toMontDomain(x *Fp2) {
-	var aRR FpX2
-
-	// convert to montgomery domain
-	fpMul(&aRR, &x.A, &R2) // = a*R*R
-	fpMontRdc(&x.A, &aRR)  // = a*R mod p
-	fpMul(&aRR, &x.B, &R2)
-	fpMontRdc(&x.B, &aRR)
-}
-
-// Converts values in x.A and x.B from Montgomery domain
-// a = x.A mod p
-// b = x.B mod p
-//
-// After returning from the call x is not modified.
-func fromMontDomain(x *Fp2, out *Fp2) {
-	var aR FpX2
-
-	// convert from montgomery domain
-	copy(aR[:], x.A[:])
-	fpMontRdc(&out.A, &aR) // = a mod p in [0, 2p)
-	fpRdcP(&out.A)         // = a mod p in [0, p)
-	for i := range aR {
-		aR[i] = 0
-	}
-	copy(aR[:], x.B[:])
-	fpMontRdc(&out.B, &aR)
-	fpRdcP(&out.B)
-}
-
-// Computes j-invariant for a curve y2=x3+A/Cx+x with A,C in F_(p^2). Result
-// is returned in 'j'. Implementation corresponds to Algorithm 9 from SIKE.
-func Jinvariant(cparams *ProjectiveCurveParameters, j *Fp2) {
-	var t0, t1 Fp2
-
-	sqr(j, &cparams.A)   // j  = A^2
-	sqr(&t1, &cparams.C) // t1 = C^2
-	add(&t0, &t1, &t1)   // t0 = t1 + t1
-	sub(&t0, j, &t0)     // t0 = j - t0
-	sub(&t0, &t0, &t1)   // t0 = t0 - t1
-	sub(j, &t0, &t1)     // t0 = t0 - t1
-	sqr(&t1, &t1)        // t1 = t1^2
-	mul(j, j, &t1)       // j = j * t1
-	add(&t0, &t0, &t0)   // t0 = t0 + t0
-	add(&t0, &t0, &t0)   // t0 = t0 + t0
-	sqr(&t1, &t0)        // t1 = t0^2
-	mul(&t0, &t0, &t1)   // t0 = t0 * t1
-	add(&t0, &t0, &t0)   // t0 = t0 + t0
-	add(&t0, &t0, &t0)   // t0 = t0 + t0
-	inv(j, j)            // j  = 1/j
-	mul(j, &t0, j)       // j  = t0 * j
-}
-
-// Given affine points x(P), x(Q) and x(Q-P) in a extension field F_{p^2}, function
-// recorvers projective coordinate A of a curve. This is Algorithm 10 from SIKE.
-func RecoverCoordinateA(curve *ProjectiveCurveParameters, xp, xq, xr *Fp2) {
-	var t0, t1 Fp2
-
-	add(&t1, xp, xq)                        // t1 = Xp + Xq
-	mul(&t0, xp, xq)                        // t0 = Xp * Xq
-	mul(&curve.A, xr, &t1)                  // A  = X(q-p) * t1
-	add(&curve.A, &curve.A, &t0)            // A  = A + t0
-	mul(&t0, &t0, xr)                       // t0 = t0 * X(q-p)
-	sub(&curve.A, &curve.A, &Params.OneFp2) // A  = A - 1
-	add(&t0, &t0, &t0)                      // t0 = t0 + t0
-	add(&t1, &t1, xr)                       // t1 = t1 + X(q-p)
-	add(&t0, &t0, &t0)                      // t0 = t0 + t0
-	sqr(&curve.A, &curve.A)                 // A  = A^2
-	inv(&t0, &t0)                           // t0 = 1/t0
-	mul(&curve.A, &curve.A, &t0)            // A  = A * t0
-	sub(&curve.A, &curve.A, &t1)            // A  = A - t1
-}
-
-// Computes equivalence (A:C) ~ (A+2C : A-2C)
-func CalcCurveParamsEquiv3(cparams *ProjectiveCurveParameters) CurveCoefficientsEquiv {
-	var coef CurveCoefficientsEquiv
-	var c2 Fp2
-
-	add(&c2, &cparams.C, &cparams.C)
-	// A24p = A+2*C
-	add(&coef.A, &cparams.A, &c2)
-	// A24m = A-2*C
-	sub(&coef.C, &cparams.A, &c2)
-	return coef
-}
-
-// Computes equivalence (A:C) ~ (A+2C : 4C)
-func CalcCurveParamsEquiv4(cparams *ProjectiveCurveParameters) CurveCoefficientsEquiv {
-	var coefEq CurveCoefficientsEquiv
-
-	add(&coefEq.C, &cparams.C, &cparams.C)
-	// A24p = A+2C
-	add(&coefEq.A, &cparams.A, &coefEq.C)
-	// C24 = 4*C
-	add(&coefEq.C, &coefEq.C, &coefEq.C)
-	return coefEq
-}
-
-// Recovers (A:C) curve parameters from projectively equivalent (A+2C:A-2C).
-func RecoverCurveCoefficients3(cparams *ProjectiveCurveParameters, coefEq *CurveCoefficientsEquiv) {
-	add(&cparams.A, &coefEq.A, &coefEq.C)
-	// cparams.A = 2*(A+2C+A-2C) = 4A
-	add(&cparams.A, &cparams.A, &cparams.A)
-	// cparams.C = (A+2C-A+2C) = 4C
-	sub(&cparams.C, &coefEq.A, &coefEq.C)
-	return
-}
-
-// Recovers (A:C) curve parameters from projectively equivalent (A+2C:4C).
-func RecoverCurveCoefficients4(cparams *ProjectiveCurveParameters, coefEq *CurveCoefficientsEquiv) {
-	// cparams.C = (4C)*1/2=2C
-	mul(&cparams.C, &coefEq.C, &Params.HalfFp2)
-	// cparams.A = A+2C - 2C = A
-	sub(&cparams.A, &coefEq.A, &cparams.C)
-	// cparams.C = 2C * 1/2 = C
-	mul(&cparams.C, &cparams.C, &Params.HalfFp2)
-	return
-}
-
-// Combined coordinate doubling and differential addition. Takes projective points
-// P,Q,Q-P and (A+2C)/4C curve E coefficient. Returns 2*P and P+Q calculated on E.
-// Function is used only by RightToLeftLadder. Corresponds to Algorithm 5 of SIKE
-func xDbladd(P, Q, QmP *ProjectivePoint, a24 *Fp2) (dblP, PaQ ProjectivePoint) {
-	var t0, t1, t2 Fp2
-	xQmP, zQmP := &QmP.X, &QmP.Z
-	xPaQ, zPaQ := &PaQ.X, &PaQ.Z
-	x2P, z2P := &dblP.X, &dblP.Z
-	xP, zP := &P.X, &P.Z
-	xQ, zQ := &Q.X, &Q.Z
-
-	add(&t0, xP, zP)      // t0   = Xp+Zp
-	sub(&t1, xP, zP)      // t1   = Xp-Zp
-	sqr(x2P, &t0)         // 2P.X = t0^2
-	sub(&t2, xQ, zQ)      // t2   = Xq-Zq
-	add(xPaQ, xQ, zQ)     // Xp+q = Xq+Zq
-	mul(&t0, &t0, &t2)    // t0   = t0 * t2
-	mul(z2P, &t1, &t1)    // 2P.Z = t1 * t1
-	mul(&t1, &t1, xPaQ)   // t1   = t1 * Xp+q
-	sub(&t2, x2P, z2P)    // t2   = 2P.X - 2P.Z
-	mul(x2P, x2P, z2P)    // 2P.X = 2P.X * 2P.Z
-	mul(xPaQ, a24, &t2)   // Xp+q = A24 * t2
-	sub(zPaQ, &t0, &t1)   // Zp+q = t0 - t1
-	add(z2P, xPaQ, z2P)   // 2P.Z = Xp+q + 2P.Z
-	add(xPaQ, &t0, &t1)   // Xp+q = t0 + t1
-	mul(z2P, z2P, &t2)    // 2P.Z = 2P.Z * t2
-	sqr(zPaQ, zPaQ)       // Zp+q = Zp+q ^ 2
-	sqr(xPaQ, xPaQ)       // Xp+q = Xp+q ^ 2
-	mul(zPaQ, xQmP, zPaQ) // Zp+q = Xq-p * Zp+q
-	mul(xPaQ, zQmP, xPaQ) // Xp+q = Zq-p * Xp+q
-	return
-}
-
-// Given the curve parameters, xP = x(P), computes xP = x([2^k]P)
-// Safe to overlap xP, x2P.
-func Pow2k(xP *ProjectivePoint, params *CurveCoefficientsEquiv, k uint32) {
-	var t0, t1 Fp2
-
-	x, z := &xP.X, &xP.Z
-	for i := uint32(0); i < k; i++ {
-		sub(&t0, x, z)           // t0  = Xp - Zp
-		add(&t1, x, z)           // t1  = Xp + Zp
-		sqr(&t0, &t0)            // t0  = t0 ^ 2
-		sqr(&t1, &t1)            // t1  = t1 ^ 2
-		mul(z, &params.C, &t0)   // Z2p = C24 * t0
-		mul(x, z, &t1)           // X2p = Z2p * t1
-		sub(&t1, &t1, &t0)       // t1  = t1 - t0
-		mul(&t0, &params.A, &t1) // t0  = A24+ * t1
-		add(z, z, &t0)           // Z2p = Z2p + t0
-		mul(z, z, &t1)           // Zp  = Z2p * t1
-	}
-}
-
-// Given the curve parameters, xP = x(P), and k >= 0, compute xP = x([3^k]P).
-//
-// Safe to overlap xP, xR.
-func Pow3k(xP *ProjectivePoint, params *CurveCoefficientsEquiv, k uint32) {
-	var t0, t1, t2, t3, t4, t5, t6 Fp2
-
-	x, z := &xP.X, &xP.Z
-	for i := uint32(0); i < k; i++ {
-		sub(&t0, x, z)           // t0  = Xp - Zp
-		sqr(&t2, &t0)            // t2  = t0^2
-		add(&t1, x, z)           // t1  = Xp + Zp
-		sqr(&t3, &t1)            // t3  = t1^2
-		add(&t4, &t1, &t0)       // t4  = t1 + t0
-		sub(&t0, &t1, &t0)       // t0  = t1 - t0
-		sqr(&t1, &t4)            // t1  = t4^2
-		sub(&t1, &t1, &t3)       // t1  = t1 - t3
-		sub(&t1, &t1, &t2)       // t1  = t1 - t2
-		mul(&t5, &t3, &params.A) // t5  = t3 * A24+
-		mul(&t3, &t3, &t5)       // t3  = t5 * t3
-		mul(&t6, &t2, &params.C) // t6  = t2 * A24-
-		mul(&t2, &t2, &t6)       // t2  = t2 * t6
-		sub(&t3, &t2, &t3)       // t3  = t2 - t3
-		sub(&t2, &t5, &t6)       // t2  = t5 - t6
-		mul(&t1, &t2, &t1)       // t1  = t2 * t1
-		add(&t2, &t3, &t1)       // t2  = t3 + t1
-		sqr(&t2, &t2)            // t2  = t2^2
-		mul(x, &t2, &t4)         // X3p = t2 * t4
-		sub(&t1, &t3, &t1)       // t1  = t3 - t1
-		sqr(&t1, &t1)            // t1  = t1^2
-		mul(z, &t1, &t0)         // Z3p = t1 * t0
-	}
-}
-
-// Set (y1, y2, y3)  = (1/x1, 1/x2, 1/x3).
-//
-// All xi, yi must be distinct.
-func Fp2Batch3Inv(x1, x2, x3, y1, y2, y3 *Fp2) {
-	var x1x2, t Fp2
-
-	mul(&x1x2, x1, x2) // x1*x2
-	mul(&t, &x1x2, x3) // 1/(x1*x2*x3)
-	inv(&t, &t)
-	mul(y1, &t, x2) // 1/x1
-	mul(y1, y1, x3)
-	mul(y2, &t, x1) // 1/x2
-	mul(y2, y2, x3)
-	mul(y3, &t, &x1x2) // 1/x3
-}
-
-// ScalarMul3Pt is a right-to-left point multiplication that given the
-// x-coordinate of P, Q and P-Q calculates the x-coordinate of R=Q+[scalar]P.
-// nbits must be smaller or equal to len(scalar).
-func ScalarMul3Pt(cparams *ProjectiveCurveParameters, P, Q, PmQ *ProjectivePoint, nbits uint, scalar []uint8) ProjectivePoint {
-	var R0, R2, R1 ProjectivePoint
-	aPlus2Over4 := calcAplus2Over4(cparams)
-	R1 = *P
-	R2 = *PmQ
-	R0 = *Q
-
-	// Iterate over the bits of the scalar, bottom to top
-	prevBit := uint8(0)
-	for i := uint(0); i < nbits; i++ {
-		bit := (scalar[i>>3] >> (i & 7) & 1)
-		swap := prevBit ^ bit
-		prevBit = bit
-		condSwap(&R1.X, &R1.Z, &R2.X, &R2.Z, swap)
-		R0, R2 = xDbladd(&R0, &R2, &R1, &aPlus2Over4)
-	}
-	condSwap(&R1.X, &R1.Z, &R2.X, &R2.Z, prevBit)
-	return R1
-}
-
-// Given a three-torsion point p = x(PB) on the curve E_(A:C), construct the
-// three-isogeny phi : E_(A:C) -> E_(A:C)/<P_3> = E_(A':C').
-//
-// Input: (XP_3: ZP_3), where P_3 has exact order 3 on E_A/C
-// Output: * Curve coordinates (A' + 2C', A' - 2C') corresponding to E_A'/C' = A_E/C/<P3>
-//         * isogeny phi with constants in F_p^2
-func (phi *isogeny3) GenerateCurve(p *ProjectivePoint) CurveCoefficientsEquiv {
-	var t0, t1, t2, t3, t4 Fp2
-	var coefEq CurveCoefficientsEquiv
-	var K1, K2 = &phi.K1, &phi.K2
-
-	sub(K1, &p.X, &p.Z)            // K1 = XP3 - ZP3
-	sqr(&t0, K1)                   // t0 = K1^2
-	add(K2, &p.X, &p.Z)            // K2 = XP3 + ZP3
-	sqr(&t1, K2)                   // t1 = K2^2
-	add(&t2, &t0, &t1)             // t2 = t0 + t1
-	add(&t3, K1, K2)               // t3 = K1 + K2
-	sqr(&t3, &t3)                  // t3 = t3^2
-	sub(&t3, &t3, &t2)             // t3 = t3 - t2
-	add(&t2, &t1, &t3)             // t2 = t1 + t3
-	add(&t3, &t3, &t0)             // t3 = t3 + t0
-	add(&t4, &t3, &t0)             // t4 = t3 + t0
-	add(&t4, &t4, &t4)             // t4 = t4 + t4
-	add(&t4, &t1, &t4)             // t4 = t1 + t4
-	mul(&coefEq.C, &t2, &t4)       // A24m = t2 * t4
-	add(&t4, &t1, &t2)             // t4 = t1 + t2
-	add(&t4, &t4, &t4)             // t4 = t4 + t4
-	add(&t4, &t0, &t4)             // t4 = t0 + t4
-	mul(&t4, &t3, &t4)             // t4 = t3 * t4
-	sub(&t0, &t4, &coefEq.C)       // t0 = t4 - A24m
-	add(&coefEq.A, &coefEq.C, &t0) // A24p = A24m + t0
-	return coefEq
-}
-
-// Given a 3-isogeny phi and a point pB = x(PB), compute x(QB), the x-coordinate
-// of the image QB = phi(PB) of PB under phi : E_(A:C) -> E_(A':C').
-//
-// The output xQ = x(Q) is then a point on the curve E_(A':C'); the curve
-// parameters are returned by the GenerateCurve function used to construct phi.
-func (phi *isogeny3) EvaluatePoint(p *ProjectivePoint) ProjectivePoint {
-	var t0, t1, t2 Fp2
-	var q ProjectivePoint
-	var K1, K2 = &phi.K1, &phi.K2
-	var px, pz = &p.X, &p.Z
-
-	add(&t0, px, pz)   // t0 = XQ + ZQ
-	sub(&t1, px, pz)   // t1 = XQ - ZQ
-	mul(&t0, K1, &t0)  // t2 = K1 * t0
-	mul(&t1, K2, &t1)  // t1 = K2 * t1
-	add(&t2, &t0, &t1) // t2 = t0 + t1
-	sub(&t0, &t1, &t0) // t0 = t1 - t0
-	sqr(&t2, &t2)      // t2 = t2 ^ 2
-	sqr(&t0, &t0)      // t0 = t0 ^ 2
-	mul(&q.X, px, &t2) // XQ'= XQ * t2
-	mul(&q.Z, pz, &t0) // ZQ'= ZQ * t0
-	return q
-}
-
-// Given a four-torsion point p = x(PB) on the curve E_(A:C), construct the
-// four-isogeny phi : E_(A:C) -> E_(A:C)/<P_4> = E_(A':C').
-//
-// Input: (XP_4: ZP_4), where P_4 has exact order 4 on E_A/C
-// Output: * Curve coordinates (A' + 2C', 4C') corresponding to E_A'/C' = A_E/C/<P4>
-//         * isogeny phi with constants in F_p^2
-func (phi *isogeny4) GenerateCurve(p *ProjectivePoint) CurveCoefficientsEquiv {
-	var coefEq CurveCoefficientsEquiv
-	var xp4, zp4 = &p.X, &p.Z
-	var K1, K2, K3 = &phi.K1, &phi.K2, &phi.K3
-
-	sub(K2, xp4, zp4)
-	add(K3, xp4, zp4)
-	sqr(K1, zp4)
-	add(K1, K1, K1)
-	sqr(&coefEq.C, K1)
-	add(K1, K1, K1)
-	sqr(&coefEq.A, xp4)
-	add(&coefEq.A, &coefEq.A, &coefEq.A)
-	sqr(&coefEq.A, &coefEq.A)
-	return coefEq
-}
-
-// Given a 4-isogeny phi and a point xP = x(P), compute x(Q), the x-coordinate
-// of the image Q = phi(P) of P under phi : E_(A:C) -> E_(A':C').
-//
-// Input: isogeny returned by GenerateCurve and point q=(Qx,Qz) from E0_A/C
-// Output: Corresponding point q from E1_A'/C', where E1 is 4-isogenous to E0
-func (phi *isogeny4) EvaluatePoint(p *ProjectivePoint) ProjectivePoint {
-	var t0, t1 Fp2
-	var q = *p
-	var xq, zq = &q.X, &q.Z
-	var K1, K2, K3 = &phi.K1, &phi.K2, &phi.K3
-
-	add(&t0, xq, zq)
-	sub(&t1, xq, zq)
-	mul(xq, &t0, K2)
-	mul(zq, &t1, K3)
-	mul(&t0, &t0, &t1)
-	mul(&t0, &t0, K1)
-	add(&t1, xq, zq)
-	sub(zq, xq, zq)
-	sqr(&t1, &t1)
-	sqr(zq, zq)
-	add(xq, &t0, &t1)
-	sub(&t0, zq, &t0)
-	mul(xq, xq, &t1)
-	mul(zq, zq, &t0)
-	return q
-}
diff --git a/src/ssl/test/runner/sike/sike.go b/src/ssl/test/runner/sike/sike.go
deleted file mode 100644
index dcd6cfc..0000000
--- a/src/ssl/test/runner/sike/sike.go
+++ /dev/null
@@ -1,683 +0,0 @@
-// Copyright (c) 2019, Cloudflare Inc.
-//
-// Permission to use, copy, modify, and/or distribute this software for any
-// purpose with or without fee is hereby granted, provided that the above
-// copyright notice and this permission notice appear in all copies.
-//
-// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
-// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
-// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
-// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
-// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
-// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-
-package sike
-
-import (
-	"crypto/sha256"
-	"crypto/subtle"
-	"errors"
-	"io"
-)
-
-// Zeroize Fp2
-func zeroize(fp *Fp2) {
-	// Zeroizing in 2 separated loops tells compiler to
-	// use fast runtime.memclr()
-	for i := range fp.A {
-		fp.A[i] = 0
-	}
-	for i := range fp.B {
-		fp.B[i] = 0
-	}
-}
-
-// Convert the input to wire format.
-//
-// The output byte slice must be at least 2*bytelen(p) bytes long.
-func convFp2ToBytes(output []byte, fp2 *Fp2) {
-	if len(output) < 2*Params.Bytelen {
-		panic("output byte slice too short")
-	}
-	var a Fp2
-	fromMontDomain(fp2, &a)
-
-	// convert to bytes in little endian form
-	for i := 0; i < Params.Bytelen; i++ {
-		// set i = j*8 + k
-		tmp := i / 8
-		k := uint64(i % 8)
-		output[i] = byte(a.A[tmp] >> (8 * k))
-		output[i+Params.Bytelen] = byte(a.B[tmp] >> (8 * k))
-	}
-}
-
-// Read 2*bytelen(p) bytes into the given ExtensionFieldElement.
-//
-// It is an error to call this function if the input byte slice is less than 2*bytelen(p) bytes long.
-func convBytesToFp2(fp2 *Fp2, input []byte) {
-	if len(input) < 2*Params.Bytelen {
-		panic("input byte slice too short")
-	}
-
-	for i := 0; i < Params.Bytelen; i++ {
-		j := i / 8
-		k := uint64(i % 8)
-		fp2.A[j] |= uint64(input[i]) << (8 * k)
-		fp2.B[j] |= uint64(input[i+Params.Bytelen]) << (8 * k)
-	}
-	toMontDomain(fp2)
-}
-
-// -----------------------------------------------------------------------------
-// Functions for traversing isogeny trees acoording to strategy. Key type 'A' is
-//
-
-// Traverses isogeny tree in order to compute xR, xP, xQ and xQmP needed
-// for public key generation.
-func traverseTreePublicKeyA(curve *ProjectiveCurveParameters, xR, phiP, phiQ, phiR *ProjectivePoint, pub *PublicKey) {
-	var points = make([]ProjectivePoint, 0, 8)
-	var indices = make([]int, 0, 8)
-	var i, sidx int
-
-	cparam := CalcCurveParamsEquiv4(curve)
-	phi := NewIsogeny4()
-	strat := pub.params.A.IsogenyStrategy
-	stratSz := len(strat)
-
-	for j := 1; j <= stratSz; j++ {
-		for i <= stratSz-j {
-			points = append(points, *xR)
-			indices = append(indices, i)
-
-			k := strat[sidx]
-			sidx++
-			Pow2k(xR, &cparam, 2*k)
-			i += int(k)
-		}
-
-		cparam = phi.GenerateCurve(xR)
-		for k := 0; k < len(points); k++ {
-			points[k] = phi.EvaluatePoint(&points[k])
-		}
-
-		*phiP = phi.EvaluatePoint(phiP)
-		*phiQ = phi.EvaluatePoint(phiQ)
-		*phiR = phi.EvaluatePoint(phiR)
-
-		// pop xR from points
-		*xR, points = points[len(points)-1], points[:len(points)-1]
-		i, indices = int(indices[len(indices)-1]), indices[:len(indices)-1]
-	}
-}
-
-// Traverses isogeny tree in order to compute xR needed
-// for public key generation.
-func traverseTreeSharedKeyA(curve *ProjectiveCurveParameters, xR *ProjectivePoint, pub *PublicKey) {
-	var points = make([]ProjectivePoint, 0, 8)
-	var indices = make([]int, 0, 8)
-	var i, sidx int
-
-	cparam := CalcCurveParamsEquiv4(curve)
-	phi := NewIsogeny4()
-	strat := pub.params.A.IsogenyStrategy
-	stratSz := len(strat)
-
-	for j := 1; j <= stratSz; j++ {
-		for i <= stratSz-j {
-			points = append(points, *xR)
-			indices = append(indices, i)
-
-			k := strat[sidx]
-			sidx++
-			Pow2k(xR, &cparam, 2*k)
-			i += int(k)
-		}
-
-		cparam = phi.GenerateCurve(xR)
-		for k := 0; k < len(points); k++ {
-			points[k] = phi.EvaluatePoint(&points[k])
-		}
-
-		// pop xR from points
-		*xR, points = points[len(points)-1], points[:len(points)-1]
-		i, indices = int(indices[len(indices)-1]), indices[:len(indices)-1]
-	}
-}
-
-// Traverses isogeny tree in order to compute xR, xP, xQ and xQmP needed
-// for public key generation.
-func traverseTreePublicKeyB(curve *ProjectiveCurveParameters, xR, phiP, phiQ, phiR *ProjectivePoint, pub *PublicKey) {
-	var points = make([]ProjectivePoint, 0, 8)
-	var indices = make([]int, 0, 8)
-	var i, sidx int
-
-	cparam := CalcCurveParamsEquiv3(curve)
-	phi := NewIsogeny3()
-	strat := pub.params.B.IsogenyStrategy
-	stratSz := len(strat)
-
-	for j := 1; j <= stratSz; j++ {
-		for i <= stratSz-j {
-			points = append(points, *xR)
-			indices = append(indices, i)
-
-			k := strat[sidx]
-			sidx++
-			Pow3k(xR, &cparam, k)
-			i += int(k)
-		}
-
-		cparam = phi.GenerateCurve(xR)
-		for k := 0; k < len(points); k++ {
-			points[k] = phi.EvaluatePoint(&points[k])
-		}
-
-		*phiP = phi.EvaluatePoint(phiP)
-		*phiQ = phi.EvaluatePoint(phiQ)
-		*phiR = phi.EvaluatePoint(phiR)
-
-		// pop xR from points
-		*xR, points = points[len(points)-1], points[:len(points)-1]
-		i, indices = int(indices[len(indices)-1]), indices[:len(indices)-1]
-	}
-}
-
-// Traverses isogeny tree in order to compute xR, xP, xQ and xQmP needed
-// for public key generation.
-func traverseTreeSharedKeyB(curve *ProjectiveCurveParameters, xR *ProjectivePoint, pub *PublicKey) {
-	var points = make([]ProjectivePoint, 0, 8)
-	var indices = make([]int, 0, 8)
-	var i, sidx int
-
-	cparam := CalcCurveParamsEquiv3(curve)
-	phi := NewIsogeny3()
-	strat := pub.params.B.IsogenyStrategy
-	stratSz := len(strat)
-
-	for j := 1; j <= stratSz; j++ {
-		for i <= stratSz-j {
-			points = append(points, *xR)
-			indices = append(indices, i)
-
-			k := strat[sidx]
-			sidx++
-			Pow3k(xR, &cparam, k)
-			i += int(k)
-		}
-
-		cparam = phi.GenerateCurve(xR)
-		for k := 0; k < len(points); k++ {
-			points[k] = phi.EvaluatePoint(&points[k])
-		}
-
-		// pop xR from points
-		*xR, points = points[len(points)-1], points[:len(points)-1]
-		i, indices = int(indices[len(indices)-1]), indices[:len(indices)-1]
-	}
-}
-
-// Generate a public key in the 2-torsion group
-func publicKeyGenA(prv *PrivateKey) (pub *PublicKey) {
-	var xPA, xQA, xRA ProjectivePoint
-	var xPB, xQB, xRB, xK ProjectivePoint
-	var invZP, invZQ, invZR Fp2
-
-	pub = NewPublicKey(KeyVariant_SIDH_A)
-	var phi = NewIsogeny4()
-
-	// Load points for A
-	xPA = ProjectivePoint{X: prv.params.A.Affine_P, Z: prv.params.OneFp2}
-	xQA = ProjectivePoint{X: prv.params.A.Affine_Q, Z: prv.params.OneFp2}
-	xRA = ProjectivePoint{X: prv.params.A.Affine_R, Z: prv.params.OneFp2}
-
-	// Load points for B
-	xRB = ProjectivePoint{X: prv.params.B.Affine_R, Z: prv.params.OneFp2}
-	xQB = ProjectivePoint{X: prv.params.B.Affine_Q, Z: prv.params.OneFp2}
-	xPB = ProjectivePoint{X: prv.params.B.Affine_P, Z: prv.params.OneFp2}
-
-	// Find isogeny kernel
-	xK = ScalarMul3Pt(&pub.params.InitCurve, &xPA, &xQA, &xRA, prv.params.A.SecretBitLen, prv.Scalar)
-	traverseTreePublicKeyA(&pub.params.InitCurve, &xK, &xPB, &xQB, &xRB, pub)
-
-	// Secret isogeny
-	phi.GenerateCurve(&xK)
-	xPA = phi.EvaluatePoint(&xPB)
-	xQA = phi.EvaluatePoint(&xQB)
-	xRA = phi.EvaluatePoint(&xRB)
-	Fp2Batch3Inv(&xPA.Z, &xQA.Z, &xRA.Z, &invZP, &invZQ, &invZR)
-
-	mul(&pub.affine_xP, &xPA.X, &invZP)
-	mul(&pub.affine_xQ, &xQA.X, &invZQ)
-	mul(&pub.affine_xQmP, &xRA.X, &invZR)
-	return
-}
-
-// Generate a public key in the 3-torsion group
-func publicKeyGenB(prv *PrivateKey) (pub *PublicKey) {
-	var xPB, xQB, xRB, xK ProjectivePoint
-	var xPA, xQA, xRA ProjectivePoint
-	var invZP, invZQ, invZR Fp2
-
-	pub = NewPublicKey(prv.keyVariant)
-	var phi = NewIsogeny3()
-
-	// Load points for B
-	xRB = ProjectivePoint{X: prv.params.B.Affine_R, Z: prv.params.OneFp2}
-	xQB = ProjectivePoint{X: prv.params.B.Affine_Q, Z: prv.params.OneFp2}
-	xPB = ProjectivePoint{X: prv.params.B.Affine_P, Z: prv.params.OneFp2}
-
-	// Load points for A
-	xPA = ProjectivePoint{X: prv.params.A.Affine_P, Z: prv.params.OneFp2}
-	xQA = ProjectivePoint{X: prv.params.A.Affine_Q, Z: prv.params.OneFp2}
-	xRA = ProjectivePoint{X: prv.params.A.Affine_R, Z: prv.params.OneFp2}
-
-	xK = ScalarMul3Pt(&pub.params.InitCurve, &xPB, &xQB, &xRB, prv.params.B.SecretBitLen, prv.Scalar)
-	traverseTreePublicKeyB(&pub.params.InitCurve, &xK, &xPA, &xQA, &xRA, pub)
-
-	phi.GenerateCurve(&xK)
-	xPB = phi.EvaluatePoint(&xPA)
-	xQB = phi.EvaluatePoint(&xQA)
-	xRB = phi.EvaluatePoint(&xRA)
-	Fp2Batch3Inv(&xPB.Z, &xQB.Z, &xRB.Z, &invZP, &invZQ, &invZR)
-
-	mul(&pub.affine_xP, &xPB.X, &invZP)
-	mul(&pub.affine_xQ, &xQB.X, &invZQ)
-	mul(&pub.affine_xQmP, &xRB.X, &invZR)
-	return
-}
-
-// -----------------------------------------------------------------------------
-// Key agreement functions
-//
-
-// Establishing shared keys in in 2-torsion group
-func deriveSecretA(prv *PrivateKey, pub *PublicKey) []byte {
-	var sharedSecret = make([]byte, pub.params.SharedSecretSize)
-	var xP, xQ, xQmP ProjectivePoint
-	var xK ProjectivePoint
-	var cparam ProjectiveCurveParameters
-	var phi = NewIsogeny4()
-	var jInv Fp2
-
-	// Recover curve coefficients
-	RecoverCoordinateA(&cparam, &pub.affine_xP, &pub.affine_xQ, &pub.affine_xQmP)
-	// C=1
-	cparam.C = Params.OneFp2
-
-	// Find kernel of the morphism
-	xP = ProjectivePoint{X: pub.affine_xP, Z: pub.params.OneFp2}
-	xQ = ProjectivePoint{X: pub.affine_xQ, Z: pub.params.OneFp2}
-	xQmP = ProjectivePoint{X: pub.affine_xQmP, Z: pub.params.OneFp2}
-	xK = ScalarMul3Pt(&cparam, &xP, &xQ, &xQmP, pub.params.A.SecretBitLen, prv.Scalar)
-
-	// Traverse isogeny tree
-	traverseTreeSharedKeyA(&cparam, &xK, pub)
-
-	// Calculate j-invariant on isogeneus curve
-	c := phi.GenerateCurve(&xK)
-	RecoverCurveCoefficients4(&cparam, &c)
-	Jinvariant(&cparam, &jInv)
-	convFp2ToBytes(sharedSecret, &jInv)
-	return sharedSecret
-}
-
-// Establishing shared keys in in 3-torsion group
-func deriveSecretB(prv *PrivateKey, pub *PublicKey) []byte {
-	var sharedSecret = make([]byte, pub.params.SharedSecretSize)
-	var xP, xQ, xQmP ProjectivePoint
-	var xK ProjectivePoint
-	var cparam ProjectiveCurveParameters
-	var phi = NewIsogeny3()
-	var jInv Fp2
-
-	// Recover curve A coefficient
-	RecoverCoordinateA(&cparam, &pub.affine_xP, &pub.affine_xQ, &pub.affine_xQmP)
-	// C=1
-	cparam.C = Params.OneFp2
-
-	// Find kernel of the morphism
-	xP = ProjectivePoint{X: pub.affine_xP, Z: pub.params.OneFp2}
-	xQ = ProjectivePoint{X: pub.affine_xQ, Z: pub.params.OneFp2}
-	xQmP = ProjectivePoint{X: pub.affine_xQmP, Z: pub.params.OneFp2}
-	xK = ScalarMul3Pt(&cparam, &xP, &xQ, &xQmP, pub.params.B.SecretBitLen, prv.Scalar)
-
-	// Traverse isogeny tree
-	traverseTreeSharedKeyB(&cparam, &xK, pub)
-
-	// Calculate j-invariant on isogeneus curve
-	c := phi.GenerateCurve(&xK)
-	RecoverCurveCoefficients3(&cparam, &c)
-	Jinvariant(&cparam, &jInv)
-	convFp2ToBytes(sharedSecret, &jInv)
-	return sharedSecret
-}
-
-func encrypt(skA *PrivateKey, pkA, pkB *PublicKey, ptext []byte) ([]byte, error) {
-	if pkB.keyVariant != KeyVariant_SIKE {
-		return nil, errors.New("wrong key type")
-	}
-
-	j, err := DeriveSecret(skA, pkB)
-	if err != nil {
-		return nil, err
-	}
-
-	if len(ptext) != pkA.params.KemSize {
-		panic("Implementation error")
-	}
-
-	digest := sha256.Sum256(j)
-	// Uses truncated digest (first 16-bytes)
-	for i, _ := range ptext {
-		digest[i] ^= ptext[i]
-	}
-
-	ret := make([]byte, pkA.Size()+len(ptext))
-	copy(ret, pkA.Export())
-	copy(ret[pkA.Size():], digest[:pkA.params.KemSize])
-	return ret, nil
-}
-
-// NewPrivateKey initializes private key.
-// Usage of this function guarantees that the object is correctly initialized.
-func NewPrivateKey(v KeyVariant) *PrivateKey {
-	prv := &PrivateKey{key: key{params: &Params, keyVariant: v}}
-	if (v & KeyVariant_SIDH_A) == KeyVariant_SIDH_A {
-		prv.Scalar = make([]byte, prv.params.A.SecretByteLen)
-	} else {
-		prv.Scalar = make([]byte, prv.params.B.SecretByteLen)
-	}
-	if v == KeyVariant_SIKE {
-		prv.S = make([]byte, prv.params.MsgLen)
-	}
-	return prv
-}
-
-// NewPublicKey initializes public key.
-// Usage of this function guarantees that the object is correctly initialized.
-func NewPublicKey(v KeyVariant) *PublicKey {
-	return &PublicKey{key: key{params: &Params, keyVariant: v}}
-}
-
-// Import clears content of the public key currently stored in the structure
-// and imports key stored in the byte string. Returns error in case byte string
-// size is wrong. Doesn't perform any validation.
-func (pub *PublicKey) Import(input []byte) error {
-	if len(input) != pub.Size() {
-		return errors.New("sidh: input to short")
-	}
-	ssSz := pub.params.SharedSecretSize
-	convBytesToFp2(&pub.affine_xP, input[0:ssSz])
-	convBytesToFp2(&pub.affine_xQ, input[ssSz:2*ssSz])
-	convBytesToFp2(&pub.affine_xQmP, input[2*ssSz:3*ssSz])
-	return nil
-}
-
-// Exports currently stored key. In case structure hasn't been filled with key data
-// returned byte string is filled with zeros.
-func (pub *PublicKey) Export() []byte {
-	output := make([]byte, pub.params.PublicKeySize)
-	ssSz := pub.params.SharedSecretSize
-	convFp2ToBytes(output[0:ssSz], &pub.affine_xP)
-	convFp2ToBytes(output[ssSz:2*ssSz], &pub.affine_xQ)
-	convFp2ToBytes(output[2*ssSz:3*ssSz], &pub.affine_xQmP)
-	return output
-}
-
-// Size returns size of the public key in bytes
-func (pub *PublicKey) Size() int {
-	return pub.params.PublicKeySize
-}
-
-// Exports currently stored key. In case structure hasn't been filled with key data
-// returned byte string is filled with zeros.
-func (prv *PrivateKey) Export() []byte {
-	ret := make([]byte, len(prv.Scalar)+len(prv.S))
-	copy(ret, prv.S)
-	copy(ret[len(prv.S):], prv.Scalar)
-	return ret
-}
-
-// Size returns size of the private key in bytes
-func (prv *PrivateKey) Size() int {
-	tmp := len(prv.Scalar)
-	if prv.keyVariant == KeyVariant_SIKE {
-		tmp += int(prv.params.MsgLen)
-	}
-	return tmp
-}
-
-// Import clears content of the private key currently stored in the structure
-// and imports key from octet string. In case of SIKE, the random value 'S'
-// must be prepended to the value of actual private key (see SIKE spec for details).
-// Function doesn't import public key value to PrivateKey object.
-func (prv *PrivateKey) Import(input []byte) error {
-	if len(input) != prv.Size() {
-		return errors.New("sidh: input to short")
-	}
-	copy(prv.S, input[:len(prv.S)])
-	copy(prv.Scalar, input[len(prv.S):])
-	return nil
-}
-
-// Generates random private key for SIDH or SIKE. Generated value is
-// formed as little-endian integer from key-space <2^(e2-1)..2^e2 - 1>
-// for KeyVariant_A or <2^(s-1)..2^s - 1>, where s = floor(log_2(3^e3)),
-// for KeyVariant_B.
-//
-// Returns error in case user provided RNG fails.
-func (prv *PrivateKey) Generate(rand io.Reader) error {
-	var err error
-	var dp *DomainParams
-
-	if (prv.keyVariant & KeyVariant_SIDH_A) == KeyVariant_SIDH_A {
-		dp = &prv.params.A
-	} else {
-		dp = &prv.params.B
-	}
-
-	if prv.keyVariant == KeyVariant_SIKE {
-		_, err = io.ReadFull(rand, prv.S)
-	}
-
-	// Private key generation takes advantage of the fact that keyspace for secret
-	// key is (0, 2^x - 1), for some possitivite value of 'x' (see SIKE, 1.3.8).
-	// It means that all bytes in the secret key, but the last one, can take any
-	// value between <0x00,0xFF>. Similarily for the last byte, but generation
-	// needs to chop off some bits, to make sure generated value is an element of
-	// a key-space.
-	_, err = io.ReadFull(rand, prv.Scalar)
-	if err != nil {
-		return err
-	}
-	prv.Scalar[len(prv.Scalar)-1] &= (1 << (dp.SecretBitLen % 8)) - 1
-	// Make sure scalar is SecretBitLen long. SIKE spec says that key
-	// space starts from 0, but I'm not confortable with having low
-	// value scalars used for private keys. It is still secrure as per
-	// table 5.1 in [SIKE].
-	prv.Scalar[len(prv.Scalar)-1] |= 1 << ((dp.SecretBitLen % 8) - 1)
-	return err
-}
-
-// Generates public key.
-//
-// Constant time.
-func (prv *PrivateKey) GeneratePublicKey() *PublicKey {
-	if (prv.keyVariant & KeyVariant_SIDH_A) == KeyVariant_SIDH_A {
-		return publicKeyGenA(prv)
-	}
-	return publicKeyGenB(prv)
-}
-
-// Computes a shared secret which is a j-invariant. Function requires that pub has
-// different KeyVariant than prv. Length of returned output is 2*ceil(log_2 P)/8),
-// where P is a prime defining finite field.
-//
-// It's important to notice that each keypair must not be used more than once
-// to calculate shared secret.
-//
-// Function may return error. This happens only in case provided input is invalid.
-// Constant time for properly initialized private and public key.
-func DeriveSecret(prv *PrivateKey, pub *PublicKey) ([]byte, error) {
-
-	if (pub == nil) || (prv == nil) {
-		return nil, errors.New("sidh: invalid arguments")
-	}
-
-	if (pub.keyVariant == prv.keyVariant) || (pub.params.Id != prv.params.Id) {
-		return nil, errors.New("sidh: public and private are incompatbile")
-	}
-
-	if (prv.keyVariant & KeyVariant_SIDH_A) == KeyVariant_SIDH_A {
-		return deriveSecretA(prv, pub), nil
-	} else {
-		return deriveSecretB(prv, pub), nil
-	}
-}
-
-// Uses SIKE public key to encrypt plaintext. Requires cryptographically secure PRNG
-// Returns ciphertext in case encryption succeeds. Returns error in case PRNG fails
-// or wrongly formatted input was provided.
-func Encrypt(rng io.Reader, pub *PublicKey, ptext []byte) ([]byte, error) {
-	var ptextLen = len(ptext)
-	// c1 must be security level + 64 bits (see [SIKE] 1.4 and 4.3.3)
-	if ptextLen != pub.params.KemSize {
-		return nil, errors.New("Unsupported message length")
-	}
-
-	skA := NewPrivateKey(KeyVariant_SIDH_A)
-	err := skA.Generate(rng)
-	if err != nil {
-		return nil, err
-	}
-
-	pkA := skA.GeneratePublicKey()
-	return encrypt(skA, pkA, pub, ptext)
-}
-
-// Uses SIKE private key to decrypt ciphertext. Returns plaintext in case
-// decryption succeeds or error in case unexptected input was provided.
-// Constant time
-func Decrypt(prv *PrivateKey, ctext []byte) ([]byte, error) {
-	var c1_len int
-	n := make([]byte, prv.params.KemSize)
-	pk_len := prv.params.PublicKeySize
-
-	if prv.keyVariant != KeyVariant_SIKE {
-		return nil, errors.New("wrong key type")
-	}
-
-	// ctext is a concatenation of (pubkey_A || c1=ciphertext)
-	// it must be security level + 64 bits (see [SIKE] 1.4 and 4.3.3)
-	c1_len = len(ctext) - pk_len
-	if c1_len != int(prv.params.KemSize) {
-		return nil, errors.New("wrong size of cipher text")
-	}
-
-	c0 := NewPublicKey(KeyVariant_SIDH_A)
-	err := c0.Import(ctext[:pk_len])
-	if err != nil {
-		return nil, err
-	}
-	j, err := DeriveSecret(prv, c0)
-	if err != nil {
-		return nil, err
-	}
-
-	digest := sha256.Sum256(j)
-	copy(n, digest[:])
-
-	for i, _ := range n {
-		n[i] ^= ctext[pk_len+i]
-	}
-	return n[:c1_len], nil
-}
-
-// Encapsulation receives the public key and generates SIKE ciphertext and shared secret.
-// The generated ciphertext is used for authentication.
-// The rng must be cryptographically secure PRNG.
-// Error is returned in case PRNG fails or wrongly formatted input was provided.
-func Encapsulate(rng io.Reader, pub *PublicKey) (ctext []byte, secret []byte, err error) {
-	// Buffer for random, secret message
-	ptext := make([]byte, pub.params.MsgLen)
-	// SHA256 hash context object
-	d := sha256.New()
-
-	// Generate ephemeral value
-	_, err = io.ReadFull(rng, ptext)
-	if err != nil {
-		return nil, nil, err
-	}
-
-	// Implementation uses first 28-bytes of secret
-	d.Write(ptext)
-	d.Write(pub.Export())
-	digest := d.Sum(nil)
-	// r = G(ptext||pub)
-	r := digest[:pub.params.A.SecretByteLen]
-
-	// (c0 || c1) = Enc(pkA, ptext; r)
-	skA := NewPrivateKey(KeyVariant_SIDH_A)
-	err = skA.Import(r)
-	if err != nil {
-		return nil, nil, err
-	}
-
-	pkA := skA.GeneratePublicKey()
-	ctext, err = encrypt(skA, pkA, pub, ptext)
-	if err != nil {
-		return nil, nil, err
-	}
-
-	// K = H(ptext||(c0||c1))
-	d.Reset()
-	d.Write(ptext)
-	d.Write(ctext)
-	digest = d.Sum(digest[:0])
-	return ctext, digest[:pub.params.KemSize], nil
-}
-
-// Decapsulate given the keypair and ciphertext as inputs, Decapsulate outputs a shared
-// secret if plaintext verifies correctly, otherwise function outputs random value.
-// Decapsulation may fail in case input is wrongly formatted.
-// Constant time for properly initialized input.
-func Decapsulate(prv *PrivateKey, pub *PublicKey, ctext []byte) ([]byte, error) {
-	var skA = NewPrivateKey(KeyVariant_SIDH_A)
-	// SHA256 hash context object
-	d := sha256.New()
-
-	m, err := Decrypt(prv, ctext)
-	if err != nil {
-		return nil, err
-	}
-
-	// r' = G(m'||pub)
-	d.Write(m)
-	d.Write(pub.Export())
-	digest := d.Sum(nil)
-	// Never fails
-	skA.Import(digest[:pub.params.A.SecretByteLen])
-
-	// Never fails
-	pkA := skA.GeneratePublicKey()
-	c0 := pkA.Export()
-
-	d.Reset()
-	if subtle.ConstantTimeCompare(c0, ctext[:len(c0)]) == 1 {
-		d.Write(m)
-	} else {
-		// S is chosen at random when generating a key and is unknown to the other party. It
-		// may seem weird, but it's correct. It is important that S is unpredictable
-		// to other party. Without this check, it is possible to recover a secret, by
-		// providing series of invalid ciphertexts. It is also important that in case
-		//
-		// See more details in "On the security of supersingular isogeny cryptosystems"
-		// (S. Galbraith, et al., 2016, ePrint #859).
-		d.Write(prv.S)
-	}
-	d.Write(ctext)
-	digest = d.Sum(digest[:0])
-	return digest[:pub.params.KemSize], nil
-}
diff --git a/src/ssl/test/runner/sike/sike_test.go b/src/ssl/test/runner/sike/sike_test.go
deleted file mode 100644
index 2e146bc..0000000
--- a/src/ssl/test/runner/sike/sike_test.go
+++ /dev/null
@@ -1,698 +0,0 @@
-// Copyright (c) 2019, Cloudflare Inc.
-//
-// Permission to use, copy, modify, and/or distribute this software for any
-// purpose with or without fee is hereby granted, provided that the above
-// copyright notice and this permission notice appear in all copies.
-//
-// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
-// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
-// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
-// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
-// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
-// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-
-package sike
-
-import (
-	"bufio"
-	"bytes"
-	"crypto/rand"
-	"encoding/hex"
-	"math/big"
-	"strings"
-	"testing"
-)
-
-var tdata = struct {
-	name     string
-	PrB_sidh string
-	PkB_sidh string
-	PrA_sidh string
-	PkA_sidh string
-	PkB_sike string
-	PrB_sike string
-}{
-	name:     "P-434",
-	PrA_sidh: "3A727E04EA9B7E2A766A6F846489E7E7B915263BCEED308BB10FC9",
-	PkA_sidh: "9E668D1E6750ED4B91EE052C32839CA9DD2E56D52BC24DECC950AA" +
-		"AD24CEED3F9049C77FE80F0B9B01E7F8DAD7833EEC2286544D6380" +
-		"009C379CDD3E7517CEF5E20EB01F8231D52FC30DC61D2F63FB357F" +
-		"85DC6396E8A95DB9740BD3A972C8DB7901B31F074CD3E45345CA78" +
-		"F900817130E688A29A7CF0073B5C00FF2C65FBE776918EF9BD8E75" +
-		"B29EF7FAB791969B60B0C5B37A8992EDEF95FA7BAC40A95DAFE02E" +
-		"237301FEE9A7A43FD0B73477E8035DD12B73FAFEF18D39904DDE36" +
-		"53A754F36BE1888F6607C6A7951349A414352CF31A29F2C40302DB" +
-		"406C48018C905EB9DC46AFBF42A9187A9BB9E51B587622A2862DC7" +
-		"D5CC598BF38ED6320FB51D8697AD3D7A72ABCC32A393F0133DA8DF" +
-		"5E253D9E00B760B2DF342FCE974DCFE946CFE4727783531882800F" +
-		"9E5DD594D6D5A6275EEFEF9713ED838F4A06BB34D7B8D46E0B385A" +
-		"AEA1C7963601",
-	PrB_sidh: "E37BFE55B43B32448F375903D8D226EC94ADBFEA1D2B3536EB987001",
-	PkB_sidh: "C9F73E4497AAA3FDF9EB688135866A8A83934BA10E273B8CC3808C" +
-		"F0C1F5FAB3E9BB295885881B73DEBC875670C0F51C4BB40DF5FEDE" +
-		"01B8AF32D1BF10508B8C17B2734EB93B2B7F5D84A4A0F2F816E9E2" +
-		"C32AC253C0B6025B124D05A87A9E2A8567930F44BAA14219B941B6" +
-		"B400B4AED1D796DA12A5A9F0B8F3F5EE9DD43F64CB24A3B1719DF2" +
-		"78ADF56B5F3395187829DA2319DEABF6BBD6EDA244DE2B62CC5AC2" +
-		"50C1009DD1CD4712B0B37406612AD002B5E51A62B51AC9C0374D14" +
-		"3ABBBD58275FAFC4A5E959C54838C2D6D9FB43B7B2609061267B6A" +
-		"2E6C6D01D295C4223E0D3D7A4CDCFB28A7818A737935279751A6DD" +
-		"8290FD498D1F6AD5F4FFF6BDFA536713F509DCE8047252F1E7D0DD" +
-		"9FCC414C0070B5DCCE3665A21A032D7FBE749181032183AFAD240B" +
-		"7E671E87FBBEC3A8CA4C11AA7A9A23AC69AE2ACF54B664DECD2775" +
-		"3D63508F1B02",
-	PrB_sike: "4B622DE1350119C45A9F2E2EF3DC5DF56A27FCDFCDDAF58CD69B90" +
-		"3752D68C200934E160B234E49EDE247601",
-	PkB_sike: "1BD0A2E81307B6F96461317DDF535ACC0E59C742627BAE60D27605" +
-		"E10FAF722D22A73E184CB572A12E79DCD58C6B54FB01442114CBE9" +
-		"010B6CAEC25D04C16C5E42540C1524C545B8C67614ED4183C9FA5B" +
-		"D0BE45A7F89FBC770EE8E7E5E391C7EE6F35F74C29E6D9E35B1663" +
-		"DA01E48E9DEB2347512D366FDE505161677055E3EF23054D276E81" +
-		"7E2C57025DA1C10D2461F68617F2D11256EEE4E2D7DBDF6C8E34F3" +
-		"A0FD00C625428CB41857002159DAB94267ABE42D630C6AAA91AF83" +
-		"7C7A6740754EA6634C45454C51B0BB4D44C3CCCCE4B32C00901CF6" +
-		"9C008D013348379B2F9837F428A01B6173584691F2A6F3A3C4CF48" +
-		"7D20D261B36C8CDB1BC158E2A5162A9DA4F7A97AA0879B9897E2B6" +
-		"891B672201F9AEFBF799C27B2587120AC586A511360926FB7DA8EB" +
-		"F5CB5272F396AE06608422BE9792E2CE9BEF21BF55B7EFF8DC7EC8" +
-		"C99910D3F800",
-}
-
-/* -------------------------------------------------------------------------
-   Helpers
-   -------------------------------------------------------------------------*/
-// Fail if err !=nil. Display msg as an error message
-func checkErr(t testing.TB, err error, msg string) {
-	t.Helper()
-	if err != nil {
-		t.Error(msg)
-	}
-}
-
-// Utility used for running same test with all registered prime fields
-type MultiIdTestingFunc func(testing.TB)
-
-// Converts string to private key
-func convToPrv(s string, v KeyVariant) *PrivateKey {
-	key := NewPrivateKey(v)
-	hex, e := hex.DecodeString(s)
-	if e != nil {
-		panic("non-hex number provided")
-	}
-	e = key.Import(hex)
-	if e != nil {
-		panic("Can't import private key")
-	}
-	return key
-}
-
-// Converts string to public key
-func convToPub(s string, v KeyVariant) *PublicKey {
-	key := NewPublicKey(v)
-	hex, e := hex.DecodeString(s)
-	if e != nil {
-		panic("non-hex number provided")
-	}
-	e = key.Import(hex)
-	if e != nil {
-		panic("Can't import public key")
-	}
-	return key
-}
-
-/* -------------------------------------------------------------------------
-   Unit tests
-   -------------------------------------------------------------------------*/
-func TestKeygen(t *testing.T) {
-	alicePrivate := convToPrv(tdata.PrA_sidh, KeyVariant_SIDH_A)
-	bobPrivate := convToPrv(tdata.PrB_sidh, KeyVariant_SIDH_B)
-	expPubA := convToPub(tdata.PkA_sidh, KeyVariant_SIDH_A)
-	expPubB := convToPub(tdata.PkB_sidh, KeyVariant_SIDH_B)
-
-	pubA := alicePrivate.GeneratePublicKey()
-	pubB := bobPrivate.GeneratePublicKey()
-
-	if !bytes.Equal(pubA.Export(), expPubA.Export()) {
-		t.Fatalf("unexpected value of public key A")
-	}
-	if !bytes.Equal(pubB.Export(), expPubB.Export()) {
-		t.Fatalf("unexpected value of public key B")
-	}
-}
-
-func TestImportExport(t *testing.T) {
-	var err error
-	a := NewPublicKey(KeyVariant_SIDH_A)
-	b := NewPublicKey(KeyVariant_SIDH_B)
-
-	// Import keys
-	a_hex, err := hex.DecodeString(tdata.PkA_sidh)
-	checkErr(t, err, "invalid hex-number provided")
-
-	err = a.Import(a_hex)
-	checkErr(t, err, "import failed")
-
-	b_hex, err := hex.DecodeString(tdata.PkB_sike)
-	checkErr(t, err, "invalid hex-number provided")
-
-	err = b.Import(b_hex)
-	checkErr(t, err, "import failed")
-
-	// Export and check if same
-	if !bytes.Equal(b.Export(), b_hex) || !bytes.Equal(a.Export(), a_hex) {
-		t.Fatalf("export/import failed")
-	}
-
-	if (len(b.Export()) != b.Size()) || (len(a.Export()) != a.Size()) {
-		t.Fatalf("wrong size of exported keys")
-	}
-}
-
-func testPrivateKeyBelowMax(t testing.TB) {
-	for variant, keySz := range map[KeyVariant]*DomainParams{
-		KeyVariant_SIDH_A: &Params.A,
-		KeyVariant_SIDH_B: &Params.B} {
-
-		func(v KeyVariant, dp *DomainParams) {
-			var blen = int(dp.SecretByteLen)
-			var prv = NewPrivateKey(v)
-
-			// Calculate either (2^e2 - 1) or (2^s - 1); where s=ceil(log_2(3^e3)))
-			maxSecertVal := big.NewInt(int64(dp.SecretBitLen))
-			maxSecertVal.Exp(big.NewInt(int64(2)), maxSecertVal, nil)
-			maxSecertVal.Sub(maxSecertVal, big.NewInt(1))
-
-			// Do same test 1000 times
-			for i := 0; i < 1000; i++ {
-				err := prv.Generate(rand.Reader)
-				checkErr(t, err, "Private key generation")
-
-				// Convert to big-endian, as that's what expected by (*Int)SetBytes()
-				secretBytes := prv.Export()
-				for i := 0; i < int(blen/2); i++ {
-					tmp := secretBytes[i] ^ secretBytes[blen-i-1]
-					secretBytes[i] = tmp ^ secretBytes[i]
-					secretBytes[blen-i-1] = tmp ^ secretBytes[blen-i-1]
-				}
-				prvBig := new(big.Int).SetBytes(secretBytes)
-				// Check if generated key is bigger than acceptable
-				if prvBig.Cmp(maxSecertVal) == 1 {
-					t.Error("Generated private key is wrong")
-				}
-			}
-		}(variant, keySz)
-	}
-}
-
-func testKeyAgreement(t *testing.T, pkA, prA, pkB, prB string) {
-	var e error
-
-	// KeyPairs
-	alicePublic := convToPub(pkA, KeyVariant_SIDH_A)
-	bobPublic := convToPub(pkB, KeyVariant_SIDH_B)
-	alicePrivate := convToPrv(prA, KeyVariant_SIDH_A)
-	bobPrivate := convToPrv(prB, KeyVariant_SIDH_B)
-
-	// Do actual test
-	s1, e := DeriveSecret(bobPrivate, alicePublic)
-	checkErr(t, e, "derivation s1")
-	s2, e := DeriveSecret(alicePrivate, bobPublic)
-	checkErr(t, e, "derivation s1")
-
-	if !bytes.Equal(s1[:], s2[:]) {
-		t.Fatalf("two shared keys: %d, %d do not match", s1, s2)
-	}
-
-	// Negative case
-	dec, e := hex.DecodeString(tdata.PkA_sidh)
-	if e != nil {
-		t.FailNow()
-	}
-	dec[0] = ^dec[0]
-	e = alicePublic.Import(dec)
-	if e != nil {
-		t.FailNow()
-	}
-
-	s1, e = DeriveSecret(bobPrivate, alicePublic)
-	checkErr(t, e, "derivation of s1 failed")
-	s2, e = DeriveSecret(alicePrivate, bobPublic)
-	checkErr(t, e, "derivation of s2 failed")
-
-	if bytes.Equal(s1[:], s2[:]) {
-		t.Fatalf("The two shared keys: %d, %d match", s1, s2)
-	}
-}
-
-func TestDerivationRoundTrip(t *testing.T) {
-	var err error
-
-	prvA := NewPrivateKey(KeyVariant_SIDH_A)
-	prvB := NewPrivateKey(KeyVariant_SIDH_B)
-
-	// Generate private keys
-	err = prvA.Generate(rand.Reader)
-	checkErr(t, err, "key generation failed")
-	err = prvB.Generate(rand.Reader)
-	checkErr(t, err, "key generation failed")
-
-	// Generate public keys
-	pubA := prvA.GeneratePublicKey()
-	pubB := prvB.GeneratePublicKey()
-
-	// Derive shared secret
-	s1, err := DeriveSecret(prvB, pubA)
-	checkErr(t, err, "")
-
-	s2, err := DeriveSecret(prvA, pubB)
-	checkErr(t, err, "")
-
-	if !bytes.Equal(s1[:], s2[:]) {
-		t.Fatalf("Two shared keys: \n%X, \n%X do not match", s1, s2)
-	}
-}
-
-// Encrypt, Decrypt, check if input/output plaintext is the same
-func testPKERoundTrip(t testing.TB, id uint8) {
-	// Message to be encrypted
-	var msg = make([]byte, Params.MsgLen)
-	for i, _ := range msg {
-		msg[i] = byte(i)
-	}
-
-	// Import keys
-	pkB := NewPublicKey(KeyVariant_SIKE)
-	skB := NewPrivateKey(KeyVariant_SIKE)
-	pk_hex, err := hex.DecodeString(tdata.PkB_sike)
-	if err != nil {
-		t.Fatal(err)
-	}
-	sk_hex, err := hex.DecodeString(tdata.PrB_sike)
-	if err != nil {
-		t.Fatal(err)
-	}
-	if pkB.Import(pk_hex) != nil || skB.Import(sk_hex) != nil {
-		t.Error("Import")
-	}
-
-	ct, err := Encrypt(rand.Reader, pkB, msg[:])
-	if err != nil {
-		t.Fatal(err)
-	}
-	pt, err := Decrypt(skB, ct)
-	if err != nil {
-		t.Fatal(err)
-	}
-	if !bytes.Equal(pt[:], msg[:]) {
-		t.Errorf("Decryption failed \n got : %X\n exp : %X", pt, msg)
-	}
-}
-
-// Generate key and check if can encrypt
-func TestPKEKeyGeneration(t *testing.T) {
-	// Message to be encrypted
-	var msg = make([]byte, Params.MsgLen)
-	var err error
-	for i, _ := range msg {
-		msg[i] = byte(i)
-	}
-
-	sk := NewPrivateKey(KeyVariant_SIKE)
-	err = sk.Generate(rand.Reader)
-	checkErr(t, err, "PEK key generation")
-	pk := sk.GeneratePublicKey()
-
-	// Try to encrypt
-	ct, err := Encrypt(rand.Reader, pk, msg[:])
-	checkErr(t, err, "PEK encryption")
-	pt, err := Decrypt(sk, ct)
-	checkErr(t, err, "PEK key decryption")
-
-	if !bytes.Equal(pt[:], msg[:]) {
-		t.Fatalf("Decryption failed \n got : %X\n exp : %X", pt, msg)
-	}
-}
-
-func TestNegativePKE(t *testing.T) {
-	var msg [40]byte
-	var err error
-
-	// Generate key
-	sk := NewPrivateKey(KeyVariant_SIKE)
-	err = sk.Generate(rand.Reader)
-	checkErr(t, err, "key generation")
-
-	pk := sk.GeneratePublicKey()
-
-	// bytelen(msg) - 1
-	ct, err := Encrypt(rand.Reader, pk, msg[:Params.KemSize+8-1])
-	if err == nil {
-		t.Fatal("Error hasn't been returned")
-	}
-	if ct != nil {
-		t.Fatal("Ciphertext must be nil")
-	}
-
-	// KemSize - 1
-	pt, err := Decrypt(sk, msg[:Params.KemSize+8-1])
-	if err == nil {
-		t.Fatal("Error hasn't been returned")
-	}
-	if pt != nil {
-		t.Fatal("Ciphertext must be nil")
-	}
-}
-
-func testKEMRoundTrip(t *testing.T, pkB, skB []byte) {
-	// Import keys
-	pk := NewPublicKey(KeyVariant_SIKE)
-	sk := NewPrivateKey(KeyVariant_SIKE)
-	if pk.Import(pkB) != nil || sk.Import(skB) != nil {
-		t.Error("Import failed")
-	}
-
-	ct, ss_e, err := Encapsulate(rand.Reader, pk)
-	if err != nil {
-		t.Error("Encapsulate failed")
-	}
-
-	ss_d, err := Decapsulate(sk, pk, ct)
-	if err != nil {
-		t.Error("Decapsulate failed")
-	}
-	if !bytes.Equal(ss_e, ss_d) {
-		t.Error("Shared secrets from decapsulation and encapsulation differ")
-	}
-}
-
-func TestKEMRoundTrip(t *testing.T) {
-	pk, err := hex.DecodeString(tdata.PkB_sike)
-	checkErr(t, err, "public key B not a number")
-	sk, err := hex.DecodeString(tdata.PrB_sike)
-	checkErr(t, err, "private key B not a number")
-	testKEMRoundTrip(t, pk, sk)
-}
-
-func TestKEMKeyGeneration(t *testing.T) {
-	// Generate key
-	sk := NewPrivateKey(KeyVariant_SIKE)
-	checkErr(t, sk.Generate(rand.Reader), "error: key generation")
-	pk := sk.GeneratePublicKey()
-
-	// calculated shared secret
-	ct, ss_e, err := Encapsulate(rand.Reader, pk)
-
-	checkErr(t, err, "encapsulation failed")
-	ss_d, err := Decapsulate(sk, pk, ct)
-	checkErr(t, err, "decapsulation failed")
-
-	if !bytes.Equal(ss_e, ss_d) {
-		t.Fatalf("KEM failed \n encapsulated: %X\n decapsulated: %X", ss_d, ss_e)
-	}
-}
-
-func TestNegativeKEM(t *testing.T) {
-	sk := NewPrivateKey(KeyVariant_SIKE)
-	checkErr(t, sk.Generate(rand.Reader), "error: key generation")
-	pk := sk.GeneratePublicKey()
-
-	ct, ss_e, err := Encapsulate(rand.Reader, pk)
-	checkErr(t, err, "pre-requisite for a test failed")
-
-	ct[0] = ct[0] - 1
-	ss_d, err := Decapsulate(sk, pk, ct)
-	checkErr(t, err, "decapsulation returns error when invalid ciphertext provided")
-
-	if bytes.Equal(ss_e, ss_d) {
-		// no idea how this could ever happen, but it would be very bad
-		t.Error("critical error")
-	}
-
-	// Try encapsulating with SIDH key
-	pkSidh := NewPublicKey(KeyVariant_SIDH_B)
-	prSidh := NewPrivateKey(KeyVariant_SIDH_B)
-	_, _, err = Encapsulate(rand.Reader, pkSidh)
-	if err == nil {
-		t.Error("encapsulation accepts SIDH public key")
-	}
-	// Try decapsulating with SIDH key
-	_, err = Decapsulate(prSidh, pk, ct)
-	if err == nil {
-		t.Error("decapsulation accepts SIDH private key key")
-	}
-}
-
-// In case invalid ciphertext is provided, SIKE's decapsulation must
-// return same (but unpredictable) result for a given key.
-func TestNegativeKEMSameWrongResult(t *testing.T) {
-	sk := NewPrivateKey(KeyVariant_SIKE)
-	checkErr(t, sk.Generate(rand.Reader), "error: key generation")
-	pk := sk.GeneratePublicKey()
-
-	ct, encSs, err := Encapsulate(rand.Reader, pk)
-	checkErr(t, err, "pre-requisite for a test failed")
-
-	// make ciphertext wrong
-	ct[0] = ct[0] - 1
-	decSs1, err := Decapsulate(sk, pk, ct)
-	checkErr(t, err, "pre-requisite for a test failed")
-
-	// second decapsulation must be done with same, but imported private key
-	expSk := sk.Export()
-
-	// creat new private key
-	sk = NewPrivateKey(KeyVariant_SIKE)
-	err = sk.Import(expSk)
-	checkErr(t, err, "import failed")
-
-	// try decapsulating again. ss2 must be same as ss1 and different than
-	// original plaintext
-	decSs2, err := Decapsulate(sk, pk, ct)
-	checkErr(t, err, "pre-requisite for a test failed")
-
-	if !bytes.Equal(decSs1, decSs2) {
-		t.Error("decapsulation is insecure")
-	}
-
-	if bytes.Equal(encSs, decSs1) || bytes.Equal(encSs, decSs2) {
-		// this test requires that decapsulation returns wrong result
-		t.Errorf("test implementation error")
-	}
-}
-
-func readAndCheckLine(r *bufio.Reader) []byte {
-	// Read next line from buffer
-	line, isPrefix, err := r.ReadLine()
-	if err != nil || isPrefix {
-		panic("Wrong format of input file")
-	}
-
-	// Function expects that line is in format "KEY = HEX_VALUE". Get
-	// value, which should be a hex string
-	hexst := strings.Split(string(line), "=")[1]
-	hexst = strings.TrimSpace(hexst)
-	// Convert value to byte string
-	ret, err := hex.DecodeString(hexst)
-	if err != nil {
-		panic("Wrong format of input file")
-	}
-	return ret
-}
-
-func testKeygenSIKE(pk, sk []byte, id uint8) bool {
-	// Import provided private key
-	var prvKey = NewPrivateKey(KeyVariant_SIKE)
-	if prvKey.Import(sk) != nil {
-		panic("sike test: can't load KAT")
-	}
-
-	// Generate public key
-	pubKey := prvKey.GeneratePublicKey()
-	return bytes.Equal(pubKey.Export(), pk)
-}
-
-func testDecapsulation(pk, sk, ct, ssExpected []byte, id uint8) bool {
-	var pubKey = NewPublicKey(KeyVariant_SIKE)
-	var prvKey = NewPrivateKey(KeyVariant_SIKE)
-	if pubKey.Import(pk) != nil || prvKey.Import(sk) != nil {
-		panic("sike test: can't load KAT")
-	}
-
-	ssGot, err := Decapsulate(prvKey, pubKey, ct)
-	if err != nil {
-		panic("sike test: can't perform degcapsulation KAT")
-	}
-
-	return bytes.Equal(ssGot, ssExpected)
-}
-
-func TestKeyAgreement(t *testing.T) {
-	testKeyAgreement(t, tdata.PkA_sidh, tdata.PrA_sidh, tdata.PkB_sidh, tdata.PrB_sidh)
-}
-
-// Same values as in sike_test.cc
-func TestDecapsulation(t *testing.T) {
-	var sk = [16 + 28]byte{
-		0x04, 0x5E, 0x01, 0x42, 0xB8, 0x2F, 0xE1, 0x9A, 0x38, 0x25,
-		0x92, 0xE7, 0xDC, 0xBA, 0xF7, 0x1B, 0xB1, 0xFD, 0x34, 0x42,
-		0xDB, 0x02, 0xBC, 0x9D, 0x4C, 0xD0, 0x72, 0x34, 0x4D, 0xBD,
-		0x06, 0xDF, 0x1C, 0x7D, 0x0A, 0x88, 0xB2, 0x50, 0xC4, 0xF6,
-		0xAE, 0xE8, 0x25, 0x01,
-	}
-
-	var pk = [330]byte{
-		0x6D, 0x8D, 0xF5, 0x7B, 0xCD, 0x47, 0xCA, 0xCB, 0x7A, 0x38,
-		0xB7, 0xA6, 0x90, 0xB7, 0x37, 0x03, 0xD4, 0x6F, 0x27, 0x73,
-		0x74, 0x17, 0x5A, 0xA4, 0x0D, 0xC6, 0x81, 0xAD, 0xDB, 0xF7,
-		0x18, 0xB2, 0x3C, 0x30, 0xCF, 0xAA, 0x08, 0x11, 0x91, 0xCC,
-		0x27, 0x4E, 0xF1, 0xA6, 0xB7, 0xDA, 0xD2, 0xCF, 0x99, 0x7F,
-		0xF7, 0xE1, 0xD0, 0xCE, 0x00, 0xD2, 0x4B, 0xA4, 0x33, 0xB4,
-		0x87, 0x01, 0x3F, 0x02, 0xF7, 0xF9, 0xDE, 0xC3, 0x60, 0x62,
-		0xDA, 0x3F, 0x74, 0xA9, 0x44, 0xBE, 0x19, 0xD5, 0x03, 0x2A,
-		0x79, 0x8C, 0xA7, 0xFF, 0xEA, 0xB3, 0xBB, 0xB5, 0xD4, 0x1D,
-		0x8F, 0x92, 0xCE, 0x62, 0x6E, 0x99, 0x24, 0xD7, 0x57, 0xFA,
-		0xCD, 0xB6, 0xE2, 0x8E, 0xFD, 0x22, 0x0E, 0x31, 0x21, 0x01,
-		0x8D, 0x79, 0xF8, 0x3E, 0x27, 0xEC, 0x43, 0x40, 0xDB, 0x82,
-		0xE5, 0xEB, 0x6C, 0x97, 0x66, 0x29, 0x15, 0x68, 0xB7, 0x4D,
-		0x84, 0xD1, 0x8A, 0x0B, 0x12, 0x36, 0x2C, 0x0C, 0x0A, 0x6E,
-		0x4E, 0xDE, 0xA5, 0x8A, 0xDE, 0x77, 0xDD, 0x70, 0x49, 0x73,
-		0xAC, 0x27, 0x6D, 0x8D, 0x25, 0x9A, 0xE4, 0x25, 0xE8, 0x95,
-		0x8F, 0xFE, 0x90, 0x3B, 0x00, 0x69, 0x20, 0xE8, 0x7C, 0xA5,
-		0xF5, 0x79, 0xC0, 0x61, 0x51, 0x91, 0x35, 0x25, 0x3F, 0x17,
-		0x2F, 0x70, 0x73, 0xF0, 0x89, 0xB5, 0xC8, 0x25, 0xB8, 0xE5,
-		0x7E, 0x34, 0xDD, 0x11, 0xE5, 0xD6, 0xC3, 0xD5, 0x29, 0x89,
-		0xC6, 0x2C, 0x99, 0x53, 0x1D, 0x2C, 0x77, 0xB0, 0xB6, 0xA1,
-		0xBD, 0x79, 0xFB, 0x4A, 0xC2, 0x48, 0x4C, 0x62, 0x51, 0x00,
-		0xE3, 0x91, 0x2A, 0xCB, 0x84, 0x03, 0x5D, 0x2D, 0xC8, 0x33,
-		0xE9, 0x14, 0xBF, 0x74, 0x21, 0xBC, 0xF4, 0x76, 0xE5, 0x42,
-		0xB8, 0xBD, 0xE2, 0xE7, 0x20, 0x95, 0x54, 0xF2, 0xED, 0xC0,
-		0x79, 0x38, 0x1E, 0xD2, 0xEA, 0x1A, 0x63, 0x85, 0xE7, 0x3A,
-		0xDA, 0xAD, 0xAB, 0x1B, 0x1E, 0x19, 0x9E, 0x73, 0xD0, 0x10,
-		0x2E, 0x38, 0xAC, 0x8B, 0x00, 0x6A, 0x30, 0x2C, 0x3D, 0x70,
-		0x8E, 0x39, 0x6D, 0xC0, 0x12, 0x61, 0x7D, 0x2A, 0x0A, 0x04,
-		0x95, 0x8E, 0x09, 0x3C, 0x7B, 0xEC, 0x2E, 0xBC, 0xE8, 0xE8,
-		0xE8, 0x37, 0x29, 0xC4, 0x7E, 0x76, 0x48, 0xB9, 0x3B, 0x72,
-		0xE5, 0x99, 0x9B, 0xF9, 0xE3, 0x99, 0x72, 0x3F, 0x35, 0x29,
-		0x85, 0xE0, 0xC8, 0xBF, 0xB1, 0x6B, 0xB1, 0x6E, 0x72, 0x00,
-	}
-
-	var ct = [330 + 16]byte{
-		0xFF, 0xEB, 0xEF, 0x4A, 0xC0, 0x57, 0x0F, 0x26, 0xAC, 0x76,
-		0xA8, 0xB0, 0xA3, 0x5D, 0x9C, 0xD9, 0x25, 0xD1, 0x7F, 0x92,
-		0x5D, 0xF4, 0x23, 0x34, 0xC3, 0x03, 0x10, 0xE1, 0xB0, 0x24,
-		0x9B, 0x44, 0x58, 0x26, 0x13, 0x56, 0x83, 0x43, 0x72, 0x69,
-		0x28, 0x0D, 0x55, 0x07, 0x1F, 0xDB, 0xC0, 0x23, 0x34, 0x83,
-		0x1A, 0x09, 0x9B, 0x80, 0x00, 0x64, 0x56, 0xDC, 0x79, 0x7A,
-		0xD2, 0xCE, 0x23, 0xC9, 0x72, 0x27, 0xFC, 0x8D, 0xAB, 0xBF,
-		0xD3, 0x17, 0xF6, 0x91, 0x7B, 0x15, 0x93, 0x83, 0x8A, 0x4F,
-		0x6C, 0xCA, 0x4A, 0x94, 0xDA, 0xC7, 0x9D, 0xB6, 0xD6, 0xBA,
-		0xBD, 0x81, 0x9A, 0x78, 0xE5, 0xE5, 0xBE, 0x17, 0xBC, 0xCB,
-		0xC8, 0x23, 0x80, 0x5F, 0x75, 0xF8, 0xDB, 0x51, 0x55, 0x00,
-		0x25, 0x33, 0x52, 0x64, 0xB2, 0xD6, 0xD8, 0x9A, 0x2A, 0x9E,
-		0x29, 0x99, 0x13, 0x33, 0xE2, 0xA7, 0x98, 0xAC, 0xD7, 0x79,
-		0x5C, 0x2F, 0xBA, 0x07, 0xC3, 0x03, 0x37, 0xD6, 0xE6, 0xB5,
-		0xA1, 0xF5, 0x29, 0xB6, 0xF6, 0xC0, 0x5C, 0x44, 0x68, 0x2B,
-		0x0B, 0xF5, 0x00, 0x01, 0x44, 0xD5, 0xCC, 0x23, 0xB5, 0x27,
-		0x4F, 0xCA, 0xB4, 0x05, 0x01, 0xF9, 0xD4, 0x41, 0xE0, 0xE1,
-		0x1E, 0xCF, 0xA9, 0xBC, 0x79, 0xD7, 0xD5, 0xF5, 0x3C, 0xE6,
-		0x93, 0xF4, 0x6C, 0x84, 0x5A, 0x2C, 0x4B, 0xE4, 0x91, 0xB2,
-		0xB2, 0xB8, 0xAD, 0x74, 0x9A, 0x69, 0x79, 0x4C, 0x84, 0xB7,
-		0xBF, 0xF1, 0x68, 0x4B, 0xAE, 0x0F, 0x7F, 0x45, 0x3B, 0x18,
-		0x3F, 0xFA, 0x00, 0x48, 0xE0, 0x3A, 0xE2, 0xC0, 0xAE, 0x00,
-		0xCE, 0x90, 0x28, 0xA4, 0x1B, 0xBE, 0xCA, 0x0C, 0x21, 0x29,
-		0x64, 0x30, 0x5E, 0x35, 0xAD, 0xFD, 0x83, 0x47, 0x40, 0x6D,
-		0x15, 0x56, 0xFC, 0xF8, 0x5F, 0xAB, 0x81, 0xFE, 0x6B, 0xE9,
-		0x6B, 0xED, 0x27, 0x35, 0x7C, 0xD8, 0x2C, 0xD4, 0xF2, 0x11,
-		0xE6, 0xAF, 0xDF, 0xB8, 0x91, 0x96, 0xEB, 0xF7, 0x4C, 0x8D,
-		0x70, 0x77, 0x90, 0x81, 0x00, 0x09, 0x19, 0x27, 0x8A, 0x9E,
-		0xB6, 0x1A, 0xE9, 0xAC, 0x6C, 0xC9, 0xF8, 0xEA, 0xA2, 0x34,
-		0xB8, 0xAC, 0xB3, 0xB3, 0x68, 0xA1, 0xB7, 0x29, 0x55, 0xCA,
-		0x40, 0x23, 0x92, 0x5C, 0x0C, 0x79, 0x6B, 0xD6, 0x9F, 0x5B,
-		0xD2, 0xE6, 0xAE, 0x04, 0xCB, 0xEC, 0xC7, 0x88, 0x18, 0xDB,
-		0x7A, 0xE6, 0xD6, 0xC9, 0x39, 0xFD, 0x93, 0x9B, 0xC8, 0x01,
-		0x6F, 0x3E, 0x6C, 0x90, 0x3E, 0x73, 0x76, 0x99, 0x7C, 0x48,
-		0xDA, 0x68, 0x48, 0x80, 0x2B, 0x63,
-	}
-	var ssExp = [16]byte{
-		0xA1, 0xF9, 0x5A, 0x67, 0xB9, 0x3D, 0x1E, 0x72, 0xE8, 0xC5,
-		0x71, 0xF1, 0x4C, 0xB2, 0xAA, 0x6D,
-	}
-
-	var prvObj = NewPrivateKey(KeyVariant_SIKE)
-	var pubObj = NewPublicKey(KeyVariant_SIKE)
-
-	if pubObj.Import(pk[:]) != nil || prvObj.Import(sk[:]) != nil {
-		t.Error("Can't import one of the keys")
-	}
-
-	res, _ := Decapsulate(prvObj, pubObj, ct[:])
-	if !bytes.Equal(ssExp[:], res) {
-		t.Error("Wrong decapsulation result")
-	}
-}
-
-/* -------------------------------------------------------------------------
-   Benchmarking
-   -------------------------------------------------------------------------*/
-
-func BenchmarkSidhKeyAgreement(b *testing.B) {
-	// KeyPairs
-	alicePublic := convToPub(tdata.PkA_sidh, KeyVariant_SIDH_A)
-	alicePrivate := convToPrv(tdata.PrA_sidh, KeyVariant_SIDH_A)
-	bobPublic := convToPub(tdata.PkB_sidh, KeyVariant_SIDH_B)
-	bobPrivate := convToPrv(tdata.PrB_sidh, KeyVariant_SIDH_B)
-
-	for i := 0; i < b.N; i++ {
-		// Derive shared secret
-		DeriveSecret(bobPrivate, alicePublic)
-		DeriveSecret(alicePrivate, bobPublic)
-	}
-}
-
-func BenchmarkAliceKeyGenPrv(b *testing.B) {
-	prv := NewPrivateKey(KeyVariant_SIDH_A)
-	for n := 0; n < b.N; n++ {
-		prv.Generate(rand.Reader)
-	}
-}
-
-func BenchmarkBobKeyGenPrv(b *testing.B) {
-	prv := NewPrivateKey(KeyVariant_SIDH_B)
-	for n := 0; n < b.N; n++ {
-		prv.Generate(rand.Reader)
-	}
-}
-
-func BenchmarkAliceKeyGenPub(b *testing.B) {
-	prv := NewPrivateKey(KeyVariant_SIDH_A)
-	prv.Generate(rand.Reader)
-	for n := 0; n < b.N; n++ {
-		prv.GeneratePublicKey()
-	}
-}
-
-func BenchmarkBobKeyGenPub(b *testing.B) {
-	prv := NewPrivateKey(KeyVariant_SIDH_B)
-	prv.Generate(rand.Reader)
-	for n := 0; n < b.N; n++ {
-		prv.GeneratePublicKey()
-	}
-}
-
-func BenchmarkSharedSecretAlice(b *testing.B) {
-	aPr := convToPrv(tdata.PrA_sidh, KeyVariant_SIDH_A)
-	bPk := convToPub(tdata.PkB_sike, KeyVariant_SIDH_B)
-	for n := 0; n < b.N; n++ {
-		DeriveSecret(aPr, bPk)
-	}
-}
-
-func BenchmarkSharedSecretBob(b *testing.B) {
-	// m_B = 3*randint(0,3^238)
-	aPk := convToPub(tdata.PkA_sidh, KeyVariant_SIDH_A)
-	bPr := convToPrv(tdata.PrB_sidh, KeyVariant_SIDH_B)
-	for n := 0; n < b.N; n++ {
-		DeriveSecret(bPr, aPk)
-	}
-}
diff --git a/src/ssl/test/runner/tls.go b/src/ssl/test/runner/tls.go
index 1862b3d..128d22e 100644
--- a/src/ssl/test/runner/tls.go
+++ b/src/ssl/test/runner/tls.go
@@ -276,13 +276,15 @@
 }
 
 func getCertificatePublicKey(cert *x509.Certificate) crypto.PublicKey {
-	// TODO(davidben): When Go 1.13 is released, use the Ed25519 support in
-	// the standard library.
+	if cert.PublicKey != nil {
+		return cert.PublicKey
+	}
+
 	if isEd25519Certificate(cert) {
 		return ed25519.PublicKey(cert.RawSubjectPublicKeyInfo[len(ed25519SPKIPrefix):])
 	}
 
-	return cert.PublicKey
+	return nil
 }
 
 var ed25519PKCS8Prefix = []byte{0x30, 0x2e, 0x02, 0x01, 0x00, 0x30, 0x05, 0x06, 0x03, 0x2b, 0x65, 0x70,
@@ -292,12 +294,6 @@
 // PKCS#1 private keys by default, while OpenSSL 1.0.0 generates PKCS#8 keys.
 // OpenSSL ecparam generates SEC1 EC private keys for ECDSA. We try all three.
 func parsePrivateKey(der []byte) (crypto.PrivateKey, error) {
-	// TODO(davidben): When Go 1.13 is released, use the Ed25519 support in
-	// the standard library.
-	if bytes.HasPrefix(der, ed25519PKCS8Prefix) && len(der) == len(ed25519PKCS8Prefix)+32 {
-		seed := der[len(ed25519PKCS8Prefix):]
-		return ed25519.NewKeyFromSeed(seed), nil
-	}
 	if key, err := x509.ParsePKCS1PrivateKey(der); err == nil {
 		return key, nil
 	}
@@ -313,5 +309,10 @@
 		return key, nil
 	}
 
+	if bytes.HasPrefix(der, ed25519PKCS8Prefix) && len(der) == len(ed25519PKCS8Prefix)+32 {
+		seed := der[len(ed25519PKCS8Prefix):]
+		return ed25519.NewKeyFromSeed(seed), nil
+	}
+
 	return nil, errors.New("crypto/tls: failed to parse private key")
 }
diff --git a/src/ssl/test/test_config.cc b/src/ssl/test/test_config.cc
index bd32ce9..70e061b 100644
--- a/src/ssl/test/test_config.cc
+++ b/src/ssl/test/test_config.cc
@@ -51,181 +51,181 @@
 }
 
 const Flag<bool> kBoolFlags[] = {
-    {"-server", &TestConfig::is_server},
-    {"-dtls", &TestConfig::is_dtls},
-    {"-fallback-scsv", &TestConfig::fallback_scsv},
-    {"-require-any-client-certificate",
-     &TestConfig::require_any_client_certificate},
-    {"-false-start", &TestConfig::false_start},
-    {"-async", &TestConfig::async},
-    {"-write-different-record-sizes",
-     &TestConfig::write_different_record_sizes},
-    {"-cbc-record-splitting", &TestConfig::cbc_record_splitting},
-    {"-partial-write", &TestConfig::partial_write},
-    {"-no-tls13", &TestConfig::no_tls13},
-    {"-no-tls12", &TestConfig::no_tls12},
-    {"-no-tls11", &TestConfig::no_tls11},
-    {"-no-tls1", &TestConfig::no_tls1},
-    {"-no-ticket", &TestConfig::no_ticket},
-    {"-enable-channel-id", &TestConfig::enable_channel_id},
-    {"-shim-writes-first", &TestConfig::shim_writes_first},
-    {"-expect-session-miss", &TestConfig::expect_session_miss},
-    {"-decline-alpn", &TestConfig::decline_alpn},
-    {"-select-empty-alpn", &TestConfig::select_empty_alpn},
-    {"-expect-extended-master-secret",
-     &TestConfig::expect_extended_master_secret},
-    {"-enable-ocsp-stapling", &TestConfig::enable_ocsp_stapling},
-    {"-enable-signed-cert-timestamps",
-     &TestConfig::enable_signed_cert_timestamps},
-    {"-implicit-handshake", &TestConfig::implicit_handshake},
-    {"-use-early-callback", &TestConfig::use_early_callback},
-    {"-fail-early-callback", &TestConfig::fail_early_callback},
-    {"-install-ddos-callback", &TestConfig::install_ddos_callback},
-    {"-fail-ddos-callback", &TestConfig::fail_ddos_callback},
-    {"-fail-cert-callback", &TestConfig::fail_cert_callback},
-    {"-handshake-never-done", &TestConfig::handshake_never_done},
-    {"-use-export-context", &TestConfig::use_export_context},
-    {"-tls-unique", &TestConfig::tls_unique},
-    {"-expect-ticket-renewal", &TestConfig::expect_ticket_renewal},
-    {"-expect-no-session", &TestConfig::expect_no_session},
-    {"-expect-ticket-supports-early-data",
-     &TestConfig::expect_ticket_supports_early_data},
-    {"-use-ticket-callback", &TestConfig::use_ticket_callback},
-    {"-renew-ticket", &TestConfig::renew_ticket},
-    {"-enable-early-data", &TestConfig::enable_early_data},
-    {"-check-close-notify", &TestConfig::check_close_notify},
-    {"-shim-shuts-down", &TestConfig::shim_shuts_down},
-    {"-verify-fail", &TestConfig::verify_fail},
-    {"-verify-peer", &TestConfig::verify_peer},
-    {"-verify-peer-if-no-obc", &TestConfig::verify_peer_if_no_obc},
-    {"-expect-verify-result", &TestConfig::expect_verify_result},
-    {"-renegotiate-once", &TestConfig::renegotiate_once},
-    {"-renegotiate-freely", &TestConfig::renegotiate_freely},
-    {"-renegotiate-ignore", &TestConfig::renegotiate_ignore},
-    {"-forbid-renegotiation-after-handshake",
-     &TestConfig::forbid_renegotiation_after_handshake},
-    {"-enable-all-curves", &TestConfig::enable_all_curves},
-    {"-use-old-client-cert-callback",
-     &TestConfig::use_old_client_cert_callback},
-    {"-send-alert", &TestConfig::send_alert},
-    {"-peek-then-read", &TestConfig::peek_then_read},
-    {"-enable-grease", &TestConfig::enable_grease},
-    {"-use-exporter-between-reads", &TestConfig::use_exporter_between_reads},
-    {"-retain-only-sha256-client-cert",
-     &TestConfig::retain_only_sha256_client_cert},
-    {"-expect-sha256-client-cert", &TestConfig::expect_sha256_client_cert},
-    {"-read-with-unfinished-write", &TestConfig::read_with_unfinished_write},
-    {"-expect-secure-renegotiation", &TestConfig::expect_secure_renegotiation},
-    {"-expect-no-secure-renegotiation",
-     &TestConfig::expect_no_secure_renegotiation},
-    {"-expect-session-id", &TestConfig::expect_session_id},
-    {"-expect-no-session-id", &TestConfig::expect_no_session_id},
-    {"-expect-accept-early-data", &TestConfig::expect_accept_early_data},
-    {"-expect-reject-early-data", &TestConfig::expect_reject_early_data},
-    {"-expect-no-offer-early-data", &TestConfig::expect_no_offer_early_data},
-    {"-no-op-extra-handshake", &TestConfig::no_op_extra_handshake},
-    {"-handshake-twice", &TestConfig::handshake_twice},
-    {"-allow-unknown-alpn-protos", &TestConfig::allow_unknown_alpn_protos},
-    {"-enable-ed25519", &TestConfig::enable_ed25519},
-    {"-use-custom-verify-callback", &TestConfig::use_custom_verify_callback},
-    {"-allow-false-start-without-alpn",
-     &TestConfig::allow_false_start_without_alpn},
-    {"-ignore-tls13-downgrade", &TestConfig::ignore_tls13_downgrade},
-    {"-expect-tls13-downgrade", &TestConfig::expect_tls13_downgrade},
-    {"-handoff", &TestConfig::handoff},
-    {"-no-rsa-pss-rsae-certs", &TestConfig::no_rsa_pss_rsae_certs},
-    {"-use-ocsp-callback", &TestConfig::use_ocsp_callback},
-    {"-set-ocsp-in-callback", &TestConfig::set_ocsp_in_callback},
-    {"-decline-ocsp-callback", &TestConfig::decline_ocsp_callback},
-    {"-fail-ocsp-callback", &TestConfig::fail_ocsp_callback},
-    {"-install-cert-compression-algs",
-     &TestConfig::install_cert_compression_algs},
-    {"-is-handshaker-supported", &TestConfig::is_handshaker_supported},
-    {"-handshaker-resume", &TestConfig::handshaker_resume},
-    {"-reverify-on-resume", &TestConfig::reverify_on_resume},
-    {"-enforce-rsa-key-usage", &TestConfig::enforce_rsa_key_usage},
-    {"-jdk11-workaround", &TestConfig::jdk11_workaround},
-    {"-server-preference", &TestConfig::server_preference},
-    {"-export-traffic-secrets", &TestConfig::export_traffic_secrets},
-    {"-key-update", &TestConfig::key_update},
-    {"-expect-delegated-credential-used",
-     &TestConfig::expect_delegated_credential_used},
-    {"-enable-pq-experiment-signal", &TestConfig::enable_pq_experiment_signal},
-    {"-expect-pq-experiment-signal", &TestConfig::expect_pq_experiment_signal},
+  { "-server", &TestConfig::is_server },
+  { "-dtls", &TestConfig::is_dtls },
+  { "-fallback-scsv", &TestConfig::fallback_scsv },
+  { "-require-any-client-certificate",
+    &TestConfig::require_any_client_certificate },
+  { "-false-start", &TestConfig::false_start },
+  { "-async", &TestConfig::async },
+  { "-write-different-record-sizes",
+    &TestConfig::write_different_record_sizes },
+  { "-cbc-record-splitting", &TestConfig::cbc_record_splitting },
+  { "-partial-write", &TestConfig::partial_write },
+  { "-no-tls13", &TestConfig::no_tls13 },
+  { "-no-tls12", &TestConfig::no_tls12 },
+  { "-no-tls11", &TestConfig::no_tls11 },
+  { "-no-tls1", &TestConfig::no_tls1 },
+  { "-no-ticket", &TestConfig::no_ticket },
+  { "-enable-channel-id", &TestConfig::enable_channel_id },
+  { "-shim-writes-first", &TestConfig::shim_writes_first },
+  { "-expect-session-miss", &TestConfig::expect_session_miss },
+  { "-decline-alpn", &TestConfig::decline_alpn },
+  { "-select-empty-alpn", &TestConfig::select_empty_alpn },
+  { "-expect-extended-master-secret",
+    &TestConfig::expect_extended_master_secret },
+  { "-enable-ocsp-stapling", &TestConfig::enable_ocsp_stapling },
+  { "-enable-signed-cert-timestamps",
+    &TestConfig::enable_signed_cert_timestamps },
+  { "-implicit-handshake", &TestConfig::implicit_handshake },
+  { "-use-early-callback", &TestConfig::use_early_callback },
+  { "-fail-early-callback", &TestConfig::fail_early_callback },
+  { "-install-ddos-callback", &TestConfig::install_ddos_callback },
+  { "-fail-ddos-callback", &TestConfig::fail_ddos_callback },
+  { "-fail-cert-callback", &TestConfig::fail_cert_callback },
+  { "-handshake-never-done", &TestConfig::handshake_never_done },
+  { "-use-export-context", &TestConfig::use_export_context },
+  { "-tls-unique", &TestConfig::tls_unique },
+  { "-expect-ticket-renewal", &TestConfig::expect_ticket_renewal },
+  { "-expect-no-session", &TestConfig::expect_no_session },
+  { "-expect-ticket-supports-early-data",
+    &TestConfig::expect_ticket_supports_early_data },
+  { "-use-ticket-callback", &TestConfig::use_ticket_callback },
+  { "-renew-ticket", &TestConfig::renew_ticket },
+  { "-enable-early-data", &TestConfig::enable_early_data },
+  { "-check-close-notify", &TestConfig::check_close_notify },
+  { "-shim-shuts-down", &TestConfig::shim_shuts_down },
+  { "-verify-fail", &TestConfig::verify_fail },
+  { "-verify-peer", &TestConfig::verify_peer },
+  { "-verify-peer-if-no-obc", &TestConfig::verify_peer_if_no_obc },
+  { "-expect-verify-result", &TestConfig::expect_verify_result },
+  { "-renegotiate-once", &TestConfig::renegotiate_once },
+  { "-renegotiate-freely", &TestConfig::renegotiate_freely },
+  { "-renegotiate-ignore", &TestConfig::renegotiate_ignore },
+  { "-forbid-renegotiation-after-handshake",
+    &TestConfig::forbid_renegotiation_after_handshake },
+  { "-enable-all-curves", &TestConfig::enable_all_curves },
+  { "-use-old-client-cert-callback",
+    &TestConfig::use_old_client_cert_callback },
+  { "-send-alert", &TestConfig::send_alert },
+  { "-peek-then-read", &TestConfig::peek_then_read },
+  { "-enable-grease", &TestConfig::enable_grease },
+  { "-use-exporter-between-reads", &TestConfig::use_exporter_between_reads },
+  { "-retain-only-sha256-client-cert",
+    &TestConfig::retain_only_sha256_client_cert },
+  { "-expect-sha256-client-cert",
+    &TestConfig::expect_sha256_client_cert },
+  { "-read-with-unfinished-write", &TestConfig::read_with_unfinished_write },
+  { "-expect-secure-renegotiation",
+    &TestConfig::expect_secure_renegotiation },
+  { "-expect-no-secure-renegotiation",
+    &TestConfig::expect_no_secure_renegotiation },
+  { "-expect-session-id", &TestConfig::expect_session_id },
+  { "-expect-no-session-id", &TestConfig::expect_no_session_id },
+  { "-expect-accept-early-data", &TestConfig::expect_accept_early_data },
+  { "-expect-reject-early-data", &TestConfig::expect_reject_early_data },
+  { "-expect-no-offer-early-data", &TestConfig::expect_no_offer_early_data },
+  { "-no-op-extra-handshake", &TestConfig::no_op_extra_handshake },
+  { "-handshake-twice", &TestConfig::handshake_twice },
+  { "-allow-unknown-alpn-protos", &TestConfig::allow_unknown_alpn_protos },
+  { "-enable-ed25519", &TestConfig::enable_ed25519 },
+  { "-use-custom-verify-callback", &TestConfig::use_custom_verify_callback },
+  { "-allow-false-start-without-alpn",
+    &TestConfig::allow_false_start_without_alpn },
+  { "-ignore-tls13-downgrade", &TestConfig::ignore_tls13_downgrade },
+  { "-expect-tls13-downgrade", &TestConfig::expect_tls13_downgrade },
+  { "-handoff", &TestConfig::handoff },
+  { "-no-rsa-pss-rsae-certs", &TestConfig::no_rsa_pss_rsae_certs },
+  { "-use-ocsp-callback", &TestConfig::use_ocsp_callback },
+  { "-set-ocsp-in-callback", &TestConfig::set_ocsp_in_callback },
+  { "-decline-ocsp-callback", &TestConfig::decline_ocsp_callback },
+  { "-fail-ocsp-callback", &TestConfig::fail_ocsp_callback },
+  { "-install-cert-compression-algs",
+    &TestConfig::install_cert_compression_algs },
+  { "-is-handshaker-supported", &TestConfig::is_handshaker_supported },
+  { "-handshaker-resume", &TestConfig::handshaker_resume },
+  { "-reverify-on-resume", &TestConfig::reverify_on_resume },
+  { "-enforce-rsa-key-usage", &TestConfig::enforce_rsa_key_usage },
+  { "-jdk11-workaround", &TestConfig::jdk11_workaround },
+  { "-server-preference", &TestConfig::server_preference },
+  { "-export-traffic-secrets", &TestConfig::export_traffic_secrets },
+  { "-key-update", &TestConfig::key_update },
 };
 
 const Flag<std::string> kStringFlags[] = {
-    {"-write-settings", &TestConfig::write_settings},
-    {"-key-file", &TestConfig::key_file},
-    {"-cert-file", &TestConfig::cert_file},
-    {"-expect-server-name", &TestConfig::expect_server_name},
-    {"-advertise-npn", &TestConfig::advertise_npn},
-    {"-expect-next-proto", &TestConfig::expect_next_proto},
-    {"-select-next-proto", &TestConfig::select_next_proto},
-    {"-send-channel-id", &TestConfig::send_channel_id},
-    {"-host-name", &TestConfig::host_name},
-    {"-advertise-alpn", &TestConfig::advertise_alpn},
-    {"-expect-alpn", &TestConfig::expect_alpn},
-    {"-expect-late-alpn", &TestConfig::expect_late_alpn},
-    {"-expect-advertised-alpn", &TestConfig::expect_advertised_alpn},
-    {"-select-alpn", &TestConfig::select_alpn},
-    {"-psk", &TestConfig::psk},
-    {"-psk-identity", &TestConfig::psk_identity},
-    {"-srtp-profiles", &TestConfig::srtp_profiles},
-    {"-cipher", &TestConfig::cipher},
-    {"-export-label", &TestConfig::export_label},
-    {"-export-context", &TestConfig::export_context},
-    {"-expect-peer-cert-file", &TestConfig::expect_peer_cert_file},
-    {"-use-client-ca-list", &TestConfig::use_client_ca_list},
-    {"-expect-client-ca-list", &TestConfig::expect_client_ca_list},
-    {"-expect-msg-callback", &TestConfig::expect_msg_callback},
-    {"-handshaker-path", &TestConfig::handshaker_path},
-    {"-delegated-credential", &TestConfig::delegated_credential},
-    {"-expect-early-data-reason", &TestConfig::expect_early_data_reason},
+  { "-write-settings", &TestConfig::write_settings },
+  { "-key-file", &TestConfig::key_file },
+  { "-cert-file", &TestConfig::cert_file },
+  { "-expect-server-name", &TestConfig::expected_server_name },
+  { "-advertise-npn", &TestConfig::advertise_npn },
+  { "-expect-next-proto", &TestConfig::expected_next_proto },
+  { "-select-next-proto", &TestConfig::select_next_proto },
+  { "-send-channel-id", &TestConfig::send_channel_id },
+  { "-host-name", &TestConfig::host_name },
+  { "-advertise-alpn", &TestConfig::advertise_alpn },
+  { "-expect-alpn", &TestConfig::expected_alpn },
+  { "-expect-late-alpn", &TestConfig::expected_late_alpn },
+  { "-expect-advertised-alpn", &TestConfig::expected_advertised_alpn },
+  { "-select-alpn", &TestConfig::select_alpn },
+  { "-psk", &TestConfig::psk },
+  { "-psk-identity", &TestConfig::psk_identity },
+  { "-srtp-profiles", &TestConfig::srtp_profiles },
+  { "-cipher", &TestConfig::cipher },
+  { "-export-label", &TestConfig::export_label },
+  { "-export-context", &TestConfig::export_context },
+  { "-expect-peer-cert-file", &TestConfig::expect_peer_cert_file },
+  { "-use-client-ca-list", &TestConfig::use_client_ca_list },
+  { "-expect-client-ca-list", &TestConfig::expected_client_ca_list },
+  { "-expect-msg-callback", &TestConfig::expect_msg_callback },
+  { "-handshaker-path", &TestConfig::handshaker_path },
+  { "-delegated-credential", &TestConfig::delegated_credential },
 };
 
 const Flag<std::string> kBase64Flags[] = {
-    {"-expect-certificate-types", &TestConfig::expect_certificate_types},
-    {"-expect-channel-id", &TestConfig::expect_channel_id},
-    {"-token-binding-params", &TestConfig::send_token_binding_params},
-    {"-expect-ocsp-response", &TestConfig::expect_ocsp_response},
-    {"-expect-signed-cert-timestamps",
-     &TestConfig::expect_signed_cert_timestamps},
-    {"-ocsp-response", &TestConfig::ocsp_response},
-    {"-signed-cert-timestamps", &TestConfig::signed_cert_timestamps},
-    {"-ticket-key", &TestConfig::ticket_key},
-    {"-quic-transport-params", &TestConfig::quic_transport_params},
-    {"-expect-quic-transport-params",
-     &TestConfig::expect_quic_transport_params},
+  { "-expect-certificate-types", &TestConfig::expected_certificate_types },
+  { "-expect-channel-id", &TestConfig::expected_channel_id },
+  { "-token-binding-params", &TestConfig::send_token_binding_params },
+  { "-expect-ocsp-response", &TestConfig::expected_ocsp_response },
+  { "-expect-signed-cert-timestamps",
+    &TestConfig::expected_signed_cert_timestamps },
+  { "-ocsp-response", &TestConfig::ocsp_response },
+  { "-signed-cert-timestamps", &TestConfig::signed_cert_timestamps },
+  { "-ticket-key", &TestConfig::ticket_key },
+  { "-quic-transport-params", &TestConfig::quic_transport_params },
+  { "-expected-quic-transport-params",
+    &TestConfig::expected_quic_transport_params },
 };
 
 const Flag<int> kIntFlags[] = {
-    {"-port", &TestConfig::port},
-    {"-resume-count", &TestConfig::resume_count},
-    {"-expect-token-binding-param", &TestConfig::expect_token_binding_param},
-    {"-min-version", &TestConfig::min_version},
-    {"-max-version", &TestConfig::max_version},
-    {"-expect-version", &TestConfig::expect_version},
-    {"-mtu", &TestConfig::mtu},
-    {"-export-keying-material", &TestConfig::export_keying_material},
-    {"-expect-total-renegotiations", &TestConfig::expect_total_renegotiations},
-    {"-expect-peer-signature-algorithm",
-     &TestConfig::expect_peer_signature_algorithm},
-    {"-expect-curve-id", &TestConfig::expect_curve_id},
-    {"-initial-timeout-duration-ms", &TestConfig::initial_timeout_duration_ms},
-    {"-max-cert-list", &TestConfig::max_cert_list},
-    {"-expect-cipher-aes", &TestConfig::expect_cipher_aes},
-    {"-expect-cipher-no-aes", &TestConfig::expect_cipher_no_aes},
-    {"-resumption-delay", &TestConfig::resumption_delay},
-    {"-max-send-fragment", &TestConfig::max_send_fragment},
-    {"-read-size", &TestConfig::read_size},
-    {"-expect-ticket-age-skew", &TestConfig::expect_ticket_age_skew},
+  { "-port", &TestConfig::port },
+  { "-resume-count", &TestConfig::resume_count },
+  { "-expected-token-binding-param",
+    &TestConfig::expected_token_binding_param },
+  { "-min-version", &TestConfig::min_version },
+  { "-max-version", &TestConfig::max_version },
+  { "-expect-version", &TestConfig::expect_version },
+  { "-mtu", &TestConfig::mtu },
+  { "-export-early-keying-material",
+    &TestConfig::export_early_keying_material },
+  { "-export-keying-material", &TestConfig::export_keying_material },
+  { "-expect-total-renegotiations", &TestConfig::expect_total_renegotiations },
+  { "-expect-peer-signature-algorithm",
+    &TestConfig::expect_peer_signature_algorithm },
+  { "-expect-curve-id", &TestConfig::expect_curve_id },
+  { "-initial-timeout-duration-ms", &TestConfig::initial_timeout_duration_ms },
+  { "-max-cert-list", &TestConfig::max_cert_list },
+  { "-expect-cipher-aes", &TestConfig::expect_cipher_aes },
+  { "-expect-cipher-no-aes", &TestConfig::expect_cipher_no_aes },
+  { "-resumption-delay", &TestConfig::resumption_delay },
+  { "-max-send-fragment", &TestConfig::max_send_fragment },
+  { "-read-size", &TestConfig::read_size },
+  { "-expect-ticket-age-skew", &TestConfig::expect_ticket_age_skew },
 };
 
 const Flag<std::vector<int>> kIntVectorFlags[] = {
     {"-signing-prefs", &TestConfig::signing_prefs},
     {"-verify-prefs", &TestConfig::verify_prefs},
-    {"-expect-peer-verify-pref", &TestConfig::expect_peer_verify_prefs},
+    {"-expect-peer-verify-pref", &TestConfig::expected_peer_verify_prefs},
     {"-curves", &TestConfig::curves},
 };
 
@@ -243,7 +243,7 @@
   if (string_field != NULL) {
     *i = *i + 1;
     if (*i >= argc) {
-      fprintf(stderr, "Missing parameter.\n");
+      fprintf(stderr, "Missing parameter\n");
       return false;
     }
     if (!skip) {
@@ -256,19 +256,19 @@
   if (base64_field != NULL) {
     *i = *i + 1;
     if (*i >= argc) {
-      fprintf(stderr, "Missing parameter.\n");
+      fprintf(stderr, "Missing parameter\n");
       return false;
     }
     size_t len;
     if (!EVP_DecodedLength(&len, strlen(argv[*i]))) {
-      fprintf(stderr, "Invalid base64: %s.\n", argv[*i]);
+      fprintf(stderr, "Invalid base64: %s\n", argv[*i]);
       return false;
     }
     std::unique_ptr<uint8_t[]> decoded(new uint8_t[len]);
     if (!EVP_DecodeBase64(decoded.get(), &len, len,
                           reinterpret_cast<const uint8_t *>(argv[*i]),
                           strlen(argv[*i]))) {
-      fprintf(stderr, "Invalid base64: %s.\n", argv[*i]);
+      fprintf(stderr, "Invalid base64: %s\n", argv[*i]);
       return false;
     }
     if (!skip) {
@@ -282,7 +282,7 @@
   if (int_field) {
     *i = *i + 1;
     if (*i >= argc) {
-      fprintf(stderr, "Missing parameter.\n");
+      fprintf(stderr, "Missing parameter\n");
       return false;
     }
     if (!skip) {
@@ -296,7 +296,7 @@
   if (int_vector_field) {
     *i = *i + 1;
     if (*i >= argc) {
-      fprintf(stderr, "Missing parameter.\n");
+      fprintf(stderr, "Missing parameter\n");
       return false;
     }
 
@@ -307,7 +307,7 @@
     return true;
   }
 
-  fprintf(stderr, "Unknown argument: %s.\n", flag);
+  fprintf(stderr, "Unknown argument: %s\n", flag);
   return false;
 }
 
@@ -403,9 +403,9 @@
   const TestConfig *config = GetTestConfig(ssl);
   const char *server_name = SSL_get_servername(ssl, TLSEXT_NAMETYPE_host_name);
   if (server_name == nullptr ||
-      std::string(server_name) != config->expect_server_name) {
-    fprintf(stderr, "servername mismatch (got %s; want %s).\n", server_name,
-            config->expect_server_name.c_str());
+      std::string(server_name) != config->expected_server_name) {
+    fprintf(stderr, "servername mismatch (got %s; want %s)\n", server_name,
+            config->expected_server_name.c_str());
     return SSL_TLSEXT_ERR_ALERT_FATAL;
   }
 
@@ -449,7 +449,7 @@
   if (content_type == SSL3_RT_HEADER) {
     if (len !=
         (config->is_dtls ? DTLS1_RT_HEADER_LENGTH : SSL3_RT_HEADER_LENGTH)) {
-      fprintf(stderr, "Incorrect length for record header: %zu.\n", len);
+      fprintf(stderr, "Incorrect length for record header: %zu\n", len);
       state->msg_callback_ok = false;
     }
     return;
@@ -459,7 +459,7 @@
   switch (content_type) {
     case 0:
       if (version != SSL2_VERSION) {
-        fprintf(stderr, "Incorrect version for V2ClientHello: %x.\n", version);
+        fprintf(stderr, "Incorrect version for V2ClientHello: %x\n", version);
         state->msg_callback_ok = false;
         return;
       }
@@ -509,7 +509,7 @@
       return;
 
     default:
-      fprintf(stderr, "Invalid content_type: %d.\n", content_type);
+      fprintf(stderr, "Invalid content_type: %d\n", content_type);
       state->msg_callback_ok = false;
   }
 }
@@ -618,11 +618,11 @@
     return SSL_TLSEXT_ERR_NOACK;
   }
 
-  if (!config->expect_advertised_alpn.empty() &&
-      (config->expect_advertised_alpn.size() != inlen ||
-       OPENSSL_memcmp(config->expect_advertised_alpn.data(), in, inlen) !=
+  if (!config->expected_advertised_alpn.empty() &&
+      (config->expected_advertised_alpn.size() != inlen ||
+       OPENSSL_memcmp(config->expected_advertised_alpn.data(), in, inlen) !=
            0)) {
-    fprintf(stderr, "bad ALPN select callback inputs.\n");
+    fprintf(stderr, "bad ALPN select callback inputs\n");
     exit(1);
   }
 
@@ -634,12 +634,12 @@
 
 static bool CheckVerifyCallback(SSL *ssl) {
   const TestConfig *config = GetTestConfig(ssl);
-  if (!config->expect_ocsp_response.empty()) {
+  if (!config->expected_ocsp_response.empty()) {
     const uint8_t *data;
     size_t len;
     SSL_get0_ocsp_response(ssl, &data, &len);
     if (len == 0) {
-      fprintf(stderr, "OCSP response not available in verify callback.\n");
+      fprintf(stderr, "OCSP response not available in verify callback\n");
       return false;
     }
   }
@@ -808,7 +808,7 @@
   for (const auto &part : parts) {
     std::string binary;
     if (!HexDecode(&binary, part)) {
-      fprintf(stderr, "Bad hex string: %s.\n", part.c_str());
+      fprintf(stderr, "Bad hex string: %s\n", part.c_str());
       return ret;
     }
 
@@ -847,22 +847,22 @@
 
 static bool CheckPeerVerifyPrefs(SSL *ssl) {
   const TestConfig *config = GetTestConfig(ssl);
-  if (!config->expect_peer_verify_prefs.empty()) {
+  if (!config->expected_peer_verify_prefs.empty()) {
     const uint16_t *peer_sigalgs;
     size_t num_peer_sigalgs =
         SSL_get0_peer_verify_algorithms(ssl, &peer_sigalgs);
-    if (config->expect_peer_verify_prefs.size() != num_peer_sigalgs) {
+    if (config->expected_peer_verify_prefs.size() != num_peer_sigalgs) {
       fprintf(stderr,
               "peer verify preferences length mismatch (got %zu, wanted %zu)\n",
-              num_peer_sigalgs, config->expect_peer_verify_prefs.size());
+              num_peer_sigalgs, config->expected_peer_verify_prefs.size());
       return false;
     }
     for (size_t i = 0; i < num_peer_sigalgs; i++) {
       if (static_cast<int>(peer_sigalgs[i]) !=
-          config->expect_peer_verify_prefs[i]) {
+          config->expected_peer_verify_prefs[i]) {
         fprintf(stderr,
                 "peer verify preference %zu mismatch (got %04x, wanted %04x\n",
-                i, peer_sigalgs[i], config->expect_peer_verify_prefs[i]);
+                i, peer_sigalgs[i], config->expected_peer_verify_prefs[i]);
         return false;
       }
     }
@@ -877,29 +877,29 @@
     return false;
   }
 
-  if (!config->expect_certificate_types.empty()) {
+  if (!config->expected_certificate_types.empty()) {
     const uint8_t *certificate_types;
     size_t certificate_types_len =
         SSL_get0_certificate_types(ssl, &certificate_types);
-    if (certificate_types_len != config->expect_certificate_types.size() ||
+    if (certificate_types_len != config->expected_certificate_types.size() ||
         OPENSSL_memcmp(certificate_types,
-                       config->expect_certificate_types.data(),
+                       config->expected_certificate_types.data(),
                        certificate_types_len) != 0) {
-      fprintf(stderr, "certificate types mismatch.\n");
+      fprintf(stderr, "certificate types mismatch\n");
       return false;
     }
   }
 
-  if (!config->expect_client_ca_list.empty()) {
+  if (!config->expected_client_ca_list.empty()) {
     bssl::UniquePtr<STACK_OF(X509_NAME)> expected =
-        DecodeHexX509Names(config->expect_client_ca_list);
+        DecodeHexX509Names(config->expected_client_ca_list);
     const size_t num_expected = sk_X509_NAME_num(expected.get());
 
     const STACK_OF(X509_NAME) *received = SSL_get_client_CA_list(ssl);
     const size_t num_received = sk_X509_NAME_num(received);
 
     if (num_received != num_expected) {
-      fprintf(stderr, "expected %u names in CertificateRequest but got %u.\n",
+      fprintf(stderr, "expected %u names in CertificateRequest but got %u\n",
               static_cast<unsigned>(num_expected),
               static_cast<unsigned>(num_received));
       return false;
@@ -908,7 +908,7 @@
     for (size_t i = 0; i < num_received; i++) {
       if (X509_NAME_cmp(sk_X509_NAME_value(received, i),
                         sk_X509_NAME_value(expected.get(), i)) != 0) {
-        fprintf(stderr, "names in CertificateRequest differ at index #%d.\n",
+        fprintf(stderr, "names in CertificateRequest differ at index #%d\n",
                 static_cast<unsigned>(i));
         return false;
       }
@@ -1099,16 +1099,35 @@
   const TestConfig *config = GetTestConfig(client_hello->ssl);
   GetTestState(client_hello->ssl)->early_callback_called = true;
 
-  if (!config->expect_server_name.empty()) {
-    const char *server_name =
-        SSL_get_servername(client_hello->ssl, TLSEXT_NAMETYPE_host_name);
-    if (server_name == nullptr ||
-        std::string(server_name) != config->expect_server_name) {
-      fprintf(stderr,
-              "Server name mismatch in early callback (got %s; want %s).\n",
-              server_name, config->expect_server_name.c_str());
+  if (!config->expected_server_name.empty()) {
+    const uint8_t *extension_data;
+    size_t extension_len;
+    CBS extension, server_name_list, host_name;
+    uint8_t name_type;
+
+    if (!SSL_early_callback_ctx_extension_get(
+            client_hello, TLSEXT_TYPE_server_name, &extension_data,
+            &extension_len)) {
+      fprintf(stderr, "Could not find server_name extension.\n");
       return ssl_select_cert_error;
     }
+
+    CBS_init(&extension, extension_data, extension_len);
+    if (!CBS_get_u16_length_prefixed(&extension, &server_name_list) ||
+        CBS_len(&extension) != 0 ||
+        !CBS_get_u8(&server_name_list, &name_type) ||
+        name_type != TLSEXT_NAMETYPE_host_name ||
+        !CBS_get_u16_length_prefixed(&server_name_list, &host_name) ||
+        CBS_len(&server_name_list) != 0) {
+      fprintf(stderr, "Could not decode server_name extension.\n");
+      return ssl_select_cert_error;
+    }
+
+    if (!CBS_mem_equal(&host_name,
+                       (const uint8_t *)config->expected_server_name.data(),
+                       config->expected_server_name.size())) {
+      fprintf(stderr, "Server name mismatch.\n");
+    }
   }
 
   if (config->fail_early_callback) {
@@ -1221,7 +1240,7 @@
     SSL_CTX_set_grease_enabled(ssl_ctx.get(), 1);
   }
 
-  if (!expect_server_name.empty()) {
+  if (!expected_server_name.empty()) {
     SSL_CTX_set_tlsext_servername_callback(ssl_ctx.get(), ServerNameCallback);
   }
 
@@ -1325,10 +1344,6 @@
     SSL_CTX_set_options(ssl_ctx.get(), SSL_OP_CIPHER_SERVER_PREFERENCE);
   }
 
-  if (enable_pq_experiment_signal) {
-    SSL_CTX_enable_pq_experiment_signal(ssl_ctx.get());
-  }
-
   return ssl_ctx;
 }
 
@@ -1356,7 +1371,7 @@
   // Account for the trailing '\0' for the identity.
   if (config->psk_identity.size() >= max_identity_len ||
       config->psk.size() > max_psk_len) {
-    fprintf(stderr, "PSK buffers too small.\n");
+    fprintf(stderr, "PSK buffers too small\n");
     return 0;
   }
 
@@ -1375,7 +1390,7 @@
   }
 
   if (config->psk.size() > max_psk_len) {
-    fprintf(stderr, "PSK buffers too small.\n");
+    fprintf(stderr, "PSK buffers too small\n");
     return 0;
   }
 
@@ -1505,7 +1520,7 @@
   if (no_ticket) {
     SSL_set_options(ssl.get(), SSL_OP_NO_TICKET);
   }
-  if (!expect_channel_id.empty() || enable_channel_id) {
+  if (!expected_channel_id.empty() || enable_channel_id) {
     SSL_set_tls_channel_id_enabled(ssl.get(), 1);
   }
   if (!send_channel_id.empty()) {
@@ -1607,9 +1622,6 @@
         case SSL_CURVE_CECPQ2:
           nids.push_back(NID_CECPQ2);
           break;
-        case SSL_CURVE_CECPQ2b:
-          nids.push_back(NID_CECPQ2b);
-          break;
       }
       if (!SSL_set1_curves(ssl.get(), &nids[0], nids.size())) {
         return nullptr;
@@ -1618,8 +1630,8 @@
   }
   if (enable_all_curves) {
     static const int kAllCurves[] = {
-        NID_secp224r1, NID_X9_62_prime256v1, NID_secp384r1, NID_secp521r1,
-        NID_X25519,    NID_CECPQ2,           NID_CECPQ2b,
+        NID_secp224r1, NID_X9_62_prime256v1, NID_secp384r1,
+        NID_secp521r1, NID_X25519,           NID_CECPQ2,
     };
     if (!SSL_set1_curves(ssl.get(), kAllCurves,
                          OPENSSL_ARRAY_SIZE(kAllCurves))) {
@@ -1666,8 +1678,7 @@
   if (!delegated_credential.empty()) {
     std::string::size_type comma = delegated_credential.find(',');
     if (comma == std::string::npos) {
-      fprintf(stderr,
-              "failed to find comma in delegated credential argument.\n");
+      fprintf(stderr, "failed to find comma in delegated credential argument");
       return nullptr;
     }
 
@@ -1675,7 +1686,7 @@
     const std::string pkcs8_hex = delegated_credential.substr(comma + 1);
     std::string dc, pkcs8;
     if (!HexDecode(&dc, dc_hex) || !HexDecode(&pkcs8, pkcs8_hex)) {
-      fprintf(stderr, "failed to hex decode delegated credential argument.\n");
+      fprintf(stderr, "failed to hex decode delegated credential argument");
       return nullptr;
     }
 
@@ -1686,7 +1697,7 @@
 
     bssl::UniquePtr<EVP_PKEY> priv(EVP_parse_private_key(&pkcs8_cbs));
     if (!priv) {
-      fprintf(stderr, "failed to parse delegated credential private key.\n");
+      fprintf(stderr, "failed to parse delegated credential private key");
       return nullptr;
     }
 
diff --git a/src/ssl/test/test_config.h b/src/ssl/test/test_config.h
index ce4b416..9221d6f 100644
--- a/src/ssl/test/test_config.h
+++ b/src/ssl/test/test_config.h
@@ -32,15 +32,15 @@
   bool fallback_scsv = false;
   std::vector<int> signing_prefs;
   std::vector<int> verify_prefs;
-  std::vector<int> expect_peer_verify_prefs;
+  std::vector<int> expected_peer_verify_prefs;
   std::vector<int> curves;
   std::string key_file;
   std::string cert_file;
-  std::string expect_server_name;
-  std::string expect_certificate_types;
+  std::string expected_server_name;
+  std::string expected_certificate_types;
   bool require_any_client_certificate = false;
   std::string advertise_npn;
-  std::string expect_next_proto;
+  std::string expected_next_proto;
   bool false_start = false;
   std::string select_next_proto;
   bool async = false;
@@ -52,31 +52,31 @@
   bool no_tls11 = false;
   bool no_tls1 = false;
   bool no_ticket = false;
-  std::string expect_channel_id;
+  std::string expected_channel_id;
   bool enable_channel_id = false;
   std::string send_channel_id;
-  int expect_token_binding_param = -1;
+  int expected_token_binding_param = -1;
   std::string send_token_binding_params;
   bool shim_writes_first = false;
   std::string host_name;
   std::string advertise_alpn;
-  std::string expect_alpn;
-  std::string expect_late_alpn;
-  std::string expect_advertised_alpn;
+  std::string expected_alpn;
+  std::string expected_late_alpn;
+  std::string expected_advertised_alpn;
   std::string select_alpn;
   bool decline_alpn = false;
   bool select_empty_alpn = false;
   std::string quic_transport_params;
-  std::string expect_quic_transport_params;
+  std::string expected_quic_transport_params;
   bool expect_session_miss = false;
   bool expect_extended_master_secret = false;
   std::string psk;
   std::string psk_identity;
   std::string srtp_profiles;
   bool enable_ocsp_stapling = false;
-  std::string expect_ocsp_response;
+  std::string expected_ocsp_response;
   bool enable_signed_cert_timestamps = false;
-  std::string expect_signed_cert_timestamps;
+  std::string expected_signed_cert_timestamps;
   int min_version = 0;
   int max_version = 0;
   int expect_version = 0;
@@ -89,6 +89,7 @@
   bool fail_cert_callback = false;
   std::string cipher;
   bool handshake_never_done = false;
+  int export_early_keying_material = 0;
   int export_keying_material = 0;
   std::string export_label;
   std::string export_context;
@@ -126,7 +127,7 @@
   bool use_old_client_cert_callback = false;
   int initial_timeout_duration_ms = 0;
   std::string use_client_ca_list;
-  std::string expect_client_ca_list;
+  std::string expected_client_ca_list;
   bool send_alert = false;
   bool peek_then_read = false;
   bool enable_grease = false;
@@ -172,11 +173,7 @@
   bool server_preference = false;
   bool export_traffic_secrets = false;
   bool key_update = false;
-  bool expect_delegated_credential_used = false;
   std::string delegated_credential;
-  std::string expect_early_data_reason;
-  bool enable_pq_experiment_signal = false;
-  bool expect_pq_experiment_signal = false;
 
   int argc;
   char **argv;
diff --git a/src/ssl/tls13_both.cc b/src/ssl/tls13_both.cc
index 1a49e4c..ba5719f 100644
--- a/src/ssl/tls13_both.cc
+++ b/src/ssl/tls13_both.cc
@@ -370,8 +370,13 @@
     return false;
   }
 
-  if (!ssl_public_key_verify(ssl, signature, signature_algorithm,
-                             hs->peer_pubkey.get(), input)) {
+  bool sig_ok = ssl_public_key_verify(ssl, signature, signature_algorithm,
+                                      hs->peer_pubkey.get(), input);
+#if defined(BORINGSSL_UNSAFE_FUZZER_MODE)
+  sig_ok = true;
+  ERR_clear_error();
+#endif
+  if (!sig_ok) {
     OPENSSL_PUT_ERROR(SSL, SSL_R_BAD_SIGNATURE);
     ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECRYPT_ERROR);
     return false;
@@ -483,16 +488,15 @@
 
   if (ssl_signing_with_dc(hs)) {
     const CRYPTO_BUFFER *raw = dc->raw.get();
-    CBB child;
     if (!CBB_add_u16(&extensions, TLSEXT_TYPE_delegated_credential) ||
-        !CBB_add_u16_length_prefixed(&extensions, &child) ||
-        !CBB_add_bytes(&child, CRYPTO_BUFFER_data(raw),
+        !CBB_add_u16(&extensions, CRYPTO_BUFFER_len(raw)) ||
+        !CBB_add_bytes(&extensions,
+                       CRYPTO_BUFFER_data(raw),
                        CRYPTO_BUFFER_len(raw)) ||
         !CBB_flush(&extensions)) {
       OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
       return 0;
     }
-    ssl->s3->delegated_credential_used = true;
   }
 
   for (size_t i = 1; i < sk_CRYPTO_BUFFER_num(cert->chain.get()); i++) {
diff --git a/src/ssl/tls13_client.cc b/src/ssl/tls13_client.cc
index f411e19..ac97165 100644
--- a/src/ssl/tls13_client.cc
+++ b/src/ssl/tls13_client.cc
@@ -188,7 +188,6 @@
   hs->tls13_state = state_send_second_client_hello;
   // 0-RTT is rejected if we receive a HelloRetryRequest.
   if (hs->in_early_data) {
-    ssl->s3->early_data_reason = ssl_early_data_hello_retry_request;
     return ssl_hs_early_data_rejected;
   }
   return ssl_hs_ok;
@@ -901,7 +900,7 @@
     return false;
   }
 
-  if (have_early_data_info) {
+  if (have_early_data_info && ssl->enable_early_data) {
     if (!CBS_get_u32(&early_data_info, &session->ticket_max_early_data) ||
         CBS_len(&early_data_info) != 0) {
       ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
diff --git a/src/ssl/tls13_enc.cc b/src/ssl/tls13_enc.cc
index b6a402f..7353561 100644
--- a/src/ssl/tls13_enc.cc
+++ b/src/ssl/tls13_enc.cc
@@ -38,7 +38,6 @@
     return false;
   }
 
-  assert(hs->transcript.DigestLen() <= SSL_MAX_MD_SIZE);
   hs->hash_len = hs->transcript.DigestLen();
 
   // Initialize the secret to the zero key.
@@ -216,6 +215,7 @@
 
 
 static const char kTLS13LabelExporter[] = "exp master";
+static const char kTLS13LabelEarlyExporter[] = "e exp master";
 
 static const char kTLS13LabelClientEarlyTraffic[] = "c e traffic";
 static const char kTLS13LabelClientHandshakeTraffic[] = "c hs traffic";
@@ -229,9 +229,13 @@
                      kTLS13LabelClientEarlyTraffic,
                      strlen(kTLS13LabelClientEarlyTraffic)) ||
       !ssl_log_secret(ssl, "CLIENT_EARLY_TRAFFIC_SECRET",
-                      hs->early_traffic_secret, hs->hash_len)) {
+                      hs->early_traffic_secret, hs->hash_len) ||
+      !derive_secret(hs, ssl->s3->early_exporter_secret, hs->hash_len,
+                     kTLS13LabelEarlyExporter,
+                     strlen(kTLS13LabelEarlyExporter))) {
     return false;
   }
+  ssl->s3->early_exporter_secret_len = hs->hash_len;
 
   if (ssl->quic_method != nullptr) {
     if (ssl->server) {
diff --git a/src/ssl/tls13_server.cc b/src/ssl/tls13_server.cc
index 4ebea5b..caaf0c7 100644
--- a/src/ssl/tls13_server.cc
+++ b/src/ssl/tls13_server.cc
@@ -53,12 +53,6 @@
 
 static const uint8_t kZeroes[EVP_MAX_MD_SIZE] = {0};
 
-// Allow a minute of ticket age skew in either direction. This covers
-// transmission delays in ClientHello and NewSessionTicket, as well as
-// drift between client and server clock rate since the ticket was issued.
-// See RFC 8446, section 8.3.
-static const int32_t kMaxTicketAgeSkewSeconds = 60;
-
 static int resolve_ecdhe_secret(SSL_HANDSHAKE *hs, bool *out_need_retry,
                                 SSL_CLIENT_HELLO *client_hello) {
   SSL *const ssl = hs->ssl;
@@ -103,15 +97,77 @@
   return 1;
 }
 
+// CipherScorer produces a "score" for each possible cipher suite offered by
+// the client.
+class CipherScorer {
+ public:
+  CipherScorer(uint16_t group_id)
+      : aes_is_fine_(EVP_has_aes_hardware()),
+        security_128_is_fine_(group_id != SSL_CURVE_CECPQ2) {}
+
+  typedef std::tuple<bool, bool, bool> Score;
+
+  // MinScore returns a |Score| that will compare less than the score of all
+  // cipher suites.
+  Score MinScore() const {
+    return Score(false, false, false);
+  }
+
+  Score Evaluate(const SSL_CIPHER *a) const {
+    return Score(
+        // Something is always preferable to nothing.
+        true,
+        // Either 128-bit is fine, or 256-bit is preferred.
+        security_128_is_fine_ || a->algorithm_enc != SSL_AES128GCM,
+        // Either AES is fine, or else ChaCha20 is preferred.
+        aes_is_fine_ || a->algorithm_enc == SSL_CHACHA20POLY1305);
+  }
+
+ private:
+  const bool aes_is_fine_;
+  const bool security_128_is_fine_;
+};
+
 static const SSL_CIPHER *choose_tls13_cipher(
     const SSL *ssl, const SSL_CLIENT_HELLO *client_hello, uint16_t group_id) {
+  if (client_hello->cipher_suites_len % 2 != 0) {
+    return nullptr;
+  }
+
   CBS cipher_suites;
   CBS_init(&cipher_suites, client_hello->cipher_suites,
            client_hello->cipher_suites_len);
 
   const uint16_t version = ssl_protocol_version(ssl);
 
-  return ssl_choose_tls13_cipher(cipher_suites, version, group_id);
+  const SSL_CIPHER *best = nullptr;
+  CipherScorer scorer(group_id);
+  CipherScorer::Score best_score = scorer.MinScore();
+
+  while (CBS_len(&cipher_suites) > 0) {
+    uint16_t cipher_suite;
+    if (!CBS_get_u16(&cipher_suites, &cipher_suite)) {
+      return nullptr;
+    }
+
+    // Limit to TLS 1.3 ciphers we know about.
+    const SSL_CIPHER *candidate = SSL_get_cipher_by_value(cipher_suite);
+    if (candidate == nullptr ||
+        SSL_CIPHER_get_min_version(candidate) > version ||
+        SSL_CIPHER_get_max_version(candidate) < version) {
+      continue;
+    }
+
+    const CipherScorer::Score candidate_score = scorer.Evaluate(candidate);
+    // |candidate_score| must be larger to displace the current choice. That way
+    // the client's order controls between ciphers with an equal score.
+    if (candidate_score > best_score) {
+      best = candidate;
+      best_score = candidate_score;
+    }
+  }
+
+  return best;
 }
 
 static bool add_new_session_tickets(SSL_HANDSHAKE *hs, bool *out_sent_tickets) {
@@ -251,15 +307,16 @@
 
 static enum ssl_ticket_aead_result_t select_session(
     SSL_HANDSHAKE *hs, uint8_t *out_alert, UniquePtr<SSL_SESSION> *out_session,
-    int32_t *out_ticket_age_skew, bool *out_offered_ticket,
-    const SSLMessage &msg, const SSL_CLIENT_HELLO *client_hello) {
+    int32_t *out_ticket_age_skew, const SSLMessage &msg,
+    const SSL_CLIENT_HELLO *client_hello) {
   SSL *const ssl = hs->ssl;
-  *out_session = nullptr;
+  *out_session = NULL;
 
+  // Decode the ticket if we agreed on a PSK key exchange mode.
   CBS pre_shared_key;
-  *out_offered_ticket = ssl_client_hello_get_extension(
-      client_hello, &pre_shared_key, TLSEXT_TYPE_pre_shared_key);
-  if (!*out_offered_ticket) {
+  if (!hs->accept_psk_mode ||
+      !ssl_client_hello_get_extension(client_hello, &pre_shared_key,
+                                      TLSEXT_TYPE_pre_shared_key)) {
     return ssl_ticket_aead_ignore_ticket;
   }
 
@@ -280,11 +337,6 @@
     return ssl_ticket_aead_error;
   }
 
-  // If the peer did not offer psk_dhe, ignore the resumption.
-  if (!hs->accept_psk_mode) {
-    return ssl_ticket_aead_ignore_ticket;
-  }
-
   // TLS 1.3 session tickets are renewed separately as part of the
   // NewSessionTicket.
   bool unused_renew;
@@ -354,18 +406,10 @@
 
   uint8_t alert = SSL_AD_DECODE_ERROR;
   UniquePtr<SSL_SESSION> session;
-  bool offered_ticket = false;
-  switch (select_session(hs, &alert, &session, &ssl->s3->ticket_age_skew,
-                         &offered_ticket, msg, &client_hello)) {
+  switch (select_session(hs, &alert, &session, &ssl->s3->ticket_age_skew, msg,
+                         &client_hello)) {
     case ssl_ticket_aead_ignore_ticket:
       assert(!session);
-      if (!ssl->enable_early_data) {
-        ssl->s3->early_data_reason = ssl_early_data_disabled;
-      } else if (!offered_ticket) {
-        ssl->s3->early_data_reason = ssl_early_data_no_session_offered;
-      } else {
-        ssl->s3->early_data_reason = ssl_early_data_session_not_resumed;
-      }
       if (!ssl_get_new_session(hs, 1 /* server */)) {
         ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
         return ssl_hs_error;
@@ -377,32 +421,24 @@
       // a fresh session.
       hs->new_session =
           SSL_SESSION_dup(session.get(), SSL_SESSION_DUP_AUTH_ONLY);
-      if (hs->new_session == nullptr) {
-        ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
-        return ssl_hs_error;
+
+      if (ssl->enable_early_data &&
+          // Early data must be acceptable for this ticket.
+          session->ticket_max_early_data != 0 &&
+          // The client must have offered early data.
+          hs->early_data_offered &&
+          // Channel ID is incompatible with 0-RTT.
+          !ssl->s3->channel_id_valid &&
+          // If Token Binding is negotiated, reject 0-RTT.
+          !ssl->s3->token_binding_negotiated &&
+          // The negotiated ALPN must match the one in the ticket.
+          MakeConstSpan(ssl->s3->alpn_selected) == session->early_alpn) {
+        ssl->s3->early_data_accepted = true;
       }
 
-      if (!ssl->enable_early_data) {
-        ssl->s3->early_data_reason = ssl_early_data_disabled;
-      } else if (session->ticket_max_early_data == 0) {
-        ssl->s3->early_data_reason = ssl_early_data_unsupported_for_session;
-      } else if (!hs->early_data_offered) {
-        ssl->s3->early_data_reason = ssl_early_data_peer_declined;
-      } else if (ssl->s3->channel_id_valid) {
-          // Channel ID is incompatible with 0-RTT.
-        ssl->s3->early_data_reason = ssl_early_data_channel_id;
-      } else if (ssl->s3->token_binding_negotiated) {
-          // Token Binding is incompatible with 0-RTT.
-        ssl->s3->early_data_reason = ssl_early_data_token_binding;
-      } else if (MakeConstSpan(ssl->s3->alpn_selected) != session->early_alpn) {
-        // The negotiated ALPN must match the one in the ticket.
-        ssl->s3->early_data_reason = ssl_early_data_alpn_mismatch;
-      } else if (ssl->s3->ticket_age_skew < -kMaxTicketAgeSkewSeconds ||
-                 kMaxTicketAgeSkewSeconds < ssl->s3->ticket_age_skew) {
-        ssl->s3->early_data_reason = ssl_early_data_ticket_age_skew;
-      } else {
-        ssl->s3->early_data_reason = ssl_early_data_accepted;
-        ssl->s3->early_data_accepted = true;
+      if (hs->new_session == NULL) {
+        ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
+        return ssl_hs_error;
       }
 
       ssl->s3->session_reused = true;
@@ -463,10 +499,7 @@
   bool need_retry;
   if (!resolve_ecdhe_secret(hs, &need_retry, &client_hello)) {
     if (need_retry) {
-      if (ssl->s3->early_data_accepted) {
-        ssl->s3->early_data_reason = ssl_early_data_hello_retry_request;
-        ssl->s3->early_data_accepted = false;
-      }
+      ssl->s3->early_data_accepted = false;
       ssl->s3->skip_early_data = true;
       ssl->method->next_message(ssl);
       if (!hs->transcript.UpdateForHelloRetryRequest()) {
@@ -917,15 +950,7 @@
   }
 
   hs->tls13_state = state_done;
-  // In TLS 1.3, the NewSessionTicket isn't flushed until the server performs a
-  // write, to prevent a non-reading client from causing the server to hang in
-  // the case of a small server write buffer. Consumers which don't write data
-  // to the client will need to do a zero-byte write if they wish to flush the
-  // tickets.
-  if (hs->ssl->ctx->quic_method != nullptr && sent_tickets) {
-    return ssl_hs_flush;
-  }
-  return ssl_hs_ok;
+  return sent_tickets ? ssl_hs_flush : ssl_hs_ok;
 }
 
 enum ssl_hs_wait_t tls13_server_handshake(SSL_HANDSHAKE *hs) {
diff --git a/src/ssl/tls_method.cc b/src/ssl/tls_method.cc
index 95fac4d..bc9410b 100644
--- a/src/ssl/tls_method.cc
+++ b/src/ssl/tls_method.cc
@@ -125,9 +125,9 @@
     ssl3_set_write_state,
 };
 
-static bool ssl_noop_x509_check_client_CA_names(
+static int ssl_noop_x509_check_client_CA_names(
     STACK_OF(CRYPTO_BUFFER) *names) {
-  return true;
+  return 1;
 }
 
 static void ssl_noop_x509_clear(CERT *cert) {}
@@ -135,29 +135,29 @@
 static void ssl_noop_x509_dup(CERT *new_cert, const CERT *cert) {}
 static void ssl_noop_x509_flush_cached_leaf(CERT *cert) {}
 static void ssl_noop_x509_flush_cached_chain(CERT *cert) {}
-static bool ssl_noop_x509_session_cache_objects(SSL_SESSION *sess) {
-  return true;
+static int ssl_noop_x509_session_cache_objects(SSL_SESSION *sess) {
+  return 1;
 }
-static bool ssl_noop_x509_session_dup(SSL_SESSION *new_session,
-                                      const SSL_SESSION *session) {
-  return true;
+static int ssl_noop_x509_session_dup(SSL_SESSION *new_session,
+                                       const SSL_SESSION *session) {
+  return 1;
 }
 static void ssl_noop_x509_session_clear(SSL_SESSION *session) {}
-static bool ssl_noop_x509_session_verify_cert_chain(SSL_SESSION *session,
-                                                    SSL_HANDSHAKE *hs,
-                                                    uint8_t *out_alert) {
-  return false;
+static int ssl_noop_x509_session_verify_cert_chain(SSL_SESSION *session,
+                                                   SSL_HANDSHAKE *hs,
+                                                   uint8_t *out_alert) {
+  return 0;
 }
 
 static void ssl_noop_x509_hs_flush_cached_ca_names(SSL_HANDSHAKE *hs) {}
-static bool ssl_noop_x509_ssl_new(SSL_HANDSHAKE *hs) { return true; }
+static int ssl_noop_x509_ssl_new(SSL_HANDSHAKE *hs) { return 1; }
 static void ssl_noop_x509_ssl_config_free(SSL_CONFIG *cfg) {}
 static void ssl_noop_x509_ssl_flush_cached_client_CA(SSL_CONFIG *cfg) {}
-static bool ssl_noop_x509_ssl_auto_chain_if_needed(SSL_HANDSHAKE *hs) {
-  return true;
+static int ssl_noop_x509_ssl_auto_chain_if_needed(SSL_HANDSHAKE *hs) {
+  return 1;
 }
-static bool ssl_noop_x509_ssl_ctx_new(SSL_CTX *ctx) { return true; }
-static void ssl_noop_x509_ssl_ctx_free(SSL_CTX *ctx) {}
+static int ssl_noop_x509_ssl_ctx_new(SSL_CTX *ctx) { return 1; }
+static void ssl_noop_x509_ssl_ctx_free(SSL_CTX *ctx) { }
 static void ssl_noop_x509_ssl_ctx_flush_cached_client_CA(SSL_CTX *ctx) {}
 
 const SSL_X509_METHOD ssl_noop_x509_method = {
diff --git a/src/third_party/fiat/curve25519_32.h b/src/third_party/fiat/curve25519_32.h
index 5377242..820a5c9 100644
--- a/src/third_party/fiat/curve25519_32.h
+++ b/src/third_party/fiat/curve25519_32.h
@@ -90,13 +90,7 @@
 static void fiat_25519_cmovznz_u32(uint32_t* out1, fiat_25519_uint1 arg1, uint32_t arg2, uint32_t arg3) {
   fiat_25519_uint1 x1 = (!(!arg1));
   uint32_t x2 = ((fiat_25519_int1)(0x0 - x1) & UINT32_C(0xffffffff));
-  // Note this line has been patched from the synthesized code to add value
-  // barriers.
-  //
-  // Clang recognizes this pattern as a select. While it usually transforms it
-  // to a cmov, it sometimes further transforms it into a branch, which we do
-  // not want.
-  uint32_t x3 = ((value_barrier_u32(x2) & arg3) | (value_barrier_u32(~x2) & arg2));
+  uint32_t x3 = ((x2 & arg3) | ((~x2) & arg2));
   *out1 = x3;
 }
 
diff --git a/src/third_party/fiat/curve25519_64.h b/src/third_party/fiat/curve25519_64.h
index 7c31ff9..23bf361 100644
--- a/src/third_party/fiat/curve25519_64.h
+++ b/src/third_party/fiat/curve25519_64.h
@@ -58,13 +58,7 @@
 static void fiat_25519_cmovznz_u64(uint64_t* out1, fiat_25519_uint1 arg1, uint64_t arg2, uint64_t arg3) {
   fiat_25519_uint1 x1 = (!(!arg1));
   uint64_t x2 = ((fiat_25519_int1)(0x0 - x1) & UINT64_C(0xffffffffffffffff));
-  // Note this line has been patched from the synthesized code to add value
-  // barriers.
-  //
-  // Clang recognizes this pattern as a select. While it usually transforms it
-  // to a cmov, it sometimes further transforms it into a branch, which we do
-  // not want.
-  uint64_t x3 = ((value_barrier_u64(x2) & arg3) | (value_barrier_u64(~x2) & arg2));
+  uint64_t x3 = ((x2 & arg3) | ((~x2) & arg2));
   *out1 = x3;
 }
 
diff --git a/src/third_party/fiat/p256.c b/src/third_party/fiat/p256.c
index 23ec71f..ebc5de6 100644
--- a/src/third_party/fiat/p256.c
+++ b/src/third_party/fiat/p256.c
@@ -321,10 +321,7 @@
 
   limb_t yneq = fe_nz(r);
 
-  limb_t is_nontrivial_double = constant_time_is_zero_w(xneq | yneq) &
-                                ~constant_time_is_zero_w(z1nz) &
-                                ~constant_time_is_zero_w(z2nz);
-  if (is_nontrivial_double) {
+  if (!xneq && !yneq && z1nz && z2nz) {
     point_double(x3, y3, z3, x1, y1, z1);
     return;
   }
@@ -734,6 +731,98 @@
   return (in[i >> 3] >> (i & 7)) & 1;
 }
 
+// Interleaved point multiplication using precomputed point multiples: The
+// small point multiples 0*P, 1*P, ..., 17*P are in p_pre_comp, the scalar
+// in p_scalar, if non-NULL. If g_scalar is non-NULL, we also add this multiple
+// of the generator, using certain (large) precomputed multiples in g_pre_comp.
+// Output point (X, Y, Z) is stored in x_out, y_out, z_out.
+static void batch_mul(fe x_out, fe y_out, fe z_out,
+                      const uint8_t *p_scalar, const uint8_t *g_scalar,
+                      const fe p_pre_comp[17][3]) {
+  // set nq to the point at infinity
+  fe nq[3] = {{0},{0},{0}}, ftmp, tmp[3];
+  uint64_t bits;
+  uint8_t sign, digit;
+
+  // Loop over both scalars msb-to-lsb, interleaving additions of multiples
+  // of the generator (two in each of the last 32 rounds) and additions of p
+  // (every 5th round).
+
+  int skip = 1;  // save two point operations in the first round
+  size_t i = p_scalar != NULL ? 255 : 31;
+  for (;;) {
+    // double
+    if (!skip) {
+      point_double(nq[0], nq[1], nq[2], nq[0], nq[1], nq[2]);
+    }
+
+    // add multiples of the generator
+    if (g_scalar != NULL && i <= 31) {
+      // first, look 32 bits upwards
+      bits = get_bit(g_scalar, i + 224) << 3;
+      bits |= get_bit(g_scalar, i + 160) << 2;
+      bits |= get_bit(g_scalar, i + 96) << 1;
+      bits |= get_bit(g_scalar, i + 32);
+      // select the point to add, in constant time
+      select_point(bits, 16, g_pre_comp[1], tmp);
+
+      if (!skip) {
+        point_add(nq[0], nq[1], nq[2], nq[0], nq[1], nq[2], 1 /* mixed */,
+                  tmp[0], tmp[1], tmp[2]);
+      } else {
+        fe_copy(nq[0], tmp[0]);
+        fe_copy(nq[1], tmp[1]);
+        fe_copy(nq[2], tmp[2]);
+        skip = 0;
+      }
+
+      // second, look at the current position
+      bits = get_bit(g_scalar, i + 192) << 3;
+      bits |= get_bit(g_scalar, i + 128) << 2;
+      bits |= get_bit(g_scalar, i + 64) << 1;
+      bits |= get_bit(g_scalar, i);
+      // select the point to add, in constant time
+      select_point(bits, 16, g_pre_comp[0], tmp);
+      point_add(nq[0], nq[1], nq[2], nq[0], nq[1], nq[2], 1 /* mixed */, tmp[0],
+                tmp[1], tmp[2]);
+    }
+
+    // do other additions every 5 doublings
+    if (p_scalar != NULL && i % 5 == 0) {
+      bits = get_bit(p_scalar, i + 4) << 5;
+      bits |= get_bit(p_scalar, i + 3) << 4;
+      bits |= get_bit(p_scalar, i + 2) << 3;
+      bits |= get_bit(p_scalar, i + 1) << 2;
+      bits |= get_bit(p_scalar, i) << 1;
+      bits |= get_bit(p_scalar, i - 1);
+      ec_GFp_nistp_recode_scalar_bits(&sign, &digit, bits);
+
+      // select the point to add or subtract, in constant time.
+      select_point(digit, 17, p_pre_comp, tmp);
+      fe_opp(ftmp, tmp[1]);  // (X, -Y, Z) is the negative point.
+      fe_cmovznz(tmp[1], sign, tmp[1], ftmp);
+
+      if (!skip) {
+        point_add(nq[0], nq[1], nq[2], nq[0], nq[1], nq[2], 0 /* mixed */,
+                  tmp[0], tmp[1], tmp[2]);
+      } else {
+        fe_copy(nq[0], tmp[0]);
+        fe_copy(nq[1], tmp[1]);
+        fe_copy(nq[2], tmp[2]);
+        skip = 0;
+      }
+    }
+
+    if (i == 0) {
+      break;
+    }
+    --i;
+  }
+  fe_copy(x_out, nq[0]);
+  fe_copy(y_out, nq[1]);
+  fe_copy(z_out, nq[2]);
+}
+
 // OPENSSL EC_METHOD FUNCTIONS
 
 // Takes the Jacobian coordinates (X, Y, Z) of a point and returns (X', Y') =
@@ -801,116 +890,45 @@
   fe_to_generic(&r->Z, z);
 }
 
-static void ec_GFp_nistp256_point_mul(const EC_GROUP *group, EC_RAW_POINT *r,
-                                      const EC_RAW_POINT *p,
-                                      const EC_SCALAR *scalar) {
+static void ec_GFp_nistp256_points_mul(const EC_GROUP *group, EC_RAW_POINT *r,
+                                       const EC_SCALAR *g_scalar,
+                                       const EC_RAW_POINT *p,
+                                       const EC_SCALAR *p_scalar) {
   fe p_pre_comp[17][3];
-  OPENSSL_memset(&p_pre_comp, 0, sizeof(p_pre_comp));
-  // Precompute multiples.
-  fe_from_generic(p_pre_comp[1][0], &p->X);
-  fe_from_generic(p_pre_comp[1][1], &p->Y);
-  fe_from_generic(p_pre_comp[1][2], &p->Z);
-  for (size_t j = 2; j <= 16; ++j) {
-    if (j & 1) {
-      point_add(p_pre_comp[j][0], p_pre_comp[j][1], p_pre_comp[j][2],
-                p_pre_comp[1][0], p_pre_comp[1][1], p_pre_comp[1][2], 0,
-                p_pre_comp[j - 1][0], p_pre_comp[j - 1][1],
-                p_pre_comp[j - 1][2]);
-    } else {
-      point_double(p_pre_comp[j][0], p_pre_comp[j][1], p_pre_comp[j][2],
-                   p_pre_comp[j / 2][0], p_pre_comp[j / 2][1],
-                   p_pre_comp[j / 2][2]);
-    }
-  }
+  fe x_out, y_out, z_out;
 
-  // Set nq to the point at infinity.
-  fe nq[3] = {{0}, {0}, {0}}, ftmp, tmp[3];
-
-  // Loop over |scalar| msb-to-lsb, incorporating |p_pre_comp| every 5th round.
-  int skip = 1;  // Save two point operations in the first round.
-  for (size_t i = 255; i < 256; i--) {
-    // double
-    if (!skip) {
-      point_double(nq[0], nq[1], nq[2], nq[0], nq[1], nq[2]);
-    }
-
-    // do other additions every 5 doublings
-    if (i % 5 == 0) {
-      uint64_t bits = get_bit(scalar->bytes, i + 4) << 5;
-      bits |= get_bit(scalar->bytes, i + 3) << 4;
-      bits |= get_bit(scalar->bytes, i + 2) << 3;
-      bits |= get_bit(scalar->bytes, i + 1) << 2;
-      bits |= get_bit(scalar->bytes, i) << 1;
-      bits |= get_bit(scalar->bytes, i - 1);
-      uint8_t sign, digit;
-      ec_GFp_nistp_recode_scalar_bits(&sign, &digit, bits);
-
-      // select the point to add or subtract, in constant time.
-      select_point(digit, 17, (const fe(*)[3])p_pre_comp, tmp);
-      fe_opp(ftmp, tmp[1]);  // (X, -Y, Z) is the negative point.
-      fe_cmovznz(tmp[1], sign, tmp[1], ftmp);
-
-      if (!skip) {
-        point_add(nq[0], nq[1], nq[2], nq[0], nq[1], nq[2], 0 /* mixed */,
-                  tmp[0], tmp[1], tmp[2]);
+  if (p != NULL && p_scalar != NULL) {
+    // We treat NULL scalars as 0, and NULL points as points at infinity, i.e.,
+    // they contribute nothing to the linear combination.
+    OPENSSL_memset(&p_pre_comp, 0, sizeof(p_pre_comp));
+    // Precompute multiples.
+    fe_from_generic(p_pre_comp[1][0], &p->X);
+    fe_from_generic(p_pre_comp[1][1], &p->Y);
+    fe_from_generic(p_pre_comp[1][2], &p->Z);
+    for (size_t j = 2; j <= 16; ++j) {
+      if (j & 1) {
+        point_add(p_pre_comp[j][0], p_pre_comp[j][1],
+                  p_pre_comp[j][2], p_pre_comp[1][0],
+                  p_pre_comp[1][1], p_pre_comp[1][2],
+                  0,
+                  p_pre_comp[j - 1][0], p_pre_comp[j - 1][1],
+                  p_pre_comp[j - 1][2]);
       } else {
-        fe_copy(nq[0], tmp[0]);
-        fe_copy(nq[1], tmp[1]);
-        fe_copy(nq[2], tmp[2]);
-        skip = 0;
+        point_double(p_pre_comp[j][0], p_pre_comp[j][1],
+                     p_pre_comp[j][2], p_pre_comp[j / 2][0],
+                     p_pre_comp[j / 2][1], p_pre_comp[j / 2][2]);
       }
     }
   }
 
-  fe_to_generic(&r->X, nq[0]);
-  fe_to_generic(&r->Y, nq[1]);
-  fe_to_generic(&r->Z, nq[2]);
-}
+  batch_mul(x_out, y_out, z_out,
+            (p != NULL && p_scalar != NULL) ? p_scalar->bytes : NULL,
+            g_scalar != NULL ? g_scalar->bytes : NULL,
+            (const fe (*) [3])p_pre_comp);
 
-static void ec_GFp_nistp256_point_mul_base(const EC_GROUP *group,
-                                           EC_RAW_POINT *r,
-                                           const EC_SCALAR *scalar) {
-  // Set nq to the point at infinity.
-  fe nq[3] = {{0}, {0}, {0}}, tmp[3];
-
-  int skip = 1;  // Save two point operations in the first round.
-  for (size_t i = 31; i < 32; i--) {
-    if (!skip) {
-      point_double(nq[0], nq[1], nq[2], nq[0], nq[1], nq[2]);
-    }
-
-    // First, look 32 bits upwards.
-    uint64_t bits = get_bit(scalar->bytes, i + 224) << 3;
-    bits |= get_bit(scalar->bytes, i + 160) << 2;
-    bits |= get_bit(scalar->bytes, i + 96) << 1;
-    bits |= get_bit(scalar->bytes, i + 32);
-    // Select the point to add, in constant time.
-    select_point(bits, 16, g_pre_comp[1], tmp);
-
-    if (!skip) {
-      point_add(nq[0], nq[1], nq[2], nq[0], nq[1], nq[2], 1 /* mixed */, tmp[0],
-                tmp[1], tmp[2]);
-    } else {
-      fe_copy(nq[0], tmp[0]);
-      fe_copy(nq[1], tmp[1]);
-      fe_copy(nq[2], tmp[2]);
-      skip = 0;
-    }
-
-    // Second, look at the current position.
-    bits = get_bit(scalar->bytes, i + 192) << 3;
-    bits |= get_bit(scalar->bytes, i + 128) << 2;
-    bits |= get_bit(scalar->bytes, i + 64) << 1;
-    bits |= get_bit(scalar->bytes, i);
-    // Select the point to add, in constant time.
-    select_point(bits, 16, g_pre_comp[0], tmp);
-    point_add(nq[0], nq[1], nq[2], nq[0], nq[1], nq[2], 1 /* mixed */, tmp[0],
-              tmp[1], tmp[2]);
-  }
-
-  fe_to_generic(&r->X, nq[0]);
-  fe_to_generic(&r->Y, nq[1]);
-  fe_to_generic(&r->Z, nq[2]);
+  fe_to_generic(&r->X, x_out);
+  fe_to_generic(&r->Y, y_out);
+  fe_to_generic(&r->Z, z_out);
 }
 
 static void ec_GFp_nistp256_point_mul_public(const EC_GROUP *group,
@@ -1048,8 +1066,7 @@
     ec_GFp_nistp256_point_get_affine_coordinates;
   out->add = ec_GFp_nistp256_add;
   out->dbl = ec_GFp_nistp256_dbl;
-  out->mul = ec_GFp_nistp256_point_mul;
-  out->mul_base = ec_GFp_nistp256_point_mul_base;
+  out->mul = ec_GFp_nistp256_points_mul;
   out->mul_public = ec_GFp_nistp256_point_mul_public;
   out->felem_mul = ec_GFp_mont_felem_mul;
   out->felem_sqr = ec_GFp_mont_felem_sqr;
diff --git a/src/third_party/fiat/p256_32.h b/src/third_party/fiat/p256_32.h
index 638eb5d..faaa0b0 100644
--- a/src/third_party/fiat/p256_32.h
+++ b/src/third_party/fiat/p256_32.h
@@ -77,13 +77,7 @@
 static void fiat_p256_cmovznz_u32(uint32_t* out1, fiat_p256_uint1 arg1, uint32_t arg2, uint32_t arg3) {
   fiat_p256_uint1 x1 = (!(!arg1));
   uint32_t x2 = ((fiat_p256_int1)(0x0 - x1) & UINT32_C(0xffffffff));
-  // Note this line has been patched from the synthesized code to add value
-  // barriers.
-  //
-  // Clang recognizes this pattern as a select. While it usually transforms it
-  // to a cmov, it sometimes further transforms it into a branch, which we do
-  // not want.
-  uint32_t x3 = ((value_barrier_u32(x2) & arg3) | (value_barrier_u32(~x2) & arg2));
+  uint32_t x3 = ((x2 & arg3) | ((~x2) & arg2));
   *out1 = x3;
 }
 
diff --git a/src/third_party/fiat/p256_64.h b/src/third_party/fiat/p256_64.h
index 7d97e0a..8e449c6 100644
--- a/src/third_party/fiat/p256_64.h
+++ b/src/third_party/fiat/p256_64.h
@@ -79,13 +79,7 @@
 static void fiat_p256_cmovznz_u64(uint64_t* out1, fiat_p256_uint1 arg1, uint64_t arg2, uint64_t arg3) {
   fiat_p256_uint1 x1 = (!(!arg1));
   uint64_t x2 = ((fiat_p256_int1)(0x0 - x1) & UINT64_C(0xffffffffffffffff));
-  // Note this line has been patched from the synthesized code to add value
-  // barriers.
-  //
-  // Clang recognizes this pattern as a select. While it usually transforms it
-  // to a cmov, it sometimes further transforms it into a branch, which we do
-  // not want.
-  uint64_t x3 = ((value_barrier_u64(x2) & arg3) | (value_barrier_u64(~x2) & arg2));
+  uint64_t x3 = ((x2 & arg3) | ((~x2) & arg2));
   *out1 = x3;
 }
 
diff --git a/src/third_party/sike/LICENSE b/src/third_party/sike/LICENSE
deleted file mode 100644
index 5cf7c8d..0000000
--- a/src/third_party/sike/LICENSE
+++ /dev/null
@@ -1,21 +0,0 @@
-MIT License
-
-Copyright (c) Microsoft Corporation. All rights reserved.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE
diff --git a/src/third_party/sike/asm/fp-armv8.pl b/src/third_party/sike/asm/fp-armv8.pl
deleted file mode 100644
index ce19d80..0000000
--- a/src/third_party/sike/asm/fp-armv8.pl
+++ /dev/null
@@ -1,915 +0,0 @@
-#! /usr/bin/env perl
-#
-# April 2019
-#
-# Abstract: field arithmetic in aarch64 assembly for SIDH/p434
-
-$flavour = shift;
-$output  = shift;
-if ($flavour =~ /\./) { $output = $flavour; undef $flavour; }
-
-$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
-( $xlate="${dir}arm-xlate.pl" and -f $xlate ) or
-( $xlate="${dir}../../../crypto/perlasm/arm-xlate.pl" and -f $xlate) or
-die "can't locate arm-xlate.pl";
-
-open OUT,"| \"$^X\" \"$xlate\" $flavour \"$output\"";
-*STDOUT=*OUT;
-
-$PREFIX="sike";
-
-$code.=<<___;
-.section  .rodata
-
-# p434 x 2
-.Lp434x2:
-    .quad  0xFFFFFFFFFFFFFFFE, 0xFFFFFFFFFFFFFFFF
-    .quad  0xFB82ECF5C5FFFFFF, 0xF78CB8F062B15D47
-    .quad  0xD9F8BFAD038A40AC, 0x0004683E4E2EE688
-
-# p434 + 1
-.Lp434p1:
-    .quad  0xFDC1767AE3000000, 0x7BC65C783158AEA3
-    .quad  0x6CFC5FD681C52056, 0x0002341F27177344
-
-.text
-___
-
-# Computes C0-C2 = A0 * (B0-B1)
-# Inputs remain intact
-sub mul64x128 {
-    my ($A0,$B0,$B1,$C0,$C1,$C2,$T0,$T1)=@_;
-    my $body=<<___;
-        mul     $T1, $A0, $B0
-        umulh   $B0, $A0, $B0
-        adds    $C0, $C0, $C2
-        adc     $C1, $C1, xzr
-
-        mul     $T0, $A0, $B1
-        umulh   $B1, $A0, $B1
-        adds    $C0, $C0, $T1
-        adcs    $C1, $C1, $B0
-        adc     $C2, xzr, xzr
-
-        adds    $C1, $C1, $T0
-        adc     $C2, $C2, $B1
-___
-    return $body;
-}
-
-# Computes C0-C4 = A0 * (B0-B3)
-# Inputs remain intact
-sub mul64x256 {
-    my ($A0,$B0,$B1,$B2,$B3,$C0,$C1,$C2,$C3,$C4,$T0,$T1,$T2)=@_;
-    my $body=<<___;
-        mul     $C0, $A0, $B0    // C0
-        umulh   $T0, $A0, $B0
-
-        mul     $C1, $A0, $B1
-        umulh   $T1, $A0, $B1
-        adds    $C1, $C1, $T0    // C1
-        adc     $T0, xzr, xzr
-
-        mul     $C2, $A0, $B2
-        umulh   $T2, $A0, $B2
-        adds    $T1, $T0, $T1
-        adcs    $C2, $C2, $T1    // C2
-        adc     $T0, xzr, xzr
-
-        mul     $C3, $A0, $B3
-        umulh   $C4, $A0, $B3
-        adds    $T2, $T0, $T2
-        adcs    $C3, $C3, $T2    // C3
-        adc     $C4, $C4, xzr    // C4
-___
-    return $body;
-}
-
-# Computes C0-C4 = (A0-A1) * (B0-B3)
-# Inputs remain intact
-sub mul128x256 {
-    my ($A0,$A1,$B0,$B1,$B2,$B3,$C0,$C1,$C2,$C3,$C4,$C5,$T0,$T1,$T2,$T3)=@_;
-    my $body=<<___;
-        mul     $C0, $A0, $B0  // C0
-        umulh   $C3, $A0, $B0
-
-        mul     $C1, $A0, $B1
-        umulh   $C2, $A0, $B1
-
-        mul     $T0, $A1, $B0
-        umulh   $T1, $A1, $B0
-        adds    $C1, $C1, $C3
-        adc     $C2, $C2, xzr
-
-        mul     $T2, $A0, $B2
-        umulh   $T3, $A0, $B2
-        adds    $C1, $C1, $T0  // C1
-        adcs    $C2, $C2, $T1
-        adc     $C3, xzr, xzr
-
-        mul     $T0, $A1, $B1
-        umulh   $T1, $A1, $B1
-        adds    $C2, $C2, $T2
-        adcs    $C3, $C3, $T3
-        adc     $C4, xzr, xzr
-
-        mul     $T2, $A0, $B3
-        umulh   $T3, $A0, $B3
-        adds    $C2, $C2, $T0  // C2
-        adcs    $C3, $C3, $T1
-        adc     $C4, $C4, xzr
-
-        mul     $T0, $A1, $B2
-        umulh   $T1, $A1, $B2
-        adds    $C3, $C3, $T2
-        adcs    $C4, $C4, $T3
-        adc     $C5, xzr, xzr
-
-        mul     $T2, $A1, $B3
-        umulh   $T3, $A1, $B3
-        adds    $C3, $C3, $T0  // C3
-        adcs    $C4, $C4, $T1
-        adc     $C5, $C5, xzr
-        adds    $C4, $C4, $T2  // C4
-        adc     $C5, $C5, $T3  // C5
-
-___
-    return $body;
-}
-
-# Computes C0-C5 = (A0-A2) * (B0-B2)
-# Inputs remain intact
-sub mul192 {
-    my ($A0,$A1,$A2,$B0,$B1,$B2,$C0,$C1,$C2,$C3,$C4,$C5,$T0,$T1,$T2,$T3)=@_;
-    my $body=<<___;
-
-        // A0 * B0
-        mul     $C0, $A0, $B0  // C0
-        umulh   $C3, $A0, $B0
-
-        // A0 * B1
-        mul     $C1, $A0, $B1
-        umulh   $C2, $A0, $B1
-
-        // A1 * B0
-        mul     $T0, $A1, $B0
-        umulh   $T1, $A1, $B0
-        adds    $C1, $C1, $C3
-        adc     $C2, $C2, xzr
-
-        // A0 * B2
-        mul     $T2, $A0, $B2
-        umulh   $T3, $A0, $B2
-        adds    $C1, $C1, $T0  // C1
-        adcs    $C2, $C2, $T1
-        adc     $C3, xzr, xzr
-
-        // A2 * B0
-        mul     $T0, $A2, $B0
-        umulh   $C4, $A2, $B0
-        adds    $C2, $C2, $T2
-        adcs    $C3, $C3, $C4
-        adc     $C4, xzr, xzr
-
-        // A1 * B1
-        mul     $T2, $A1, $B1
-        umulh   $T1, $A1, $B1
-        adds    $C2, $C2, $T0
-        adcs    $C3, $C3, $T3
-        adc     $C4, $C4, xzr
-
-        // A1 * B2
-        mul     $T0, $A1, $B2
-        umulh   $T3, $A1, $B2
-        adds    $C2, $C2, $T2 // C2
-        adcs    $C3, $C3, $T1
-        adc     $C4, $C4, xzr
-
-        // A2 * B1
-        mul     $T2, $A2, $B1
-        umulh   $T1, $A2, $B1
-        adds    $C3, $C3, $T0
-        adcs    $C4, $C4, $T3
-        adc     $C5, xzr, xzr
-
-        // A2 * B2
-        mul     $T0, $A2, $B2
-        umulh   $T3, $A2, $B2
-        adds    $C3, $C3, $T2 // C3
-        adcs    $C4, $C4, $T1
-        adc     $C5, $C5, xzr
-
-        adds    $C4, $C4, $T0 // C4
-        adc     $C5, $C5, $T3 // C5
-___
-    return $body;
-}
-sub mul256_karatsuba {
-    my ($M,$A0,$A1,$A2,$A3,$B0,$B1,$B2,$B3,$C0,$C1,$C2,$C3,$C4,$C5,$C6,$C7,$T0,$T1)=@_;
-    # (AH+AL) x (BH+BL), low part
-    my $mul_low=&mul64x128($A1, $C6, $T1, $C3, $C4, $C5, $C7, $A0);
-    # AL x BL
-    my $mul_albl=&mul64x128($A1, $B0, $B1, $C1, $T1, $C7, $C6, $A0);
-    # AH x BH
-    my $mul_ahbh=&mul64x128($A3, $B2, $B3, $A1, $C6, $B0, $B1, $A2);
-    my $body=<<___;
-        // A0-A1 <- AH + AL, T0 <- mask
-        adds    $A0, $A0, $A2
-        adcs    $A1, $A1, $A3
-        adc     $T0, xzr, xzr
-
-        // C6, T1 <- BH + BL, C7 <- mask
-        adds    $C6, $B0, $B2
-        adcs    $T1, $B1, $B3
-        adc     $C7, xzr, xzr
-
-        // C0-C1 <- masked (BH + BL)
-        sub     $C2, xzr, $T0
-        sub     $C3, xzr, $C7
-        and     $C0, $C6, $C2
-        and     $C1, $T1, $C2
-
-        // C4-C5 <- masked (AH + AL), T0 <- combined carry
-        and     $C4, $A0, $C3
-        and     $C5, $A1, $C3
-        mul     $C2, $A0, $C6
-        mul     $C3, $A0, $T1
-        and     $T0, $T0, $C7
-
-        // C0-C1, T0 <- (AH+AL) x (BH+BL), part 1
-        adds    $C0, $C4, $C0
-        umulh   $C4, $A0, $T1
-        adcs    $C1, $C5, $C1
-        umulh   $C5, $A0, $C6
-        adc     $T0, $T0, xzr
-
-        // C2-C5 <- (AH+AL) x (BH+BL), low part
-        $mul_low
-        ldp     $A0, $A1, [$M,#0]
-
-        // C2-C5, T0 <- (AH+AL) x (BH+BL), final part
-        adds    $C4, $C0, $C4
-        umulh   $C7, $A0, $B0
-        umulh   $T1, $A0, $B1
-        adcs    $C5, $C1, $C5
-        mul     $C0, $A0, $B0
-        mul     $C1, $A0, $B1
-        adc     $T0, $T0, xzr
-
-        // C0-C1, T1, C7 <- AL x BL
-        $mul_albl
-
-        // C2-C5, T0 <- (AH+AL) x (BH+BL) - ALxBL
-        mul     $A0, $A2, $B2
-        umulh   $B0, $A2, $B2
-        subs    $C2, $C2, $C0
-        sbcs    $C3, $C3, $C1
-        sbcs    $C4, $C4, $T1
-        mul     $A1, $A2, $B3
-        umulh   $C6, $A2, $B3
-        sbcs    $C5, $C5, $C7
-        sbc     $T0, $T0, xzr
-
-        // A0, A1, C6, B0 <- AH x BH
-        $mul_ahbh
-
-        // C2-C5, T0 <- (AH+AL) x (BH+BL) - ALxBL - AHxBH
-        subs    $C2, $C2, $A0
-        sbcs    $C3, $C3, $A1
-        sbcs    $C4, $C4, $C6
-        sbcs    $C5, $C5, $B0
-        sbc     $T0, $T0, xzr
-
-        adds    $C2, $C2, $T1
-        adcs    $C3, $C3, $C7
-        adcs    $C4, $C4, $A0
-        adcs    $C5, $C5, $A1
-        adcs    $C6, $T0, $C6
-        adc     $C7, $B0, xzr
-___
-    return $body;
-}
-
-# 512-bit integer multiplication using Karatsuba (two levels),
-# Comba (lower level).
-# Operation: c [x2] = a [x0] * b [x1]
-sub mul {
-    # (AH+AL) x (BH+BL), low part
-    my $mul_kc_low=&mul256_karatsuba(
-        "x2",                                           # M0
-        "x3","x4","x5","x6",                            # A0-A3
-        "x10","x11","x12","x13",                        # B0-B3
-        "x8","x9","x19","x20","x21","x22","x23","x24",  # C0-C7
-        "x25","x26");                                   # TMP
-    # AL x BL
-    my $mul_albl=&mul256_karatsuba(
-        "x0",                                           # M0f
-        "x3","x4","x5","x6",                            # A0-A3
-        "x10","x11","x12","x13",                        # B0-B3
-        "x21","x22","x23","x24","x25","x26","x27","x28",# C0-C7
-        "x8","x9");                                     # TMP
-    # AH x BH
-    my $mul_ahbh=&mul192(
-        "x3","x4","x5",                                 # A0-A2
-        "x10","x11","x12",                              # B0-B2
-        "x21","x22","x23","x24","x25","x26",            # C0-C5
-        "x8","x9","x27","x28");                         # TMP
-
-    my $body=<<___;
-        .global ${PREFIX}_mpmul
-        .align 4
-        ${PREFIX}_mpmul:
-        stp     x29, x30, [sp,#-96]!
-        add     x29, sp, #0
-        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]
-
-        ldp      x3,  x4, [x0]
-        ldp      x5,  x6, [x0,#16]
-        ldp      x7,  x8, [x0,#32]
-        ldr      x9,      [x0,#48]
-        ldp     x10, x11, [x1,#0]
-        ldp     x12, x13, [x1,#16]
-        ldp     x14, x15, [x1,#32]
-        ldr     x16,      [x1,#48]
-
-        // x3-x7 <- AH + AL, x7 <- carry
-        adds    x3, x3, x7
-        adcs    x4, x4, x8
-        adcs    x5, x5, x9
-        adcs    x6, x6, xzr
-        adc     x7, xzr, xzr
-
-        // x10-x13 <- BH + BL, x8 <- carry
-        adds    x10, x10, x14
-        adcs    x11, x11, x15
-        adcs    x12, x12, x16
-        adcs    x13, x13, xzr
-        adc     x8, xzr, xzr
-
-        // x9 <- combined carry
-        and      x9, x7, x8
-        // x7-x8 <- mask
-        sub      x7, xzr, x7
-        sub      x8, xzr, x8
-
-        // x15-x19 <- masked (BH + BL)
-        and     x14, x10, x7
-        and     x15, x11, x7
-        and     x16, x12, x7
-        and     x17, x13, x7
-
-        // x20-x23 <- masked (AH + AL)
-        and     x20, x3, x8
-        and     x21, x4, x8
-        and     x22, x5, x8
-        and     x23, x6, x8
-
-        // x15-x19, x7 <- masked (AH+AL) + masked (BH+BL), step 1
-        adds    x14, x14, x20
-        adcs    x15, x15, x21
-        adcs    x16, x16, x22
-        adcs    x17, x17, x23
-        adc     x7, x9, xzr
-
-        // x8-x9,x19,x20-x24 <- (AH+AL) x (BH+BL), low part
-        stp     x3, x4, [x2,#0]
-        $mul_kc_low
-
-        // x15-x19, x7 <- (AH+AL) x (BH+BL), final step
-        adds    x14, x14, x21
-        adcs    x15, x15, x22
-        adcs    x16, x16, x23
-        adcs    x17, x17, x24
-        adc     x7, x7, xzr
-
-        // Load AL
-        ldp     x3, x4, [x0]
-        ldp     x5, x6, [x0,#16]
-        // Load BL
-        ldp     x10, x11, [x1,#0]
-        ldp     x12, x13, [x1,#16]
-
-        // Temporarily store x8 in x2
-        stp     x8, x9, [x2,#0]
-        // x21-x28 <- AL x BL
-        $mul_albl
-        // Restore x8
-        ldp     x8, x9, [x2,#0]
-
-        // x8-x10,x20,x15-x17,x19 <- maskd (AH+AL) x (BH+BL) - ALxBL
-        subs    x8, x8, x21
-        sbcs    x9, x9, x22
-        sbcs    x19, x19, x23
-        sbcs    x20, x20, x24
-        sbcs    x14, x14, x25
-        sbcs    x15, x15, x26
-        sbcs    x16, x16, x27
-        sbcs    x17, x17, x28
-        sbc     x7, x7, xzr
-
-        // Store ALxBL, low
-        stp     x21, x22, [x2]
-        stp     x23, x24, [x2,#16]
-
-        // Load AH
-        ldp     x3, x4, [x0,#32]
-        ldr     x5,     [x0,#48]
-        // Load BH
-        ldp     x10, x11, [x1,#32]
-        ldr     x12,      [x1,#48]
-
-        adds     x8,  x8, x25
-        adcs     x9,  x9, x26
-        adcs    x19, x19, x27
-        adcs    x20, x20, x28
-        adc     x1, xzr, xzr
-
-        add     x0, x0, #32
-        // Temporarily store x8,x9 in x2
-        stp     x8,x9, [x2,#32]
-        // x21-x28 <- AH x BH
-        $mul_ahbh
-        // Restore x8,x9
-        ldp     x8,x9, [x2,#32]
-
-        neg     x1, x1
-
-        // x8-x9,x19,x20,x14-x17 <- (AH+AL) x (BH+BL) - ALxBL - AHxBH
-        subs    x8, x8, x21
-        sbcs    x9, x9, x22
-        sbcs    x19, x19, x23
-        sbcs    x20, x20, x24
-        sbcs    x14, x14, x25
-        sbcs    x15, x15, x26
-        sbcs    x16, x16, xzr
-        sbcs    x17, x17, xzr
-        sbc     x7, x7, xzr
-
-        // Store (AH+AL) x (BH+BL) - ALxBL - AHxBH, low
-        stp      x8,  x9, [x2,#32]
-        stp     x19, x20, [x2,#48]
-
-        adds     x1,  x1, #1
-        adcs    x14, x14, x21
-        adcs    x15, x15, x22
-        adcs    x16, x16, x23
-        adcs    x17, x17, x24
-        adcs    x25,  x7, x25
-        adc     x26, x26, xzr
-
-        stp     x14, x15, [x2,#64]
-        stp     x16, x17, [x2,#80]
-        stp     x25, x26, [x2,#96]
-
-        ldp     x19, x20, [x29,#16]
-        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
-        ret
-___
-    return $body;
-}
-$code.=&mul();
-
-#  Montgomery reduction
-#  Based on method described in Faz-Hernandez et al. https://eprint.iacr.org/2017/1015
-#  Operation: mc [x1] = ma [x0]
-#  NOTE: ma=mc is not allowed
-sub rdc {
-    my $mul01=&mul128x256(
-        "x2","x3",                     # A0-A1
-        "x23","x24","x25","x26",       # B0-B3
-        "x4","x5","x6","x7","x8","x9", # C0-C5
-        "x10","x11","x27","x28");      # TMP
-    my $mul23=&mul128x256(
-        "x2","x10",                    # A0-A1
-        "x23","x24","x25","x26",       # B0-B3
-        "x4","x5","x6","x7","x8","x9", # C0-C5
-        "x0","x3","x27","x28");        # TMP
-    my $mul45=&mul128x256(
-        "x11","x12",                   # A0-A1
-        "x23","x24","x25","x26",       # B0-B3
-        "x4","x5","x6","x7","x8","x9", # C0-C5
-        "x10","x3","x27","x28");       # TMP
-    my $mul67=&mul64x256(
-        "x13",                         # A0
-        "x23","x24","x25","x26",       # B0-B3
-        "x4","x5","x6","x7","x8",      # C0-C4
-        "x10","x27","x28");            # TMP
-    my $body=<<___;
-    .global ${PREFIX}_fprdc
-    .align 4
-    ${PREFIX}_fprdc:
-        stp     x29, x30, [sp, #-96]!
-        add     x29, sp, xzr
-        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]
-
-        ldp     x2, x3, [x0,#0]       // a[0-1]
-
-        // Load the prime constant
-        adrp    x26, :pg_hi21:.Lp434p1
-        add     x26, x26, :lo12:.Lp434p1
-        ldp     x23, x24, [x26, #0x0]
-        ldp     x25, x26, [x26,#0x10]
-
-        // a[0-1] * p434+1
-        $mul01
-
-        ldp     x10, x11, [x0, #0x18]
-        ldp     x12, x13, [x0, #0x28]
-        ldp     x14, x15, [x0, #0x38]
-        ldp     x16, x17, [x0, #0x48]
-        ldp     x19, x20, [x0, #0x58]
-        ldr     x21,      [x0, #0x68]
-
-        adds     x10, x10, x4
-        adcs     x11, x11, x5
-        adcs     x12, x12, x6
-        adcs     x13, x13, x7
-        adcs     x14, x14, x8
-        adcs     x15, x15, x9
-        adcs     x22, x16, xzr
-        adcs     x17, x17, xzr
-        adcs     x19, x19, xzr
-        adcs     x20, x20, xzr
-        adc      x21, x21, xzr
-
-        ldr      x2,  [x0,#0x10]       // a[2]
-        // a[2-3] * p434+1
-        $mul23
-
-        adds    x12, x12, x4
-        adcs    x13, x13, x5
-        adcs    x14, x14, x6
-        adcs    x15, x15, x7
-        adcs    x16, x22, x8
-        adcs    x17, x17, x9
-        adcs    x22, x19, xzr
-        adcs    x20, x20, xzr
-        adc     x21, x21, xzr
-
-        $mul45
-        adds    x14, x14, x4
-        adcs    x15, x15, x5
-        adcs    x16, x16, x6
-        adcs    x17, x17, x7
-        adcs    x19, x22, x8
-        adcs    x20, x20, x9
-        adc     x22, x21, xzr
-
-        stp     x14, x15, [x1, #0x0]     // C0, C1
-
-        $mul67
-        adds    x16, x16, x4
-        adcs    x17, x17, x5
-        adcs    x19, x19, x6
-        adcs    x20, x20, x7
-        adc     x21, x22, x8
-
-        str     x16,       [x1, #0x10]
-        stp     x17, x19,  [x1, #0x18]
-        stp     x20, x21,  [x1, #0x28]
-
-        ldp     x19, x20, [x29,#16]
-        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
-        ret
-___
-}
-$code.=&rdc();
-
-#  Field addition
-#  Operation: c [x2] = a [x0] + b [x1]
-$code.=<<___;
-    .global ${PREFIX}_fpadd
-    .align 4
-    ${PREFIX}_fpadd:
-        stp     x29,x30, [sp,#-16]!
-        add     x29, sp, #0
-
-        ldp     x3, x4,   [x0,#0]
-        ldp     x5, x6,   [x0,#16]
-        ldp     x7, x8,   [x0,#32]
-        ldr     x9,       [x0,#48]
-        ldp     x11, x12, [x1,#0]
-        ldp     x13, x14, [x1,#16]
-        ldp     x15, x16, [x1,#32]
-        ldr     x17,      [x1,#48]
-
-        // Add a + b
-        adds    x3, x3, x11
-        adcs    x4, x4, x12
-        adcs    x5, x5, x13
-        adcs    x6, x6, x14
-        adcs    x7, x7, x15
-        adcs    x8, x8, x16
-        adc     x9, x9, x17
-
-        //  Subtract 2xp434
-        adrp    x17, :pg_hi21:.Lp434x2
-        add     x17, x17, :lo12:.Lp434x2
-        ldp     x11, x12, [x17, #0]
-        ldp     x13, x14, [x17, #16]
-        ldp     x15, x16, [x17, #32]
-        subs    x3, x3, x11
-        sbcs    x4, x4, x12
-        sbcs    x5, x5, x12
-        sbcs    x6, x6, x13
-        sbcs    x7, x7, x14
-        sbcs    x8, x8, x15
-        sbcs    x9, x9, x16
-        sbc     x0, xzr, xzr    // x0 can be reused now
-
-        // Add 2xp434 anded with the mask in x0
-        and     x11, x11, x0
-        and     x12, x12, x0
-        and     x13, x13, x0
-        and     x14, x14, x0
-        and     x15, x15, x0
-        and     x16, x16, x0
-
-        adds    x3, x3, x11
-        adcs    x4, x4, x12
-        adcs    x5, x5, x12
-        adcs    x6, x6, x13
-        adcs    x7, x7, x14
-        adcs    x8, x8, x15
-        adc     x9, x9, x16
-
-        stp     x3, x4,  [x2,#0]
-        stp     x5, x6,  [x2,#16]
-        stp     x7, x8,  [x2,#32]
-        str     x9,      [x2,#48]
-
-        ldp     x29, x30, [sp],#16
-        ret
-___
-
-#  Field subtraction
-#  Operation: c [x2] = a [x0] - b [x1]
-$code.=<<___;
-    .global ${PREFIX}_fpsub
-    .align 4
-    ${PREFIX}_fpsub:
-        stp     x29, x30, [sp,#-16]!
-        add     x29, sp, #0
-
-        ldp     x3, x4,   [x0,#0]
-        ldp     x5, x6,   [x0,#16]
-        ldp     x7, x8,   [x0,#32]
-        ldr     x9,       [x0,#48]
-        ldp     x11, x12, [x1,#0]
-        ldp     x13, x14, [x1,#16]
-        ldp     x15, x16, [x1,#32]
-        ldr     x17,      [x1,#48]
-
-        // Subtract a - b
-        subs    x3, x3, x11
-        sbcs    x4, x4, x12
-        sbcs    x5, x5, x13
-        sbcs    x6, x6, x14
-        sbcs    x7, x7, x15
-        sbcs    x8, x8, x16
-        sbcs    x9, x9, x17
-        sbc     x0, xzr, xzr
-
-        // Add 2xp434 anded with the mask in x0
-        adrp    x17, :pg_hi21:.Lp434x2
-        add     x17, x17, :lo12:.Lp434x2
-
-        // First half
-        ldp     x11, x12, [x17, #0]
-        ldp     x13, x14, [x17, #16]
-        ldp     x15, x16, [x17, #32]
-
-        // Add 2xp434 anded with the mask in x0
-        and     x11, x11, x0
-        and     x12, x12, x0
-        and     x13, x13, x0
-        and     x14, x14, x0
-        and     x15, x15, x0
-        and     x16, x16, x0
-
-        adds    x3, x3, x11
-        adcs    x4, x4, x12
-        adcs    x5, x5, x12
-        adcs    x6, x6, x13
-        adcs    x7, x7, x14
-        adcs    x8, x8, x15
-        adc     x9, x9, x16
-
-        stp     x3, x4,  [x2,#0]
-        stp     x5, x6,  [x2,#16]
-        stp     x7, x8,  [x2,#32]
-        str     x9,      [x2,#48]
-
-        ldp     x29, x30, [sp],#16
-        ret
-___
-
-# 434-bit multiprecision addition
-# Operation: c [x2] = a [x0] + b [x1]
-$code.=<<___;
-    .global ${PREFIX}_mpadd_asm
-    .align 4
-    ${PREFIX}_mpadd_asm:
-        stp     x29, x30, [sp,#-16]!
-        add     x29, sp, #0
-
-        ldp     x3, x4,   [x0,#0]
-        ldp     x5, x6,   [x0,#16]
-        ldp     x7, x8,   [x0,#32]
-        ldr     x9,       [x0,#48]
-        ldp     x11, x12, [x1,#0]
-        ldp     x13, x14, [x1,#16]
-        ldp     x15, x16, [x1,#32]
-        ldr     x17,      [x1,#48]
-
-        adds    x3, x3, x11
-        adcs    x4, x4, x12
-        adcs    x5, x5, x13
-        adcs    x6, x6, x14
-        adcs    x7, x7, x15
-        adcs    x8, x8, x16
-        adc     x9, x9, x17
-
-        stp     x3, x4,   [x2,#0]
-        stp     x5, x6,   [x2,#16]
-        stp     x7, x8,   [x2,#32]
-        str     x9,       [x2,#48]
-
-        ldp     x29, x30, [sp],#16
-        ret
-___
-
-# 2x434-bit multiprecision subtraction
-# Operation: c [x2] = a [x0] - b [x1].
-# Returns borrow mask
-$code.=<<___;
-    .global ${PREFIX}_mpsubx2_asm
-    .align 4
-    ${PREFIX}_mpsubx2_asm:
-        stp     x29, x30, [sp,#-16]!
-        add     x29, sp, #0
-
-        ldp     x3, x4,   [x0,#0]
-        ldp     x5, x6,   [x0,#16]
-        ldp     x11, x12, [x1,#0]
-        ldp     x13, x14, [x1,#16]
-        subs    x3, x3, x11
-        sbcs    x4, x4, x12
-        sbcs    x5, x5, x13
-        sbcs    x6, x6, x14
-        ldp     x7, x8,   [x0,#32]
-        ldp     x9, x10,  [x0,#48]
-        ldp     x11, x12, [x1,#32]
-        ldp     x13, x14, [x1,#48]
-        sbcs    x7, x7, x11
-        sbcs    x8, x8, x12
-        sbcs    x9, x9, x13
-        sbcs    x10, x10, x14
-
-        stp     x3, x4,   [x2,#0]
-        stp     x5, x6,   [x2,#16]
-        stp     x7, x8,   [x2,#32]
-        stp     x9, x10,  [x2,#48]
-
-        ldp     x3, x4,   [x0,#64]
-        ldp     x5, x6,   [x0,#80]
-        ldp     x11, x12, [x1,#64]
-        ldp     x13, x14, [x1,#80]
-        sbcs    x3, x3, x11
-        sbcs    x4, x4, x12
-        sbcs    x5, x5, x13
-        sbcs    x6, x6, x14
-        ldp     x7, x8,   [x0,#96]
-        ldp     x11, x12, [x1,#96]
-        sbcs    x7, x7, x11
-        sbcs    x8, x8, x12
-        sbc     x0, xzr, xzr
-
-        stp     x3, x4,   [x2,#64]
-        stp     x5, x6,   [x2,#80]
-        stp     x7, x8,   [x2,#96]
-
-        ldp     x29, x30, [sp],#16
-        ret
-___
-
-
-# Double 2x434-bit multiprecision subtraction
-# Operation: c [x2] = c [x2] - a [x0] - b [x1]
-$code.=<<___;
-    .global ${PREFIX}_mpdblsubx2_asm
-    .align 4
-    ${PREFIX}_mpdblsubx2_asm:
-        stp     x29, x30, [sp, #-16]!
-        add     x29, sp, #0
-
-        ldp     x3, x4,   [x2, #0]
-        ldp     x5, x6,   [x2,#16]
-        ldp     x7, x8,   [x2,#32]
-
-        ldp     x11, x12, [x0, #0]
-        ldp     x13, x14, [x0,#16]
-        ldp     x15, x16, [x0,#32]
-
-        subs    x3, x3, x11
-        sbcs    x4, x4, x12
-        sbcs    x5, x5, x13
-        sbcs    x6, x6, x14
-        sbcs    x7, x7, x15
-        sbcs    x8, x8, x16
-
-        // x9 stores carry
-        adc     x9, xzr, xzr
-
-        ldp     x11, x12, [x1, #0]
-        ldp     x13, x14, [x1,#16]
-        ldp     x15, x16, [x1,#32]
-        subs    x3, x3, x11
-        sbcs    x4, x4, x12
-        sbcs    x5, x5, x13
-        sbcs    x6, x6, x14
-        sbcs    x7, x7, x15
-        sbcs    x8, x8, x16
-        adc     x9, x9, xzr
-
-        stp     x3, x4,   [x2, #0]
-        stp     x5, x6,   [x2,#16]
-        stp     x7, x8,   [x2,#32]
-
-        ldp     x3, x4,   [x2,#48]
-        ldp     x5, x6,   [x2,#64]
-        ldp     x7, x8,   [x2,#80]
-
-        ldp     x11, x12, [x0,#48]
-        ldp     x13, x14, [x0,#64]
-        ldp     x15, x16, [x0,#80]
-
-        // x9 = 2 - x9
-        neg     x9, x9
-        add     x9, x9, #2
-
-        subs    x3, x3, x9
-        sbcs    x3, x3, x11
-        sbcs    x4, x4, x12
-        sbcs    x5, x5, x13
-        sbcs    x6, x6, x14
-        sbcs    x7, x7, x15
-        sbcs    x8, x8, x16
-        adc     x9, xzr, xzr
-
-        ldp     x11, x12, [x1,#48]
-        ldp     x13, x14, [x1,#64]
-        ldp     x15, x16, [x1,#80]
-        subs    x3, x3, x11
-        sbcs    x4, x4, x12
-        sbcs    x5, x5, x13
-        sbcs    x6, x6, x14
-        sbcs    x7, x7, x15
-        sbcs    x8, x8, x16
-        adc     x9, x9, xzr
-
-        stp     x3, x4,   [x2,#48]
-        stp     x5, x6,   [x2,#64]
-        stp     x7, x8,   [x2,#80]
-
-        ldp      x3,  x4, [x2,#96]
-        ldp     x11, x12, [x0,#96]
-        ldp     x13, x14, [x1,#96]
-
-        // x9 = 2 - x9
-        neg     x9, x9
-        add     x9, x9, #2
-
-        subs    x3, x3, x9
-        sbcs    x3, x3, x11
-        sbcs    x4, x4, x12
-        subs    x3, x3, x13
-        sbc     x4, x4, x14
-        stp     x3, x4,   [x2,#96]
-
-        ldp     x29, x30, [sp],#16
-        ret
-___
-
-foreach (split("\n",$code)) {
-  s/\`([^\`]*)\`/eval($1)/ge;
-  print $_,"\n";
-}
-
-close STDOUT;
diff --git a/src/third_party/sike/asm/fp-x86_64.pl b/src/third_party/sike/asm/fp-x86_64.pl
deleted file mode 100755
index cffde1a..0000000
--- a/src/third_party/sike/asm/fp-x86_64.pl
+++ /dev/null
@@ -1,1626 +0,0 @@
-#! /usr/bin/env perl
-#
-# April 2019
-#
-# Abstract: field arithmetic in x64 assembly for SIDH/p434
-
-$flavour = shift;
-$output  = shift;
-if ($flavour =~ /\./) { $output = $flavour; undef $flavour; }
-
-$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
-( $xlate="${dir}x86_64-xlate.pl" and -f $xlate ) or
-( $xlate="${dir}../../../crypto/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;
-
-$PREFIX="sike";
-$bmi2_adx = 1;
-
-$code.=<<___;
-.text
-
-# p434 x 2
-.Lp434x2:
-.quad   0xFFFFFFFFFFFFFFFE
-.quad   0xFFFFFFFFFFFFFFFF
-.quad   0xFB82ECF5C5FFFFFF
-.quad   0xF78CB8F062B15D47
-.quad   0xD9F8BFAD038A40AC
-.quad   0x0004683E4E2EE688
-
-# p434 + 1
-.Lp434p1:
-.quad   0xFDC1767AE3000000
-.quad   0x7BC65C783158AEA3
-.quad   0x6CFC5FD681C52056
-.quad   0x0002341F27177344
-
-.extern OPENSSL_ia32cap_P
-.hidden OPENSSL_ia32cap_P
-___
-
-# Jump to alternative implemenatation provided as an
-# argument in case CPU supports ADOX/ADCX and MULX instructions.
-sub alt_impl {
-  $jmp_func = shift;
-
-  $body=<<___;
-  lea OPENSSL_ia32cap_P(%rip), %rcx
-  mov 8(%rcx), %rcx
-  and \$0x80100, %ecx
-  cmp \$0x80100, %ecx
-  je  $jmp_func
-
-___
-  return $body
-}
-
-# Performs schoolbook multiplication of 2 192-bit numbers. Uses
-# MULX instruction. Result is stored in 192 bits pointed by $DST.
-sub mul192 {
-  my ($idxM0,$M0,$idxM1,$M1,$idxDST,$DST,$T0,$T1,$T2,$T3,$T4,$T5,$T6)=@_;
-  my ($ML0,$ML8,$ML16)=map("$idxM0+$_($M0)",(0,8,16));
-  my ($MR0,$MR8,$MR16)=map("$idxM1+$_($M1)",(0,8,16));
-  my ($D0,$D1,$D2,$D3,$D4,$D5)=map("$idxDST+$_($DST)",(0,8,16,24,32,40));
-
-  $body=<<___;
-  mov    $ML0, %rdx
-  mulx   $MR0, $T1, $T0   # T0:T1 = A0*B0
-  mov    $T1, $D0         # DST0
-  mulx   $MR8, $T2, $T1   # T1:T2 = A0*B1
-  xor    %rax, %rax
-  adox   $T2, $T0
-  mulx   $MR16,$T3, $T2   # T2:T3 = A0*B2
-  adox   $T3, $T1
-
-  mov    $ML8, %rdx
-  mulx   $MR0, $T4, $T3   # T3:T4 = A1*B0
-  adox   %rax, $T2
-  xor    %rax, %rax
-
-  mulx   $MR8, $T6, $T5   # T6:T7 = A1*B1
-  adox   $T0, $T4
-  mov    $T4, $D1         # DST1
-  adcx   $T6, $T3
-
-  mulx   $MR16,$T0, $T6   # T6:T0 = A1*B2
-  adox   $T1, $T3
-  adcx   $T0, $T5
-  adcx   %rax, $T6
-  adox   $T2, $T5
-
-  mov    $ML16,%rdx
-  mulx   $MR0, $T0, $T1   # T1:T0 = A2*B0
-  adox   %rax, $T6
-  xor    %rax, %rax
-
-  mulx   $MR8, $T2, $T4   # T4:T2 = A2*B1
-  adox   $T3, $T0
-  mov    $T0, $D2         # DST2
-  adcx   $T5, $T1
-
-  mulx   $MR16,$T3, $T0   # T0:T3 = A2*B2
-  adcx   $T6, $T4
-  adcx   %rax, $T0
-  adox   $T2, $T1
-  adox   $T4, $T3
-  adox   %rax, $T0
-  mov    $T1, $D3          # DST3
-  mov    $T3, $D4          # DST4
-  mov    $T0, $D5          # DST5
-
-___
-  return $body;
-}
-
-# Performs schoolbook multiplication of 2 256-bit numbers. Uses
-# MULX instruction. Result is stored in 256 bits pointed by $DST.
-sub mul256 {
-  my ($idxM0,$M0,$idxM1,$M1,$idxDST,$DST,$T0,$T1,$T2,$T3,$T4,$T5,$T6,$T7,$T8,$T9)=@_;
-  my ($ML0,$ML8,$ML16,$ML24)=map("$idxM0+$_($M0)",(0,8,16,24));
-  my ($MR0,$MR8,$MR16,$MR24)=map("$idxM1+$_($M1)",(0,8,16,24));
-  my ($D0,$D1,$D2,$D3,$D4,$D5,$D6,$D7)=map("$idxDST+$_($DST)",(0,8,16,24,32,40,48,56));
-
-  $body=<<___;
-  mov    $ML0, %rdx
-  mulx   $MR0, $T1, $T0   # T0:T1 = A0*B0
-  mov    $T1, $D0         # DST0_final
-  mulx   $MR8, $T2, $T1   # T1:T2 = A0*B1
-  xor    %rax, %rax
-  adox   $T2, $T0
-  mulx   $MR16,$T3, $T2   # T2:T3 = A0*B2
-  adox   $T3, $T1
-  mulx   $MR24,$T4, $T3   # T3:T4 = A0*B3
-  adox   $T4, $T2
-
-  mov    $ML8, %rdx
-  mulx   $MR0, $T4, $T5   # T5:T4 = A1*B0
-  adox   %rax, $T3
-  xor    %rax, %rax
-  mulx   $MR8, $T7, $T6   # T6:T7 = A1*B1
-  adox   $T0, $T4
-  mov    $T4, $D1         # DST1_final
-  adcx   $T7, $T5
-  mulx   $MR16,$T8, $T7   # T7:T8 = A1*B2
-  adcx   $T8, $T6
-  adox   $T1, $T5
-  mulx   $MR24,$T9, $T8   # T8:T9 = A1*B3
-  adcx   $T9, $T7
-  adcx   %rax, $T8
-  adox   $T2, $T6
-
-  mov    $ML16,%rdx
-  mulx   $MR0, $T0, $T1   # T1:T0 = A2*B0
-  adox   $T3, $T7
-  adox   %rax, $T8
-  xor    %rax, %rax
-  mulx   $MR8, $T3, $T2   # T2:T3 = A2*B1
-  adox   $T5, $T0
-  mov    $T0, $D2         # DST2_final
-  adcx   $T3, $T1
-  mulx   $MR16,$T4, $T3   # T3:T4 = A2*B2
-  adcx   $T4, $T2
-  adox   $T6, $T1
-  mulx   $MR24,$T9, $T4   # T3:T4 = A2*B3
-  adcx   $T9, $T3
-  adcx   %rax, $T4
-
-  adox   $T7, $T2
-  adox   $T8, $T3
-  adox   %rax, $T4
-
-  mov    $ML24,%rdx
-  mulx   $MR0,  $T0, $T5   # T5:T0 = A3*B0
-  xor    %rax,  %rax
-  mulx   $MR8,  $T7, $T6   # T6:T7 = A3*B1
-  adcx   $T7,  $T5
-  adox   $T0,  $T1
-  mulx   $MR16, $T8, $T7   # T7:T8 = A3*B2
-  adcx   $T8,  $T6
-  adox   $T5,  $T2
-  mulx   $MR24, $T9, $T8   # T8:T9 = A3*B3
-  adcx   $T9,  $T7
-  adcx   %rax,  $T8
-  adox   $T6,  $T3
-  adox   $T7,  $T4
-  adox   %rax,  $T8
-  mov    $T1,  $D3          # DST3_final
-  mov    $T2,  $D4          # DST4_final
-  mov    $T3,  $D5          # DST5_final
-  mov    $T4,  $D6          # DST6_final
-  mov    $T8,  $D7          # DST7_final
-
-___
-  return $body;
-}
-
-# Performs schoolbook multiplication of 64-bit with 256-bit
-# number.
-sub mul64x256 {
-  my ($idxM0,$M0,$M1,$T0,$T1,$T2,$T3,$T4,$T5)=@_;
-  my $body.=<<___;
-    mov   $idxM0($M0), $T5
-
-    xor   $T2, $T2
-    mov   0+$M1, %rax
-    mul   $T5
-    mov   %rax, $T0   # C0
-    mov   %rdx, $T1
-
-    xor   $T3, $T3
-    mov   8+$M1, %rax
-    mul   $T5
-    add   %rax, $T1   # C1
-    adc   %rdx, $T2
-
-    xor   $T4, $T4
-    mov   16+$M1, %rax
-    mul   $T5
-    add   %rax, $T2   # C2
-    adc   %rdx, $T3
-
-    mov   24+$M1, %rax
-    mul   $T5
-    add   %rax, $T3   # C3
-    adc   %rdx, $T4   # C4
-___
-  return $body;
-}
-
-# Performs schoolbook multiplication of 64-bit with 256-bit
-# number. Uses MULX and ADOX instructions.
-sub mulx64x256 {
-  my ($idxM0,$M0,$M1,$T0,$T1,$T2,$T3,$T4,$T5)=@_;
-  my $body.=<<___;
-    xor    %rax, %rax
-    mov    $idxM0($M0), %rdx
-    mulx   0+$M1, $T0, $T1    # T0 <- C0
-    mulx   8+$M1, $T4, $T2
-    mulx   16+$M1, $T5, $T3
-
-    adox   $T4, $T1         # T1 <- C1
-    adox   $T5, $T2         # T2 <- C2
-
-    mulx   24+$M1, $T5, $T4
-    adox   $T5, $T3         # T3 <- C3
-    adox   %rax, $T4         # T4 <- C4
-___
-  return $body;
-}
-
-# Performs schoolbook multiplication of 128-bit with 256-bit
-# number. Destroys RAX and RDX
-sub mul128x256 {
-  my ($idxMA,$MA,$MB,$C0,$C1,$C2,$C3,$C4,$C5,$T0,$T1)=@_;
-  my ($MA0,$MA8)=map("$idxMA+$_($MA)", (0,8));
-  my $body.=<<___;
-    # A0 x B0
-    mov   $MA0, $T0
-    mov   0+$MB, %rax
-    mul   $T0
-    xor   $C2, $C2
-    mov   %rax, $C0   # c0
-    mov   %rdx, $C1
-
-    # A0 x B1
-    mov   8+$MB, %rax
-    mul   $T0
-    xor   $C3, $C3
-    add   %rax, $C1
-    adc   %rdx, $C2
-
-    # A1 x B0
-    mov   $MA8, $T1
-    mov   0+$MB, %rax
-    mul   $T1
-    add   %rax, $C1
-    adc   %rdx, $C2
-    adc   \$0x0, $C3
-
-    # A0 x B2
-    xor   $C4, $C4
-    mov   16+$MB, %rax
-    mul   $T0
-    add   %rax, $C2
-    adc   %rdx, $C3
-    adc   \$0x0, $C4
-
-    # A1 x B1
-    mov   8+$MB, %rax
-    mul   $T1
-    add   %rax, $C2           # c2
-    adc   %rdx, $C3
-    adc   \$0x0, $C4
-
-    # A0 x B3
-    mov   24+$MB, %rax
-    mul   $T0
-    xor   $C5, $C5
-    add   %rax, $C3
-    adc   %rdx, $C4
-    adc   \$0x0, $C5
-
-    # A1 x B2
-    mov   16+$MB, %rax
-    mul   $T1
-    add   %rax, $C3          # c3
-    adc   %rdx, $C4
-    adc   \$0x0, $C5
-
-    # A1 x B3
-    mov   24+$MB, %rax
-    mul   $T1
-    add   %rax, $C4
-    adc   %rdx, $C5
-
-___
-  return $body;
-}
-
-# Performs schoolbook multiplication of 128-bit with 256-bit
-# number. Uses MULX, ADOX, ADCX instruction.
-sub mulx128x256 {
-  my ($idxM0,$M0,$M1,$T0,$T1,$T2,$T3,$T4,$T5,$T6)=@_;
-  my ($MUL0,$MUL8)=map("$idxM0+$_($M0)", (0,8));
-  my $body.=<<___;
-    xor     %rax, %rax
-    mov    $MUL0, %rdx
-    mulx   0+$M1, $T0, $T1        # T0 <- C0
-    mulx   8+$M1, $T4, $T2
-    mulx   16+$M1, $T5, $T3
-
-    adox   $T4, $T1               # T1: interm1
-    adox   $T5, $T2               # T2: interm2
-
-    mulx   24+$M1, $T5, $T4
-    adox   $T5, $T3               # T3: interm3
-    adox   %rax, $T4              # T4: interm4
-
-    xor    %rax, %rax
-    mov    $MUL8, %rdx
-    mulx   0+$M1, $T5, $T6
-    adcx   $T5, $T1               # T1 <- C1
-    adcx   $T6, $T2
-
-    mulx   8+$M1, $T6, $T5
-    adcx   $T5, $T3
-    adox   $T6, $T2               # T2 <- C2
-
-    mulx   16+$M1, $T6, $T5
-    adcx   $T5, $T4
-    adox   $T6, $T3               # T3 <- C3
-
-    mulx   24+$M1, $T6, $T5
-    adcx   %rax, $T5
-    adox   $T6, $T4               # T4 <- C4
-    adox   %rax, $T5              # T5 <- C5
-___
-  return $body;
-}
-
-# Compute z = x + y (mod p).
-# Operation: c [rdx] = a [rdi] + b [rsi]
-$code.=<<___;
-.globl  ${PREFIX}_fpadd
-.type   ${PREFIX}_fpadd,\@function,3
-${PREFIX}_fpadd:
-.cfi_startproc
-  push %r12
-.cfi_adjust_cfa_offset  8
-.cfi_offset r12, -16
-  push %r13
-.cfi_adjust_cfa_offset  8
-.cfi_offset r13, -24
-  push %r14
-.cfi_adjust_cfa_offset  8
-.cfi_offset r14, -32
-
-  xor   %rax, %rax
-
-  mov    0x0(%rdi),  %r8
-  add    0x0(%rsi),  %r8
-  mov    0x8(%rdi),  %r9
-  adc    0x8(%rsi),  %r9
-  mov   0x10(%rdi), %r10
-  adc   0x10(%rsi), %r10
-  mov   0x18(%rdi), %r11
-  adc   0x18(%rsi), %r11
-  mov   0x20(%rdi), %r12
-  adc   0x20(%rsi), %r12
-  mov   0x28(%rdi), %r13
-  adc   0x28(%rsi), %r13
-  mov   0x30(%rdi), %r14
-  adc   0x30(%rsi), %r14
-
-  mov        .Lp434x2(%rip), %rcx
-  sub   %rcx, %r8
-  mov    0x8+.Lp434x2(%rip), %rcx
-  sbb   %rcx, %r9
-  sbb   %rcx, %r10
-  mov   0x10+.Lp434x2(%rip), %rcx
-  sbb   %rcx, %r11
-  mov   0x18+.Lp434x2(%rip), %rcx
-  sbb   %rcx, %r12
-  mov   0x20+.Lp434x2(%rip), %rcx
-  sbb   %rcx, %r13
-  mov   0x28+.Lp434x2(%rip), %rcx
-  sbb   %rcx, %r14
-
-  sbb   \$0, %rax
-
-  mov   .Lp434x2(%rip), %rdi
-  and   %rax, %rdi
-  mov   0x8+.Lp434x2(%rip), %rsi
-  and   %rax, %rsi
-  mov   0x10+.Lp434x2(%rip), %rcx
-  and   %rax, %rcx
-
-  add   %rdi,  %r8
-  mov   %r8,   0x0(%rdx)
-  adc   %rsi,  %r9
-  mov   %r9,   0x8(%rdx)
-  adc   %rsi, %r10
-  mov   %r10, 0x10(%rdx)
-  adc   %rcx, %r11
-  mov   %r11, 0x18(%rdx)
-
-  setc  %cl
-  mov   0x18+.Lp434x2(%rip),  %r8
-  and   %rax,  %r8
-  mov   0x20+.Lp434x2(%rip),  %r9
-  and   %rax,  %r9
-  mov   0x28+.Lp434x2(%rip), %r10
-  and   %rax, %r10
-  bt    \$0, %rcx
-
-  adc   %r8, %r12
-  mov   %r12, 0x20(%rdx)
-  adc   %r9, %r13
-  mov   %r13, 0x28(%rdx)
-  adc   %r10, %r14
-  mov  %r14, 0x30(%rdx)
-
-  pop %r14
-.cfi_adjust_cfa_offset  -8
-  pop %r13
-.cfi_adjust_cfa_offset  -8
-  pop %r12
-.cfi_adjust_cfa_offset  -8
-  ret
-.cfi_endproc
-___
-
-# Loads data to XMM0 and XMM1 and
-# conditionaly swaps depending on XMM3
-sub cswap_block16() {
-  my $idx = shift;
-  $idx *= 16;
-  ("
-    movdqu   $idx(%rdi), %xmm0
-    movdqu   $idx(%rsi), %xmm1
-    movdqa   %xmm1, %xmm2
-    pxor     %xmm0, %xmm2
-    pand     %xmm3, %xmm2
-    pxor     %xmm2, %xmm0
-    pxor     %xmm2, %xmm1
-    movdqu   %xmm0, $idx(%rdi)
-    movdqu   %xmm1, $idx(%rsi)
-  ");
-}
-
-# Conditionally swaps bits in x and y in constant time.
-# mask indicates bits to be swapped (set bits are swapped)
-# Operation: [rdi] <-> [rsi] if rdx==1
-sub sike_cswap {
-  # P[0] with Q[0]
-  foreach ( 0.. 6){$BLOCKS.=eval "&cswap_block16($_)";}
-  # P[1] with Q[1]
-  foreach ( 7..13){$BLOCKS.=eval "&cswap_block16($_)";}
-
-  my $body =<<___;
-.globl  ${PREFIX}_cswap_asm
-.type   ${PREFIX}_cswap_asm,\@function,3
-${PREFIX}_cswap_asm:
-  # Fill XMM3. After this step first half of XMM3 is
-  # just zeros and second half is whatever in RDX
-  mov   %rdx, %xmm3
-
-  # Copy lower double word everywhere else. So that
-  # XMM3=RDX|RDX. As RDX has either all bits set
-  # or non result will be that XMM3 has also either
-  # all bits set or non of them. 68 = 01000100b
-  pshufd  \$68, %xmm3, %xmm3
-  $BLOCKS
-  ret
-___
-  ($body)
-}
-$code.=&sike_cswap();
-
-
-# Field subtraction
-# Operation: c [rdx] = a [rdi] - b [rsi]
-$code.=<<___;
-.globl  ${PREFIX}_fpsub
-.type   ${PREFIX}_fpsub,\@function,3
-${PREFIX}_fpsub:
-.cfi_startproc
-  push   %r12
-.cfi_adjust_cfa_offset  8
-.cfi_offset r12, -16
-  push   %r13
-.cfi_adjust_cfa_offset  8
-.cfi_offset r13, -24
-  push   %r14
-.cfi_adjust_cfa_offset  8
-.cfi_offset r14, -32
-
-  xor %rax, %rax
-
-  mov    0x0(%rdi),  %r8
-  sub    0x0(%rsi),  %r8
-  mov    0x8(%rdi),  %r9
-  sbb    0x8(%rsi),  %r9
-  mov   0x10(%rdi), %r10
-  sbb   0x10(%rsi), %r10
-  mov   0x18(%rdi), %r11
-  sbb   0x18(%rsi), %r11
-  mov   0x20(%rdi), %r12
-  sbb   0x20(%rsi), %r12
-  mov   0x28(%rdi), %r13
-  sbb   0x28(%rsi), %r13
-  mov   0x30(%rdi), %r14
-  sbb   0x30(%rsi), %r14
-
-  sbb   \$0x0, %rax
-
-  mov   .Lp434x2(%rip), %rdi
-  and   %rax, %rdi
-  mov   0x08+.Lp434x2(%rip), %rsi
-  and   %rax, %rsi
-  mov   0x10+.Lp434x2(%rip), %rcx
-  and   %rax, %rcx
-
-  add   %rdi,  %r8
-  mov   %r8,   0x0(%rdx)
-  adc   %rsi,  %r9
-  mov   %r9,   0x8(%rdx)
-  adc   %rsi, %r10
-  mov   %r10, 0x10(%rdx)
-  adc   %rcx, %r11
-  mov   %r11, 0x18(%rdx)
-
-  setc  %cl
-  mov   0x18+.Lp434x2(%rip),  %r8
-  and   %rax,  %r8
-  mov   0x20+.Lp434x2(%rip),  %r9
-  and   %rax,  %r9
-  mov   0x28+.Lp434x2(%rip), %r10
-  and   %rax, %r10
-  bt    \$0x0, %rcx
-
-  adc   %r8, %r12
-  adc   %r9, %r13
-  adc   %r10, %r14
-  mov   %r12, 0x20(%rdx)
-  mov   %r13, 0x28(%rdx)
-  mov   %r14, 0x30(%rdx)
-
-  pop %r14
-.cfi_adjust_cfa_offset  -8
-  pop %r13
-.cfi_adjust_cfa_offset  -8
-  pop %r12
-.cfi_adjust_cfa_offset  -8
-  ret
-.cfi_endproc
-___
-
-#  434-bit multiprecision addition
-#  Operation: c [rdx] = a [rdi] + b [rsi]
-$code.=<<___;
-.globl  ${PREFIX}_mpadd_asm
-.type   ${PREFIX}_mpadd_asm,\@function,3
-${PREFIX}_mpadd_asm:
-.cfi_startproc
-  mov    0x0(%rdi), %r8;
-  mov    0x8(%rdi), %r9
-  mov   0x10(%rdi), %r10
-  mov   0x18(%rdi), %r11
-  mov   0x20(%rdi), %rcx
-  add    0x0(%rsi), %r8
-  adc    0x8(%rsi), %r9
-  adc   0x10(%rsi), %r10
-  adc   0x18(%rsi), %r11
-  adc   0x20(%rsi), %rcx
-  mov   %r8,   0x0(%rdx)
-  mov   %r9,   0x8(%rdx)
-  mov   %r10, 0x10(%rdx)
-  mov   %r11, 0x18(%rdx)
-  mov   %rcx, 0x20(%rdx)
-
-  mov   0x28(%rdi), %r8
-  mov   0x30(%rdi), %r9
-  adc   0x28(%rsi), %r8
-  adc   0x30(%rsi), %r9
-  mov   %r8, 0x28(%rdx)
-  mov   %r9, 0x30(%rdx)
-  ret
-.cfi_endproc
-___
-
-#  2x434-bit multiprecision subtraction
-#  Operation: c [rdx] = a [rdi] - b [rsi].
-#  Returns borrow mask
-$code.=<<___;
-.globl  ${PREFIX}_mpsubx2_asm
-.type   ${PREFIX}_mpsubx2_asm,\@function,3
-${PREFIX}_mpsubx2_asm:
-.cfi_startproc
-  xor   %rax, %rax
-
-  mov    0x0(%rdi), %r8
-  mov    0x8(%rdi), %r9
-  mov   0x10(%rdi), %r10
-  mov   0x18(%rdi), %r11
-  mov   0x20(%rdi), %rcx
-  sub    0x0(%rsi), %r8
-  sbb    0x8(%rsi), %r9
-  sbb   0x10(%rsi), %r10
-  sbb   0x18(%rsi), %r11
-  sbb   0x20(%rsi), %rcx
-  mov   %r8,   0x0(%rdx)
-  mov   %r9,   0x8(%rdx)
-  mov   %r10, 0x10(%rdx)
-  mov   %r11, 0x18(%rdx)
-  mov   %rcx, 0x20(%rdx)
-
-  mov   0x28(%rdi), %r8
-  mov   0x30(%rdi), %r9
-  mov   0x38(%rdi), %r10
-  mov   0x40(%rdi), %r11
-  mov   0x48(%rdi), %rcx
-  sbb   0x28(%rsi), %r8
-  sbb   0x30(%rsi), %r9
-  sbb   0x38(%rsi), %r10
-  sbb   0x40(%rsi), %r11
-  sbb   0x48(%rsi), %rcx
-  mov   %r8,  0x28(%rdx)
-  mov   %r9,  0x30(%rdx)
-  mov   %r10, 0x38(%rdx)
-  mov   %r11, 0x40(%rdx)
-  mov   %rcx, 0x48(%rdx)
-
-  mov   0x50(%rdi), %r8
-  mov   0x58(%rdi), %r9
-  mov   0x60(%rdi), %r10
-  mov   0x68(%rdi), %r11
-  sbb   0x50(%rsi), %r8
-  sbb   0x58(%rsi), %r9
-  sbb   0x60(%rsi), %r10
-  sbb   0x68(%rsi), %r11
-  sbb   \$0x0, %rax
-  mov   %r8,  0x50(%rdx)
-  mov   %r9,  0x58(%rdx)
-  mov   %r10, 0x60(%rdx)
-  mov   %r11, 0x68(%rdx)
-  ret
-.cfi_endproc
-___
-
-
-#  Double 2x434-bit multiprecision subtraction
-#  Operation: c [rdx] = c [rdx] - a [rdi] - b [rsi]
-$code.=<<___;
-.globl  ${PREFIX}_mpdblsubx2_asm
-.type   ${PREFIX}_mpdblsubx2_asm,\@function,3
-${PREFIX}_mpdblsubx2_asm:
-.cfi_startproc
-  push   %r12
-.cfi_adjust_cfa_offset 8
-.cfi_offset r12, -16
-  push   %r13
-.cfi_adjust_cfa_offset 8
-.cfi_offset r13, -24
-
-  xor   %rax, %rax
-
-  # ci:low = c:low - a:low
-  mov    0x0(%rdx), %r8
-  mov    0x8(%rdx), %r9
-  mov   0x10(%rdx), %r10
-  mov   0x18(%rdx), %r11
-  mov   0x20(%rdx), %r12
-  mov   0x28(%rdx), %r13
-  mov   0x30(%rdx), %rcx
-  sub    0x0(%rdi), %r8
-  sbb    0x8(%rdi), %r9
-  sbb   0x10(%rdi), %r10
-  sbb   0x18(%rdi), %r11
-  sbb   0x20(%rdi), %r12
-  sbb   0x28(%rdi), %r13
-  sbb   0x30(%rdi), %rcx
-  adc   \$0x0, %rax
-
-  # c:low = ci:low - b:low
-  sub    0x0(%rsi), %r8
-  sbb    0x8(%rsi), %r9
-  sbb   0x10(%rsi), %r10
-  sbb   0x18(%rsi), %r11
-  sbb   0x20(%rsi), %r12
-  sbb   0x28(%rsi), %r13
-  sbb   0x30(%rsi), %rcx
-  adc   \$0x0, %rax
-
-  # store c:low
-  mov   %r8,   0x0(%rdx)
-  mov   %r9,   0x8(%rdx)
-  mov   %r10, 0x10(%rdx)
-  mov   %r11, 0x18(%rdx)
-  mov   %r12, 0x20(%rdx)
-  mov   %r13, 0x28(%rdx)
-  mov   %rcx, 0x30(%rdx)
-
-  # ci:high = c:high - a:high
-  mov   0x38(%rdx), %r8
-  mov   0x40(%rdx), %r9
-  mov   0x48(%rdx), %r10
-  mov   0x50(%rdx), %r11
-  mov   0x58(%rdx), %r12
-  mov   0x60(%rdx), %r13
-  mov   0x68(%rdx), %rcx
-
-  sub   %rax, %r8
-  sbb   0x38(%rdi), %r8
-  sbb   0x40(%rdi), %r9
-  sbb   0x48(%rdi), %r10
-  sbb   0x50(%rdi), %r11
-  sbb   0x58(%rdi), %r12
-  sbb   0x60(%rdi), %r13
-  sbb   0x68(%rdi), %rcx
-
-  # c:high = ci:high - b:high
-  sub   0x38(%rsi), %r8
-  sbb   0x40(%rsi), %r9
-  sbb   0x48(%rsi), %r10
-  sbb   0x50(%rsi), %r11
-  sbb   0x58(%rsi), %r12
-  sbb   0x60(%rsi), %r13
-  sbb   0x68(%rsi), %rcx
-
-  # store c:high
-  mov   %r8,  0x38(%rdx)
-  mov   %r9,  0x40(%rdx)
-  mov   %r10, 0x48(%rdx)
-  mov   %r11, 0x50(%rdx)
-  mov   %r12, 0x58(%rdx)
-  mov   %r13, 0x60(%rdx)
-  mov   %rcx, 0x68(%rdx)
-
-  pop %r13
-.cfi_adjust_cfa_offset -8
-  pop %r12
-.cfi_adjust_cfa_offset -8
-  ret
-.cfi_endproc
-
-___
-
-sub redc_common {
-  my ($mul01, $mul23, $mul45, $mul67)=@_;
-  my $body=<<___;
-    $mul01
-    xor   %rcx, %rcx
-    add   0x18(%rdi), %r8
-    adc   0x20(%rdi), %r9
-    adc   0x28(%rdi), %r10
-    adc   0x30(%rdi), %r11
-    adc   0x38(%rdi), %r12
-    adc   0x40(%rdi), %r13
-    adc   0x48(%rdi), %rcx
-    mov   %r8, 0x18(%rdi)
-    mov   %r9, 0x20(%rdi)
-    mov   %r10, 0x28(%rdi)
-    mov   %r11, 0x30(%rdi)
-    mov   %r12, 0x38(%rdi)
-    mov   %r13, 0x40(%rdi)
-    mov   %rcx, 0x48(%rdi)
-    mov   0x50(%rdi), %r8
-    mov   0x58(%rdi), %r9
-    mov   0x60(%rdi), %r10
-    mov   0x68(%rdi), %r11
-    adc   \$0x0, %r8
-    adc   \$0x0, %r9
-    adc   \$0x0, %r10
-    adc   \$0x0, %r11
-    mov   %r8, 0x50(%rdi)
-    mov   %r9, 0x58(%rdi)
-    mov   %r10, 0x60(%rdi)
-    mov   %r11, 0x68(%rdi)
-
-    $mul23
-    xor   %rcx, %rcx
-    add   0x28(%rdi), %r8
-    adc   0x30(%rdi), %r9
-    adc   0x38(%rdi), %r10
-    adc   0x40(%rdi), %r11
-    adc   0x48(%rdi), %r12
-    adc   0x50(%rdi), %r13
-    adc   0x58(%rdi), %rcx
-    mov   %r8, 0x28(%rdi)
-    mov   %r9, 0x30(%rdi)
-    mov   %r10, 0x38(%rdi)
-    mov   %r11, 0x40(%rdi)
-    mov   %r12, 0x48(%rdi)
-    mov   %r13, 0x50(%rdi)
-    mov   %rcx, 0x58(%rdi)
-    mov   0x60(%rdi), %r8
-    mov   0x68(%rdi), %r9
-    adc   \$0x0, %r8
-    adc   \$0x0, %r9
-    mov   %r8, 0x60(%rdi)
-    mov   %r9, 0x68(%rdi)
-
-    $mul45
-    xor   %rcx, %rcx
-    add   0x38(%rdi), %r8
-    adc   0x40(%rdi), %r9
-    adc   0x48(%rdi), %r10
-    adc   0x50(%rdi), %r11
-    adc   0x58(%rdi), %r12
-    adc   0x60(%rdi), %r13
-    adc   0x68(%rdi), %rcx
-    mov   %r8,   0x0(%rsi)    # C0
-    mov   %r9,   0x8(%rsi)    # C1
-    mov   %r10, 0x48(%rdi)
-    mov   %r11, 0x50(%rdi)
-    mov   %r12, 0x58(%rdi)
-    mov   %r13, 0x60(%rdi)
-    mov   %rcx, 0x68(%rdi)
-
-    $mul67
-    add   0x48(%rdi), %r8
-    adc   0x50(%rdi), %r9
-    adc   0x58(%rdi), %r10
-    adc   0x60(%rdi), %r11
-    adc   0x68(%rdi), %r12
-    mov   %r8,  0x10(%rsi)    # C2
-    mov   %r9,  0x18(%rsi)    # C3
-    mov   %r10, 0x20(%rsi)    # C4
-    mov   %r11, 0x28(%rsi)    # C5
-    mov   %r12, 0x30(%rsi)    # C6
-___
-  return $body;
-}
-
-# Optimized Montgomery reduction for CPUs, based on method described
-# in Faz-Hernandez et al. https://eprint.iacr.org/2017/1015.
-# Operation: c [rsi] = a [rdi]
-# NOTE: a=c is not allowed
-sub sike_rdc {
-  my $jump_redc_bdw=&alt_impl(".Lrdc_bdw") if ($bmi2_adx);
-  # a[0-1] x .Lp434p1 --> result: r8:r13
-  my $mulx1=&mulx128x256( 0,"%rdi",".Lp434p1(%rip)",map("%r$_",(8..13)),"%rcx");
-  # a[2-3] x .Lp434p1 --> result: r8:r13
-  my $mulx2=&mulx128x256(16,"%rdi",".Lp434p1(%rip)",map("%r$_",(8..13)),"%rcx");
-  # a[4-5] x .Lp434p1 --> result: r8:r13
-  my $mulx3=&mulx128x256(32,"%rdi",".Lp434p1(%rip)",map("%r$_",(8..13)),"%rcx");
-  # a[6-7] x .Lp434p1 --> result: r8:r13
-  my $mulx4=&mulx64x256( 48,"%rdi",".Lp434p1(%rip)",map("%r$_",(8..13)));
-
-  # a[0-1] x .Lp434p1 --> result: r8:r13
-  my $mul1=&mul128x256( 0,"%rdi",".Lp434p1(%rip)",map("%r$_",(8..14)),"%rcx");
-  # a[2-3] x .Lp434p1 --> result: r8:r13
-  my $mul2=&mul128x256(16,"%rdi",".Lp434p1(%rip)",map("%r$_",(8..14)),"%rcx");
-  # a[4-5] x .Lp434p1 --> result: r8:r13
-  my $mul3=&mul128x256(32,"%rdi",".Lp434p1(%rip)",map("%r$_",(8..14)),"%rcx");
-  # a[6-7] x .Lp434p1 --> result: r8:r13
-  my $mul4=&mul64x256( 48,"%rdi",".Lp434p1(%rip)",map("%r$_",(8..13)));
-
-  my $redc_mul=&redc_common($mul1, $mul2, $mul3, $mul4);
-  my $redc_bdw=&redc_common($mulx1, $mulx2, $mulx3, $mulx4) if ($bmi2_adx);
-
-  # REDC for Broadwell CPUs
-  my $code=<<___;
-    .Lrdc_bdw:
-    .cfi_startproc
-      # sike_fprdc has already pushed r12--15 by this point.
-    .cfi_adjust_cfa_offset 32
-    .cfi_offset r12, -16
-    .cfi_offset r13, -24
-    .cfi_offset r14, -32
-    .cfi_offset r15, -40
-
-    $redc_bdw
-
-      pop %r15
-    .cfi_adjust_cfa_offset -8
-    .cfi_same_value r15
-      pop %r14
-    .cfi_adjust_cfa_offset -8
-    .cfi_same_value r14
-      pop %r13
-    .cfi_adjust_cfa_offset -8
-    .cfi_same_value r13
-      pop %r12
-    .cfi_adjust_cfa_offset -8
-    .cfi_same_value r12
-      ret
-    .cfi_endproc
-___
-
-  # REDC for CPUs older than Broadwell
-  $code.=<<___;
-    .globl  ${PREFIX}_fprdc
-    .type   ${PREFIX}_fprdc,\@function,3
-    ${PREFIX}_fprdc:
-    .cfi_startproc
-      push %r12
-    .cfi_adjust_cfa_offset  8
-    .cfi_offset r12, -16
-      push %r13
-    .cfi_adjust_cfa_offset  8
-    .cfi_offset r13, -24
-      push %r14
-    .cfi_adjust_cfa_offset  8
-    .cfi_offset r14, -32
-      push %r15
-    .cfi_adjust_cfa_offset  8
-    .cfi_offset r15, -40
-
-      # Jump to optimized implementation if
-      # CPU supports ADCX/ADOX/MULX
-      $jump_redc_bdw
-      # Otherwise use generic implementation
-      $redc_mul
-
-      pop %r15
-    .cfi_adjust_cfa_offset -8
-      pop %r14
-    .cfi_adjust_cfa_offset -8
-      pop %r13
-    .cfi_adjust_cfa_offset -8
-      pop %r12
-    .cfi_adjust_cfa_offset -8
-      ret
-    .cfi_endproc
-___
-  return $code;
-}
-$code.=&sike_rdc();
-
-# 434-bit multiplication using Karatsuba (one level),
-# schoolbook (one level). Uses MULX/ADOX/ADCX instructions
-# available on Broadwell micro-architectures and newer.
-sub mul_bdw {
-  # [rsp] <- (AH+AL) x (BH+BL)
-  my $mul256_low=&mul256(0,"%rsp",32,"%rsp",0,"%rsp",map("%r$_",(8..15)),"%rbx","%rbp");
-  # [rcx] <- AL x BL
-  my $mul256_albl=&mul256(0,"%rdi",0,"%rsi",0,"%rcx",map("%r$_",(8..15)),"%rbx","%rbp");
-  # [rcx+64] <- AH x BH
-  my $mul192_ahbh=&mul192(32,"%rdi",32,"%rsi",64,"%rcx",map("%r$_",(8..14)));
-
-  $body=<<___;
-
-    mov   %rdx, %rcx
-    xor   %rax, %rax
-
-    # r8-r11 <- AH + AL, rax <- mask
-    mov    0x0(%rdi), %r8
-    mov    0x8(%rdi), %r9
-    mov   0x10(%rdi), %r10
-    mov   0x18(%rdi), %r11
-
-    push %rbx
-  .cfi_adjust_cfa_offset 8
-  .cfi_offset rbx, -48
-    push %rbp
-  .cfi_offset rbp, -56
-  .cfi_adjust_cfa_offset 8
-    sub \$96, %rsp
-  .cfi_adjust_cfa_offset 96
-
-    add   0x20(%rdi), %r8
-    adc   0x28(%rdi), %r9
-    adc   0x30(%rdi), %r10
-    adc   \$0x0, %r11
-    sbb   \$0x0, %rax
-    mov   %r8,   0x0(%rsp)
-    mov   %r9,   0x8(%rsp)
-    mov   %r10, 0x10(%rsp)
-    mov   %r11, 0x18(%rsp)
-
-    # r12-r15 <- BH + BL, rbx <- mask
-    xor   %rbx, %rbx
-    mov    0x0(%rsi), %r12
-    mov    0x8(%rsi), %r13
-    mov   0x10(%rsi), %r14
-    mov   0x18(%rsi), %r15
-    add   0x20(%rsi), %r12
-    adc   0x28(%rsi), %r13
-    adc   0x30(%rsi), %r14
-    adc   \$0x0, %r15
-    sbb   \$0x0, %rbx
-    mov   %r12, 0x20(%rsp)
-    mov   %r13, 0x28(%rsp)
-    mov   %r14, 0x30(%rsp)
-    mov   %r15, 0x38(%rsp)
-
-    # r12-r15 <- masked (BH + BL)
-    and   %rax, %r12
-    and   %rax, %r13
-    and   %rax, %r14
-    and   %rax, %r15
-
-    # r8-r11 <- masked (AH + AL)
-    and   %rbx, %r8
-    and   %rbx, %r9
-    and   %rbx, %r10
-    and   %rbx, %r11
-
-    # r8-r11 <- masked (AH + AL) + masked (BH + BL)
-    add   %r12, %r8
-    adc   %r13, %r9
-    adc   %r14, %r10
-    adc   %r15, %r11
-    mov    %r8, 0x40(%rsp)
-    mov    %r9, 0x48(%rsp)
-    mov   %r10, 0x50(%rsp)
-    mov   %r11, 0x58(%rsp)
-
-    # [rsp] <- CM = (AH+AL) x (BH+BL)
-    $mul256_low
-    # [rcx] <- CL = AL x BL (Result c0-c3)
-    $mul256_albl
-    # [rcx+64] <- CH = AH x BH
-    $mul192_ahbh
-
-    # r8-r11 <- (AH+AL) x (BH+BL), final step
-    mov   0x40(%rsp),  %r8
-    mov   0x48(%rsp),  %r9
-    mov   0x50(%rsp), %r10
-    mov   0x58(%rsp), %r11
-
-    mov   0x20(%rsp), %rax
-    add   %rax, %r8
-    mov   0x28(%rsp), %rax
-    adc   %rax, %r9
-    mov   0x30(%rsp), %rax
-    adc   %rax, %r10
-    mov   0x38(%rsp), %rax
-    adc   %rax, %r11
-
-    # [rsp], x3-x5 <- (AH+AL) x (BH+BL) - ALxBL
-    mov    0x0(%rsp), %r12
-    mov    0x8(%rsp), %r13
-    mov   0x10(%rsp), %r14
-    mov   0x18(%rsp), %r15
-    sub    0x0(%rcx), %r12
-    sbb    0x8(%rcx), %r13
-    sbb   0x10(%rcx), %r14
-    sbb   0x18(%rcx), %r15
-    sbb   0x20(%rcx), %r8
-    sbb   0x28(%rcx), %r9
-    sbb   0x30(%rcx), %r10
-    sbb   0x38(%rcx), %r11
-
-    # r8-r15 <- (AH+AL) x (BH+BL) - ALxBL - AHxBH
-    sub   0x40(%rcx), %r12
-    sbb   0x48(%rcx), %r13
-    sbb   0x50(%rcx), %r14
-    sbb   0x58(%rcx), %r15
-    sbb   0x60(%rcx), %r8
-    sbb   0x68(%rcx), %r9
-    sbb   \$0x0, %r10
-    sbb   \$0x0, %r11
-
-    add   0x20(%rcx), %r12
-    mov   %r12, 0x20(%rcx)    # Result C4-C7
-    adc   0x28(%rcx), %r13
-    mov   %r13, 0x28(%rcx)
-    adc   0x30(%rcx), %r14
-    mov   %r14, 0x30(%rcx)
-    adc   0x38(%rcx), %r15
-    mov   %r15, 0x38(%rcx)
-    adc   0x40(%rcx), %r8
-    mov   %r8, 0x40(%rcx)     # Result C8-C15
-    adc   0x48(%rcx), %r9
-    mov   %r9, 0x48(%rcx)
-    adc   0x50(%rcx), %r10
-    mov   %r10, 0x50(%rcx)
-    adc   0x58(%rcx), %r11
-    mov   %r11, 0x58(%rcx)
-    mov   0x60(%rcx), %r12
-    adc   \$0x0, %r12
-    mov   %r12, 0x60(%rcx)
-    mov   0x68(%rcx), %r13
-    adc   \$0x0, %r13
-    mov   %r13, 0x68(%rcx)
-
-    add \$96, %rsp
-  .cfi_adjust_cfa_offset -96
-    pop %rbp
-  .cfi_adjust_cfa_offset -8
-  .cfi_same_value rbp
-    pop %rbx
-  .cfi_adjust_cfa_offset -8
-  .cfi_same_value rbx
-___
-  return $body;
-}
-
-# 434-bit multiplication using Karatsuba (one level),
-# schoolbook (one level).
-sub mul {
-  my $code=<<___;
-    mov %rdx, %rcx
-
-    sub \$112,  %rsp           # Allocating space in stack
-  .cfi_adjust_cfa_offset 112
-
-    # rcx[0-3] <- AH+AL
-    xor %rax, %rax
-    mov 0x20(%rdi), %r8
-    mov 0x28(%rdi), %r9
-    mov 0x30(%rdi), %r10
-    xor       %r11, %r11
-    add  0x0(%rdi), %r8
-    adc  0x8(%rdi), %r9
-    adc 0x10(%rdi), %r10
-    adc 0x18(%rdi), %r11
-    # store AH+AL mask
-    sbb  \$0,  %rax
-    mov %rax, 0x40(%rsp)
-    # store AH+AL in 0-0x18(rcx)
-    mov %r8,   0x0(%rcx)
-    mov %r9,   0x8(%rcx)
-    mov %r10, 0x10(%rcx)
-    mov %r11, 0x18(%rcx)
-
-    # r12-r15 <- BH+BL
-    xor %rdx, %rdx
-    mov 0x20(%rsi), %r12
-    mov 0x28(%rsi), %r13
-    mov 0x30(%rsi), %r14
-    xor       %r15, %r15
-    add  0x0(%rsi), %r12
-    adc  0x8(%rsi), %r13
-    adc 0x10(%rsi), %r14
-    adc 0x18(%rsi), %r15
-    sbb \$0x0, %rdx
-    # store BH+BL mask
-    mov %rdx, 0x48(%rsp)
-
-    # (rsp[0-0x38]) <- (AH+AL)*(BH+BL)
-    mov (%rcx), %rax
-    mul %r12
-    mov %rax, (%rsp)            # c0
-    mov %rdx, %r8
-
-    xor %r9,  %r9
-    mov (%rcx), %rax
-    mul %r13
-    add %rax, %r8
-    adc %rdx, %r9
-
-    xor %r10, %r10
-    mov 0x8(%rcx), %rax
-    mul %r12
-    add %rax, %r8
-    mov %r8,  0x8(%rsp)          # c1
-    adc %rdx, %r9
-    adc \$0x0,%r10
-
-    xor %r8, %r8
-    mov (%rcx), %rax
-    mul %r14
-    add %rax, %r9
-    adc %rdx, %r10
-    adc \$0x0,%r8
-
-    mov 0x10(%rcx), %rax
-    mul %r12
-    add %rax, %r9
-    adc %rdx, %r10
-    adc \$0x0,%r8
-
-    mov 0x8(%rcx), %rax
-    mul %r13
-    add %rax, %r9
-    mov %r9, 0x10(%rsp)         # c2
-    adc %rdx, %r10
-    adc \$0x0, %r8
-
-    xor %r9, %r9
-    mov (%rcx),%rax
-    mul %r15
-    add %rax, %r10
-    adc %rdx, %r8
-    adc \$0x0,%r9
-
-    mov 0x18(%rcx), %rax
-    mul %r12
-    add %rax, %r10
-    adc %rdx, %r8
-    adc \$0x0,%r9
-
-    mov 0x8(%rcx), %rax
-    mul %r14
-    add %rax, %r10
-    adc %rdx, %r8
-    adc \$0x0,%r9
-
-    mov 0x10(%rcx), %rax
-    mul %r13
-    add %rax, %r10
-    mov %r10, 0x18(%rsp)        # c3
-    adc %rdx, %r8
-    adc \$0x0, %r9
-
-    xor %r10, %r10
-    mov 0x8(%rcx), %rax
-    mul %r15
-    add %rax, %r8
-    adc %rdx, %r9
-    adc \$0x0,%r10
-
-    mov 0x18(%rcx), %rax
-    mul %r13
-    add %rax, %r8
-    adc %rdx, %r9
-    adc \$0x0,%r10
-
-    mov 0x10(%rcx), %rax
-    mul %r14
-    add %rax, %r8               # c4
-    mov  %r8, 0x20(%rsp)
-    adc %rdx, %r9
-    adc \$0x0,%r10
-
-    xor %r11, %r11
-    mov 0x10(%rcx), %rax
-    mul %r15
-    add %rax, %r9
-    adc %rdx, %r10
-    adc \$0x0,%r11
-
-    mov 0x18(%rcx), %rax
-    mul %r14
-    add %rax, %r9               # c5
-    mov  %r9, 0x28(%rsp)
-    adc %rdx, %r10
-    adc \$0x0,%r11
-
-    mov 0x18(%rcx), %rax
-    mul %r15
-    add %rax, %r10              # c6
-    mov %r10, 0x30(%rsp)
-    adc %rdx, %r11              # c7
-    mov %r11, 0x38(%rsp)
-
-    # r12-r15 <- masked (BH + BL)
-    mov 0x40(%rsp), %rax
-    and %rax, %r12
-    and %rax, %r13
-    and %rax, %r14
-    and %rax, %r15
-
-    # r8-r11 <- masked (AH + AL)
-    mov 0x48(%rsp),%rax
-    mov 0x00(rcx), %r8
-    and %rax, %r8
-    mov 0x08(rcx), %r9
-    and %rax, %r9
-    mov 0x10(rcx), %r10
-    and %rax, %r10
-    mov 0x18(rcx), %r11
-    and %rax, %r11
-
-    # r12-r15 <- masked (AH + AL) + masked (BH + BL)
-    add  %r8, %r12
-    adc  %r9, %r13
-    adc %r10, %r14
-    adc %r11, %r15
-
-    # rsp[0x20-0x38] <- (AH+AL) x (BH+BL) high
-    mov 0x20(%rsp), %rax
-    add %rax, %r12
-    mov 0x28(%rsp), %rax
-    adc %rax, %r13
-    mov 0x30(%rsp), %rax
-    adc %rax, %r14
-    mov 0x38(%rsp), %rax
-    adc %rax, %r15
-    mov %r12, 0x50(%rsp)
-    mov %r13, 0x58(%rsp)
-    mov %r14, 0x60(%rsp)
-    mov %r15, 0x68(%rsp)
-
-    # [rcx] <- CL = AL x BL
-    mov (%rdi), %r11
-    mov (%rsi), %rax
-    mul %r11
-    xor %r9,  %r9
-    mov %rax, (%rcx)              # c0
-    mov %rdx, %r8
-
-    mov 0x10(%rdi), %r14
-    mov 0x8(%rsi), %rax
-    mul %r11
-    xor %r10, %r10
-    add %rax, %r8
-    adc %rdx, %r9
-
-    mov 0x8(%rdi), %r12
-    mov (%rsi), %rax
-    mul %r12
-    add %rax, %r8
-    mov %r8,  0x8(%rcx)            # c1
-    adc %rdx, %r9
-    adc \$0x0,%r10
-
-    xor %r8,  %r8
-    mov 0x10(%rsi), %rax
-    mul %r11
-    add %rax, %r9
-    adc %rdx, %r10
-    adc \$0x0,%r8
-
-    mov (%rsi),%r13
-    mov %r14,  %rax
-    mul %r13
-    add %rax, %r9
-    adc %rdx, %r10
-    adc \$0x0,%r8
-
-    mov 0x8(%rsi), %rax
-    mul %r12
-    add %rax, %r9
-    mov %r9, 0x10(%rcx)           # c2
-    adc %rdx, %r10
-    adc \$0x0,%r8
-
-    xor %r9,  %r9
-    mov 0x18(%rsi), %rax
-    mul %r11
-    mov 0x18(%rdi), %r15
-    add %rax, %r10
-    adc %rdx, %r8
-    adc \$0x0,%r9
-
-    mov %r15, %rax
-    mul %r13
-    add %rax, %r10
-    adc %rdx, %r8
-    adc \$0x0,%r9
-
-    mov 0x10(%rsi), %rax
-    mul %r12
-    add %rax, %r10
-    adc %rdx, %r8
-    adc \$0x0,%r9
-
-    mov 0x8(%rsi), %rax
-    mul %r14
-    add %rax, %r10
-    mov %r10, 0x18(%rcx)           # c3
-    adc %rdx, %r8
-    adc \$0x0,%r9
-
-    xor %r10, %r10
-    mov 0x18(%rsi), %rax
-    mul %r12
-    add %rax, %r8
-    adc %rdx, %r9
-    adc \$0x0,%r10
-
-    mov 0x8(%rsi), %rax
-    mul %r15
-    add %rax, %r8
-    adc %rdx, %r9
-    adc \$0x0,%r10
-
-    mov 0x10(%rsi), %rax
-    mul %r14
-    add %rax, %r8
-    mov %r8,  0x20(%rcx)           # c4
-    adc %rdx, %r9
-    adc \$0x0,%r10
-
-    xor %r8, %r8
-    mov 0x18(%rsi), %rax
-    mul %r14
-    add %rax, %r9
-    adc %rdx, %r10
-    adc \$0x0,%r8
-
-    mov 0x10(%rsi), %rax
-    mul %r15
-    add %rax, %r9
-    mov %r9,  0x28(%rcx)           # c5
-    adc %rdx, %r10
-    adc \$0x0,%r8
-
-    mov 0x18(%rsi), %rax
-    mul %r15
-    add %rax, %r10
-    mov %r10, 0x30(%rcx)          # c6
-    adc %rdx, %r8
-    mov %r8,  0x38(%rcx)          # c7
-
-    # rcx[0x40-0x68] <- AH*BH
-    # multiplies 2 192-bit numbers A,B
-    mov 0x20(%rdi), %r11
-    mov 0x20(%rsi), %rax
-    mul %r11
-    xor %r9,  %r9
-    mov %rax, 0x40(%rcx)   # c0
-    mov %rdx, %r8
-
-    mov 0x30(%rdi), %r14
-    mov 0x28(%rsi), %rax
-    mul %r11
-    xor %r10, %r10
-    add %rax, %r8
-    adc %rdx, %r9
-
-    mov 0x28(%rdi), %r12
-    mov 0x20(%rsi), %rax
-    mul %r12
-    add %rax, %r8
-    mov %r8,  0x48(%rcx)    # c1
-    adc %rdx, %r9
-    adc \$0x0,%r10
-
-    xor %r8,  %r8
-    mov 0x30(%rsi), %rax
-    mul %r11
-    add %rax, %r9
-    adc %rdx, %r10
-    adc \$0x0,%r8
-
-    mov 0x20(%rsi), %r13
-    mov %r14, %rax
-    mul %r13
-    add %rax, %r9
-    adc %rdx, %r10
-    adc \$0x0,%r8
-
-    mov 0x28(%rsi), %rax
-    mul %r12
-    add %rax, %r9
-    mov %r9,  0x50(%rcx)    # c2
-    adc %rdx, %r10
-    adc \$0x0,%r8
-
-    mov 0x30(%rsi), %rax
-    mul %r12
-    xor %r12, %r12
-    add %rax, %r10
-    adc %rdx, %r8
-    adc \$0x0,%r12
-
-    mov 0x28(%rsi), %rax
-    mul %r14
-    add %rax, %r10
-    adc %rdx, %r8
-    adc \$0x0,%r12
-    mov %r10, 0x58(%rcx)   # c3
-
-    mov 0x30(%rsi), %rax
-    mul %r14
-    add %rax, %r8
-    adc \$0x0,%r12
-    mov %r8,  0x60(%rcx)    # c4
-
-    add %r12, %rdx         # c5
-
-    # [r8-r15] <- (AH+AL)x(BH+BL) - ALxBL
-    mov  0x0(%rsp), %r8
-    sub  0x0(%rcx), %r8
-    mov  0x8(%rsp), %r9
-    sbb  0x8(%rcx), %r9
-    mov 0x10(%rsp), %r10
-    sbb 0x10(%rcx), %r10
-    mov 0x18(%rsp), %r11
-    sbb 0x18(%rcx), %r11
-    mov 0x50(%rsp), %r12
-    sbb 0x20(%rcx), %r12
-    mov 0x58(%rsp), %r13
-    sbb 0x28(%rcx), %r13
-    mov 0x60(%rsp), %r14
-    sbb 0x30(%rcx), %r14
-    mov 0x68(%rsp), %r15
-    sbb 0x38(%rcx), %r15
-
-    # [r8-r15] <- (AH+AL) x (BH+BL) - ALxBL - AHxBH
-    mov 0x40(%rcx), %rax
-    sub %rax, %r8
-    mov 0x48(%rcx), %rax
-    sbb %rax, %r9
-    mov 0x50(%rcx), %rax
-    sbb %rax, %r10
-    mov 0x58(%rcx), %rax
-    sbb %rax, %r11
-    mov 0x60(%rcx), %rax
-    sbb %rax, %r12
-    sbb %rdx, %r13
-    sbb \$0x0,%r14
-    sbb \$0x0,%r15
-
-    # Final result
-    add 0x20(%rcx), %r8
-    mov %r8, 0x20(%rcx)    # Result C4-C7
-    adc 0x28(%rcx), %r9
-    mov %r9, 0x28(%rcx)
-    adc 0x30(%rcx), %r10
-    mov %r10, 0x30(%rcx)
-    adc 0x38(%rcx), %r11
-    mov %r11, 0x38(%rcx)
-    adc 0x40(%rcx), %r12
-    mov %r12, 0x40(%rcx)   # Result C8-C13
-    adc 0x48(%rcx), %r13
-    mov %r13, 0x48(%rcx)
-    adc 0x50(%rcx), %r14
-    mov %r14, 0x50(%rcx)
-    adc 0x58(%rcx), %r15
-    mov %r15, 0x58(%rcx)
-    mov 0x60(%rcx), %r12
-    adc \$0x0, %r12
-    mov %r12, 0x60(%rcx)
-    adc \$0x0, %rdx
-    mov %rdx, 0x68(%rcx)
-
-    add \$112, %rsp        # Restoring space in stack
-  .cfi_adjust_cfa_offset -112
-___
-
-  return $code;
-}
-
-#  Integer multiplication based on Karatsuba method
-#  Operation: c [rdx] = a [rdi] * b [rsi]
-#  NOTE: a=c or b=c are not allowed
-sub sike_mul {
-  my $jump_mul_bdw=&alt_impl(".Lmul_bdw") if ($bmi2_adx);
-  # MUL for Broadwell CPUs
-  my $mul_bdw=&mul_bdw() if ($bmi2_adx);
-  # MUL for CPUs older than Broadwell
-  my $mul=&mul();
-
-  my $body=<<___;
-  .Lmul_bdw:
-  .cfi_startproc
-    # sike_mpmul has already pushed r12--15 by this point.
-  .cfi_adjust_cfa_offset 32
-  .cfi_offset r12, -16
-  .cfi_offset r13, -24
-  .cfi_offset r14, -32
-  .cfi_offset r15, -40
-
-    $mul_bdw
-
-    pop %r15
-  .cfi_adjust_cfa_offset -8
-  .cfi_same_value r15
-    pop %r14
-  .cfi_adjust_cfa_offset -8
-  .cfi_same_value r14
-    pop %r13
-  .cfi_adjust_cfa_offset -8
-  .cfi_same_value r13
-    pop %r12
-  .cfi_adjust_cfa_offset -8
-  .cfi_same_value r12
-      ret
-  .cfi_endproc
-
-  .globl  ${PREFIX}_mpmul
-  .type   ${PREFIX}_mpmul,\@function,3
-  ${PREFIX}_mpmul:
-  .cfi_startproc
-    push %r12
-  .cfi_adjust_cfa_offset 8
-  .cfi_offset r12, -16
-    push %r13
-  .cfi_adjust_cfa_offset 8
-  .cfi_offset r13, -24
-    push %r14
-  .cfi_adjust_cfa_offset 8
-  .cfi_offset r14, -32
-    push %r15
-  .cfi_adjust_cfa_offset 8
-  .cfi_offset r15, -40
-
-    # Jump to optimized implementation if
-    # CPU supports ADCX/ADOX/MULX
-    $jump_mul_bdw
-    # Otherwise use generic implementation
-    $mul
-
-    pop %r15
-  .cfi_adjust_cfa_offset -8
-    pop %r14
-  .cfi_adjust_cfa_offset -8
-    pop %r13
-  .cfi_adjust_cfa_offset -8
-    pop %r12
-  .cfi_adjust_cfa_offset -8
-    ret
-  .cfi_endproc
-
-___
-  return $body;
-}
-
-$code.=&sike_mul();
-
-foreach (split("\n",$code)) {
-  s/\`([^\`]*)\`/eval($1)/ge;
-  print $_,"\n";
-}
-
-close STDOUT;
diff --git a/src/third_party/sike/asm/fp_generic.c b/src/third_party/sike/asm/fp_generic.c
deleted file mode 100644
index 991ad1e..0000000
--- a/src/third_party/sike/asm/fp_generic.c
+++ /dev/null
@@ -1,181 +0,0 @@
-/********************************************************************************************
-* SIDH: an efficient supersingular isogeny cryptography library
-*
-* Abstract: portable modular arithmetic for P503
-*********************************************************************************************/
-
-#include <openssl/base.h>
-
-#if defined(OPENSSL_NO_ASM) || \
-    (!defined(OPENSSL_X86_64) && !defined(OPENSSL_AARCH64))
-
-#include "../utils.h"
-#include "../fpx.h"
-
-// Global constants
-extern const struct params_t sike_params;
-
-static void digit_x_digit(const crypto_word_t a, const crypto_word_t b, crypto_word_t* c)
-{ // Digit multiplication, digit * digit -> 2-digit result
-    crypto_word_t al, ah, bl, bh, temp;
-    crypto_word_t albl, albh, ahbl, ahbh, res1, res2, res3, carry;
-    crypto_word_t mask_low = (crypto_word_t)(-1) >> (sizeof(crypto_word_t)*4);
-    crypto_word_t mask_high = (crypto_word_t)(-1) << (sizeof(crypto_word_t)*4);
-
-    al = a & mask_low;                              // Low part
-    ah = a >> (sizeof(crypto_word_t) * 4);          // High part
-    bl = b & mask_low;
-    bh = b >> (sizeof(crypto_word_t) * 4);
-
-    albl = al*bl;
-    albh = al*bh;
-    ahbl = ah*bl;
-    ahbh = ah*bh;
-    c[0] = albl & mask_low;                         // C00
-
-    res1 = albl >> (sizeof(crypto_word_t) * 4);
-    res2 = ahbl & mask_low;
-    res3 = albh & mask_low;
-    temp = res1 + res2 + res3;
-    carry = temp >> (sizeof(crypto_word_t) * 4);
-    c[0] ^= temp << (sizeof(crypto_word_t) * 4);    // C01
-
-    res1 = ahbl >> (sizeof(crypto_word_t) * 4);
-    res2 = albh >> (sizeof(crypto_word_t) * 4);
-    res3 = ahbh & mask_low;
-    temp = res1 + res2 + res3 + carry;
-    c[1] = temp & mask_low;                         // C10
-    carry = temp & mask_high;
-    c[1] ^= (ahbh & mask_high) + carry;             // C11
-}
-
-void sike_fpadd(const felm_t a, const felm_t b, felm_t c)
-{ // Modular addition, c = a+b mod p434.
-  // Inputs: a, b in [0, 2*p434-1]
-  // Output: c in [0, 2*p434-1]
-    unsigned int i, carry = 0;
-    crypto_word_t mask;
-
-    for (i = 0; i < NWORDS_FIELD; i++) {
-        ADDC(carry, a[i], b[i], carry, c[i]);
-    }
-
-    carry = 0;
-    for (i = 0; i < NWORDS_FIELD; i++) {
-        SUBC(carry, c[i], sike_params.prime_x2[i], carry, c[i]);
-    }
-    mask = 0 - (crypto_word_t)carry;
-
-    carry = 0;
-    for (i = 0; i < NWORDS_FIELD; i++) {
-        ADDC(carry, c[i], sike_params.prime_x2[i] & mask, carry, c[i]);
-    }
-}
-
-void sike_fpsub(const felm_t a, const felm_t b, felm_t c)
-{ // Modular subtraction, c = a-b mod p434.
-  // Inputs: a, b in [0, 2*p434-1]
-  // Output: c in [0, 2*p434-1]
-    unsigned int i, borrow = 0;
-    crypto_word_t mask;
-
-    for (i = 0; i < NWORDS_FIELD; i++) {
-        SUBC(borrow, a[i], b[i], borrow, c[i]);
-    }
-    mask = 0 - (crypto_word_t)borrow;
-
-    borrow = 0;
-    for (i = 0; i < NWORDS_FIELD; i++) {
-        ADDC(borrow, c[i], sike_params.prime_x2[i] & mask, borrow, c[i]);
-    }
-}
-
-void sike_mpmul(const felm_t a, const felm_t b, dfelm_t c)
-{ // Multiprecision comba multiply, c = a*b, where lng(a) = lng(b) = NWORDS_FIELD.
-    unsigned int i, j;
-    crypto_word_t t = 0, u = 0, v = 0, UV[2];
-    unsigned int carry = 0;
-
-    for (i = 0; i < NWORDS_FIELD; i++) {
-        for (j = 0; j <= i; j++) {
-            MUL(a[j], b[i-j], UV+1, UV[0]);
-            ADDC(0, UV[0], v, carry, v);
-            ADDC(carry, UV[1], u, carry, u);
-            t += carry;
-        }
-        c[i] = v;
-        v = u;
-        u = t;
-        t = 0;
-    }
-
-    for (i = NWORDS_FIELD; i < 2*NWORDS_FIELD-1; i++) {
-        for (j = i-NWORDS_FIELD+1; j < NWORDS_FIELD; j++) {
-            MUL(a[j], b[i-j], UV+1, UV[0]);
-            ADDC(0, UV[0], v, carry, v);
-            ADDC(carry, UV[1], u, carry, u);
-            t += carry;
-        }
-        c[i] = v;
-        v = u;
-        u = t;
-        t = 0;
-    }
-    c[2*NWORDS_FIELD-1] = v;
-}
-
-void sike_fprdc(felm_t ma, felm_t mc)
-{ // Efficient Montgomery reduction using comba and exploiting the special form of the prime p434.
-  // mc = ma*R^-1 mod p434x2, where R = 2^448.
-  // If ma < 2^448*p434, the output mc is in the range [0, 2*p434-1].
-  // ma is assumed to be in Montgomery representation.
-    unsigned int i, j, carry, count = ZERO_WORDS;
-    crypto_word_t UV[2], t = 0, u = 0, v = 0;
-
-    for (i = 0; i < NWORDS_FIELD; i++) {
-        mc[i] = 0;
-    }
-
-    for (i = 0; i < NWORDS_FIELD; i++) {
-        for (j = 0; j < i; j++) {
-            if (j < (i-ZERO_WORDS+1)) {
-                MUL(mc[j], sike_params.prime_p1[i-j], UV+1, UV[0]);
-                ADDC(0, UV[0], v, carry, v);
-                ADDC(carry, UV[1], u, carry, u);
-                t += carry;
-            }
-        }
-        ADDC(0, v, ma[i], carry, v);
-        ADDC(carry, u, 0, carry, u);
-        t += carry;
-        mc[i] = v;
-        v = u;
-        u = t;
-        t = 0;
-    }
-
-    for (i = NWORDS_FIELD; i < 2*NWORDS_FIELD-1; i++) {
-        if (count > 0) {
-            count -= 1;
-        }
-        for (j = i-NWORDS_FIELD+1; j < NWORDS_FIELD; j++) {
-            if (j < (NWORDS_FIELD-count)) {
-                MUL(mc[j], sike_params.prime_p1[i-j], UV+1, UV[0]);
-                ADDC(0, UV[0], v, carry, v);
-                ADDC(carry, UV[1], u, carry, u);
-                t += carry;
-            }
-        }
-        ADDC(0, v, ma[i], carry, v);
-        ADDC(carry, u, 0, carry, u);
-        t += carry;
-        mc[i-NWORDS_FIELD] = v;
-        v = u;
-        u = t;
-        t = 0;
-    }
-    ADDC(0, v, ma[2*NWORDS_FIELD-1], carry, v);
-    mc[NWORDS_FIELD-1] = v;
-}
-
-#endif  // NO_ASM || (!X86_64 && !AARCH64)
diff --git a/src/third_party/sike/curve_params.c b/src/third_party/sike/curve_params.c
deleted file mode 100644
index a1fbb3f..0000000
--- a/src/third_party/sike/curve_params.c
+++ /dev/null
@@ -1,128 +0,0 @@
-/********************************************************************************************
-* SIDH: an efficient supersingular isogeny cryptography library
-*
-* Abstract: supersingular isogeny parameters and generation of functions for P434
-*********************************************************************************************/
-
-#include "utils.h"
-
-// Parameters for isogeny system "SIKE"
-const struct params_t sike_params = {
-    .prime = {
-        U64_TO_WORDS(0xFFFFFFFFFFFFFFFF), U64_TO_WORDS(0xFFFFFFFFFFFFFFFF),
-        U64_TO_WORDS(0xFFFFFFFFFFFFFFFF), U64_TO_WORDS(0xFDC1767AE2FFFFFF),
-        U64_TO_WORDS(0x7BC65C783158AEA3), U64_TO_WORDS(0x6CFC5FD681C52056),
-        U64_TO_WORDS(0x0002341F27177344)
-    },
-    .prime_p1 = {
-        U64_TO_WORDS(0x0000000000000000), U64_TO_WORDS(0x0000000000000000),
-        U64_TO_WORDS(0x0000000000000000), U64_TO_WORDS(0xFDC1767AE3000000),
-        U64_TO_WORDS(0x7BC65C783158AEA3), U64_TO_WORDS(0x6CFC5FD681C52056),
-        U64_TO_WORDS(0x0002341F27177344)
-    },
-    .prime_x2 = {
-        U64_TO_WORDS(0xFFFFFFFFFFFFFFFE), U64_TO_WORDS(0xFFFFFFFFFFFFFFFF),
-        U64_TO_WORDS(0xFFFFFFFFFFFFFFFF), U64_TO_WORDS(0xFB82ECF5C5FFFFFF),
-        U64_TO_WORDS(0xF78CB8F062B15D47), U64_TO_WORDS(0xD9F8BFAD038A40AC),
-        U64_TO_WORDS(0x0004683E4E2EE688)
-    },
-    .A_gen = {
-        U64_TO_WORDS(0x05ADF455C5C345BF), U64_TO_WORDS(0x91935C5CC767AC2B),
-        U64_TO_WORDS(0xAFE4E879951F0257), U64_TO_WORDS(0x70E792DC89FA27B1),
-        U64_TO_WORDS(0xF797F526BB48C8CD), U64_TO_WORDS(0x2181DB6131AF621F),
-        U64_TO_WORDS(0x00000A1C08B1ECC4), // XPA0
-        U64_TO_WORDS(0x74840EB87CDA7788), U64_TO_WORDS(0x2971AA0ECF9F9D0B),
-        U64_TO_WORDS(0xCB5732BDF41715D5), U64_TO_WORDS(0x8CD8E51F7AACFFAA),
-        U64_TO_WORDS(0xA7F424730D7E419F), U64_TO_WORDS(0xD671EB919A179E8C),
-        U64_TO_WORDS(0x0000FFA26C5A924A), // XPA1
-        U64_TO_WORDS(0xFEC6E64588B7273B), U64_TO_WORDS(0xD2A626D74CBBF1C6),
-        U64_TO_WORDS(0xF8F58F07A78098C7), U64_TO_WORDS(0xE23941F470841B03),
-        U64_TO_WORDS(0x1B63EDA2045538DD), U64_TO_WORDS(0x735CFEB0FFD49215),
-        U64_TO_WORDS(0x0001C4CB77542876), // XQA0
-        U64_TO_WORDS(0xADB0F733C17FFDD6), U64_TO_WORDS(0x6AFFBD037DA0A050),
-        U64_TO_WORDS(0x680EC43DB144E02F), U64_TO_WORDS(0x1E2E5D5FF524E374),
-        U64_TO_WORDS(0xE2DDA115260E2995), U64_TO_WORDS(0xA6E4B552E2EDE508),
-        U64_TO_WORDS(0x00018ECCDDF4B53E), // XQA1
-        U64_TO_WORDS(0x01BA4DB518CD6C7D), U64_TO_WORDS(0x2CB0251FE3CC0611),
-        U64_TO_WORDS(0x259B0C6949A9121B), U64_TO_WORDS(0x60E17AC16D2F82AD),
-        U64_TO_WORDS(0x3AA41F1CE175D92D), U64_TO_WORDS(0x413FBE6A9B9BC4F3),
-        U64_TO_WORDS(0x00022A81D8D55643), // XRA0
-        U64_TO_WORDS(0xB8ADBC70FC82E54A), U64_TO_WORDS(0xEF9CDDB0D5FADDED),
-        U64_TO_WORDS(0x5820C734C80096A0), U64_TO_WORDS(0x7799994BAA96E0E4),
-        U64_TO_WORDS(0x044961599E379AF8), U64_TO_WORDS(0xDB2B94FBF09F27E2),
-        U64_TO_WORDS(0x0000B87FC716C0C6)  // XRA1
-    },
-    .B_gen = {
-        U64_TO_WORDS(0x6E5497556EDD48A3), U64_TO_WORDS(0x2A61B501546F1C05),
-        U64_TO_WORDS(0xEB919446D049887D), U64_TO_WORDS(0x5864A4A69D450C4F),
-        U64_TO_WORDS(0xB883F276A6490D2B), U64_TO_WORDS(0x22CC287022D5F5B9),
-        U64_TO_WORDS(0x0001BED4772E551F), // XPB0
-        U64_TO_WORDS(0x0000000000000000), U64_TO_WORDS(0x0000000000000000),
-        U64_TO_WORDS(0x0000000000000000), U64_TO_WORDS(0x0000000000000000),
-        U64_TO_WORDS(0x0000000000000000), U64_TO_WORDS(0x0000000000000000),
-        U64_TO_WORDS(0x0000000000000000), // XPB1
-        U64_TO_WORDS(0xFAE2A3F93D8B6B8E), U64_TO_WORDS(0x494871F51700FE1C),
-        U64_TO_WORDS(0xEF1A94228413C27C), U64_TO_WORDS(0x498FF4A4AF60BD62),
-        U64_TO_WORDS(0xB00AD2A708267E8A), U64_TO_WORDS(0xF4328294E017837F),
-        U64_TO_WORDS(0x000034080181D8AE), // XQB0
-        U64_TO_WORDS(0x0000000000000000), U64_TO_WORDS(0x0000000000000000),
-        U64_TO_WORDS(0x0000000000000000), U64_TO_WORDS(0x0000000000000000),
-        U64_TO_WORDS(0x0000000000000000), U64_TO_WORDS(0x0000000000000000),
-        U64_TO_WORDS(0x0000000000000000), // XQB1
-        U64_TO_WORDS(0x283B34FAFEFDC8E4), U64_TO_WORDS(0x9208F44977C3E647),
-        U64_TO_WORDS(0x7DEAE962816F4E9A), U64_TO_WORDS(0x68A2BA8AA262EC9D),
-        U64_TO_WORDS(0x8176F112EA43F45B), U64_TO_WORDS(0x02106D022634F504),
-        U64_TO_WORDS(0x00007E8A50F02E37), // XRB0
-        U64_TO_WORDS(0xB378B7C1DA22CCB1), U64_TO_WORDS(0x6D089C99AD1D9230),
-        U64_TO_WORDS(0xEBE15711813E2369), U64_TO_WORDS(0x2B35A68239D48A53),
-        U64_TO_WORDS(0x445F6FD138407C93), U64_TO_WORDS(0xBEF93B29A3F6B54B),
-        U64_TO_WORDS(0x000173FA910377D3)  // XRB1
-    },
-    .mont_R2 = {
-        U64_TO_WORDS(0x28E55B65DCD69B30), U64_TO_WORDS(0xACEC7367768798C2),
-        U64_TO_WORDS(0xAB27973F8311688D), U64_TO_WORDS(0x175CC6AF8D6C7C0B),
-        U64_TO_WORDS(0xABCD92BF2DDE347E), U64_TO_WORDS(0x69E16A61C7686D9A),
-        U64_TO_WORDS(0x000025A89BCDD12A)
-    },
-    .mont_one = {
-        U64_TO_WORDS(0x000000000000742C), U64_TO_WORDS(0x0000000000000000),
-        U64_TO_WORDS(0x0000000000000000), U64_TO_WORDS(0xB90FF404FC000000),
-        U64_TO_WORDS(0xD801A4FB559FACD4), U64_TO_WORDS(0xE93254545F77410C),
-        U64_TO_WORDS(0x0000ECEEA7BD2EDA)
-    },
-    .mont_six = {
-        U64_TO_WORDS(0x000000000002B90A), U64_TO_WORDS(0x0000000000000000),
-        U64_TO_WORDS(0x0000000000000000), U64_TO_WORDS(0x5ADCCB2822000000),
-        U64_TO_WORDS(0x187D24F39F0CAFB4), U64_TO_WORDS(0x9D353A4D394145A0),
-        U64_TO_WORDS(0x00012559A0403298)
-    },
-    .A_strat = {
-        0x30, 0x1C, 0x10, 0x08, 0x04, 0x02, 0x01, 0x01, 0x02, 0x01,
-        0x01, 0x04, 0x02, 0x01, 0x01, 0x02, 0x01, 0x01, 0x08, 0x04,
-        0x02, 0x01, 0x01, 0x02, 0x01, 0x01, 0x04, 0x02, 0x01, 0x01,
-        0x02, 0x01, 0x01, 0x0D, 0x07, 0x04, 0x02, 0x01, 0x01, 0x02,
-        0x01, 0x01, 0x03, 0x02, 0x01, 0x01, 0x01, 0x01, 0x05, 0x04,
-        0x02, 0x01, 0x01, 0x02, 0x01, 0x01, 0x02, 0x01, 0x01, 0x01,
-        0x15, 0x0C, 0x07, 0x04, 0x02, 0x01, 0x01, 0x02, 0x01, 0x01,
-        0x03, 0x02, 0x01, 0x01, 0x01, 0x01, 0x05, 0x03, 0x02, 0x01,
-        0x01, 0x01, 0x01, 0x02, 0x01, 0x01, 0x01, 0x09, 0x05, 0x03,
-        0x02, 0x01, 0x01, 0x01, 0x01, 0x02, 0x01, 0x01, 0x01, 0x04,
-        0x02, 0x01, 0x01, 0x01, 0x02, 0x01, 0x01
-    },
-    .B_strat = {
-        0x42, 0x21, 0x11, 0x09, 0x05, 0x03, 0x02, 0x01, 0x01, 0x01,
-        0x01, 0x02, 0x01, 0x01, 0x01, 0x04, 0x02, 0x01, 0x01, 0x01,
-        0x02, 0x01, 0x01, 0x08, 0x04, 0x02, 0x01, 0x01, 0x01, 0x02,
-        0x01, 0x01, 0x04, 0x02, 0x01, 0x01, 0x02, 0x01, 0x01, 0x10,
-        0x08, 0x04, 0x02, 0x01, 0x01, 0x01, 0x02, 0x01, 0x01, 0x04,
-        0x02, 0x01, 0x01, 0x02, 0x01, 0x01, 0x08, 0x04, 0x02, 0x01,
-        0x01, 0x02, 0x01, 0x01, 0x04, 0x02, 0x01, 0x01, 0x02, 0x01,
-        0x01, 0x20, 0x10, 0x08, 0x04, 0x03, 0x01, 0x01, 0x01, 0x01,
-        0x02, 0x01, 0x01, 0x04, 0x02, 0x01, 0x01, 0x02, 0x01, 0x01,
-        0x08, 0x04, 0x02, 0x01, 0x01, 0x02, 0x01, 0x01, 0x04, 0x02,
-        0x01, 0x01, 0x02, 0x01, 0x01, 0x10, 0x08, 0x04, 0x02, 0x01,
-        0x01, 0x02, 0x01, 0x01, 0x04, 0x02, 0x01, 0x01, 0x02, 0x01,
-        0x01, 0x08, 0x04, 0x02, 0x01, 0x01, 0x02, 0x01, 0x01, 0x04,
-        0x02, 0x01, 0x01, 0x02, 0x01, 0x01
-    }
-};
diff --git a/src/third_party/sike/fpx.c b/src/third_party/sike/fpx.c
deleted file mode 100644
index 9917116..0000000
--- a/src/third_party/sike/fpx.c
+++ /dev/null
@@ -1,283 +0,0 @@
-/********************************************************************************************
-* SIDH: an efficient supersingular isogeny cryptography library
-*
-* Abstract: core functions over GF(p) and GF(p^2)
-*********************************************************************************************/
-#include <openssl/base.h>
-
-#include "utils.h"
-#include "fpx.h"
-
-extern const struct params_t sike_params;
-
-// Multiprecision squaring, c = a^2 mod p.
-static void fpsqr_mont(const felm_t ma, felm_t mc)
-{
-    dfelm_t temp = {0};
-    sike_mpmul(ma, ma, temp);
-    sike_fprdc(temp, mc);
-}
-
-// Chain to compute a^(p-3)/4 using Montgomery arithmetic.
-static void fpinv_chain_mont(felm_t a)
-{
-    unsigned int i, j;
-    felm_t t[31], tt;
-
-    // Precomputed table
-    fpsqr_mont(a, tt);
-    sike_fpmul_mont(a, tt, t[0]);
-    for (i = 0; i <= 29; i++) sike_fpmul_mont(t[i], tt, t[i+1]);
-
-    sike_fpcopy(a, tt);
-    for (i = 0; i < 7; i++) fpsqr_mont(tt, tt);
-    sike_fpmul_mont(t[5], tt, tt);
-    for (i = 0; i < 10; i++) fpsqr_mont(tt, tt);
-    sike_fpmul_mont(t[14], tt, tt);
-    for (i = 0; i < 6; i++) fpsqr_mont(tt, tt);
-    sike_fpmul_mont(t[3], tt, tt);
-    for (i = 0; i < 6; i++) fpsqr_mont(tt, tt);
-    sike_fpmul_mont(t[23], tt, tt);
-    for (i = 0; i < 6; i++) fpsqr_mont(tt, tt);
-    sike_fpmul_mont(t[13], tt, tt);
-    for (i = 0; i < 6; i++) fpsqr_mont(tt, tt);
-    sike_fpmul_mont(t[24], tt, tt);
-    for (i = 0; i < 6; i++) fpsqr_mont(tt, tt);
-    sike_fpmul_mont(t[7], tt, tt);
-    for (i = 0; i < 8; i++) fpsqr_mont(tt, tt);
-    sike_fpmul_mont(t[12], tt, tt);
-    for (i = 0; i < 8; i++) fpsqr_mont(tt, tt);
-    sike_fpmul_mont(t[30], tt, tt);
-    for (i = 0; i < 6; i++) fpsqr_mont(tt, tt);
-    sike_fpmul_mont(t[1], tt, tt);
-    for (i = 0; i < 6; i++) fpsqr_mont(tt, tt);
-    sike_fpmul_mont(t[30], tt, tt);
-    for (i = 0; i < 7; i++) fpsqr_mont(tt, tt);
-    sike_fpmul_mont(t[21], tt, tt);
-    for (i = 0; i < 9; i++) fpsqr_mont(tt, tt);
-    sike_fpmul_mont(t[2], tt, tt);
-    for (i = 0; i < 9; i++) fpsqr_mont(tt, tt);
-    sike_fpmul_mont(t[19], tt, tt);
-    for (i = 0; i < 9; i++) fpsqr_mont(tt, tt);
-    sike_fpmul_mont(t[1], tt, tt);
-    for (i = 0; i < 7; i++) fpsqr_mont(tt, tt);
-    sike_fpmul_mont(t[24], tt, tt);
-    for (i = 0; i < 6; i++) fpsqr_mont(tt, tt);
-    sike_fpmul_mont(t[26], tt, tt);
-    for (i = 0; i < 6; i++) fpsqr_mont(tt, tt);
-    sike_fpmul_mont(t[16], tt, tt);
-    for (i = 0; i < 7; i++) fpsqr_mont(tt, tt);
-    sike_fpmul_mont(t[10], tt, tt);
-    for (i = 0; i < 7; i++) fpsqr_mont(tt, tt);
-    sike_fpmul_mont(t[6], tt, tt);
-    for (i = 0; i < 7; i++) fpsqr_mont(tt, tt);
-    sike_fpmul_mont(t[0], tt, tt);
-    for (i = 0; i < 9; i++) fpsqr_mont(tt, tt);
-    sike_fpmul_mont(t[20], tt, tt);
-    for (i = 0; i < 8; i++) fpsqr_mont(tt, tt);
-    sike_fpmul_mont(t[9], tt, tt);
-    for (i = 0; i < 6; i++) fpsqr_mont(tt, tt);
-    sike_fpmul_mont(t[25], tt, tt);
-    for (i = 0; i < 9; i++) fpsqr_mont(tt, tt);
-    sike_fpmul_mont(t[30], tt, tt);
-    for (i = 0; i < 6; i++) fpsqr_mont(tt, tt);
-    sike_fpmul_mont(t[26], tt, tt);
-    for (i = 0; i < 6; i++) fpsqr_mont(tt, tt);
-    sike_fpmul_mont(a, tt, tt);
-    for (i = 0; i < 7; i++) fpsqr_mont(tt, tt);
-    sike_fpmul_mont(t[28], tt, tt);
-    for (i = 0; i < 6; i++) fpsqr_mont(tt, tt);
-    sike_fpmul_mont(t[6], tt, tt);
-    for (i = 0; i < 6; i++) fpsqr_mont(tt, tt);
-    sike_fpmul_mont(t[10], tt, tt);
-    for (i = 0; i < 9; i++) fpsqr_mont(tt, tt);
-    sike_fpmul_mont(t[22], tt, tt);
-    for (j = 0; j < 35; j++) {
-        for (i = 0; i < 6; i++) fpsqr_mont(tt, tt);
-        sike_fpmul_mont(t[30], tt, tt);
-    }
-    sike_fpcopy(tt, a);
-}
-
-// Field inversion using Montgomery arithmetic, a = a^(-1)*R mod p.
-static void fpinv_mont(felm_t a)
-{
-    felm_t tt = {0};
-    sike_fpcopy(a, tt);
-    fpinv_chain_mont(tt);
-    fpsqr_mont(tt, tt);
-    fpsqr_mont(tt, tt);
-    sike_fpmul_mont(a, tt, a);
-}
-
-// Multiprecision addition, c = a+b, where lng(a) = lng(b) = nwords. Returns the carry bit.
-#if defined(OPENSSL_NO_ASM) || (!defined(OPENSSL_X86_64) && !defined(OPENSSL_AARCH64))
-inline static unsigned int mp_add(const felm_t a, const felm_t b, felm_t c, const unsigned int nwords) {
-    uint8_t carry = 0;
-    for (size_t i = 0; i < nwords; i++) {
-        ADDC(carry, a[i], b[i], carry, c[i]);
-    }
-    return carry;
-}
-
-// Multiprecision subtraction, c = a-b, where lng(a) = lng(b) = nwords. Returns the borrow bit.
-inline static unsigned int mp_sub(const felm_t a, const felm_t b, felm_t c, const unsigned int nwords) {
-    uint32_t borrow = 0;
-    for (size_t i = 0; i < nwords; i++) {
-        SUBC(borrow, a[i], b[i], borrow, c[i]);
-    }
-    return borrow;
-}
-#endif
-
-// Multiprecision addition, c = a+b.
-inline static void mp_addfast(const felm_t a, const felm_t b, felm_t c)
-{
-#if defined(OPENSSL_NO_ASM) || (!defined(OPENSSL_X86_64) && !defined(OPENSSL_AARCH64))
-    mp_add(a, b, c, NWORDS_FIELD);
-#else
-    sike_mpadd_asm(a, b, c);
-#endif
-}
-
-// Multiprecision subtraction, c = a-b, where lng(a) = lng(b) = 2*NWORDS_FIELD.
-// If c < 0 then returns mask = 0xFF..F, else mask = 0x00..0
-inline static crypto_word_t mp_subfast(const dfelm_t a, const dfelm_t b, dfelm_t c) {
-#if defined(OPENSSL_NO_ASM) || (!defined(OPENSSL_X86_64) && !defined(OPENSSL_AARCH64))
-    return (0 - (crypto_word_t)mp_sub(a, b, c, 2*NWORDS_FIELD));
-#else
-    return sike_mpsubx2_asm(a, b, c);
-#endif
-}
-
-// Multiprecision subtraction, c = c-a-b, where lng(a) = lng(b) = 2*NWORDS_FIELD.
-// Inputs should be s.t. c > a and c > b
-inline static void mp_dblsubfast(const dfelm_t a, const dfelm_t b, dfelm_t c) {
-#if defined(OPENSSL_NO_ASM) || (!defined(OPENSSL_X86_64) && !defined(OPENSSL_AARCH64))
-    mp_sub(c, a, c, 2*NWORDS_FIELD);
-    mp_sub(c, b, c, 2*NWORDS_FIELD);
-#else
-    sike_mpdblsubx2_asm(a, b, c);
-#endif
-}
-
-// Copy a field element, c = a.
-void sike_fpcopy(const felm_t a, felm_t c) {
-    for (size_t i = 0; i < NWORDS_FIELD; i++) {
-        c[i] = a[i];
-    }
-}
-
-// Field multiplication using Montgomery arithmetic, c = a*b*R^-1 mod prime, where R=2^768
-void sike_fpmul_mont(const felm_t ma, const felm_t mb, felm_t mc)
-{
-    dfelm_t temp = {0};
-    sike_mpmul(ma, mb, temp);
-    sike_fprdc(temp, mc);
-}
-
-// Conversion from Montgomery representation to standard representation,
-// c = ma*R^(-1) mod p = a mod p, where ma in [0, p-1].
-void sike_from_mont(const felm_t ma, felm_t c)
-{
-    felm_t one = {0};
-    one[0] = 1;
-
-    sike_fpmul_mont(ma, one, c);
-    sike_fpcorrection(c);
-}
-
-// GF(p^2) squaring using Montgomery arithmetic, c = a^2 in GF(p^2).
-// Inputs: a = a0+a1*i, where a0, a1 are in [0, 2*p-1]
-// Output: c = c0+c1*i, where c0, c1 are in [0, 2*p-1]
-void sike_fp2sqr_mont(const f2elm_t a, f2elm_t c) {
-    felm_t t1, t2, t3;
-
-    mp_addfast(a->c0, a->c1, t1);                      // t1 = a0+a1
-    sike_fpsub(a->c0, a->c1, t2);                      // t2 = a0-a1
-    mp_addfast(a->c0, a->c0, t3);                      // t3 = 2a0
-    sike_fpmul_mont(t1, t2, c->c0);                    // c0 = (a0+a1)(a0-a1)
-    sike_fpmul_mont(t3, a->c1, c->c1);                 // c1 = 2a0*a1
-}
-
-// Modular negation, a = -a mod p503.
-// Input/output: a in [0, 2*p503-1]
-void sike_fpneg(felm_t a) {
-  uint32_t borrow = 0;
-  for (size_t i = 0; i < NWORDS_FIELD; i++) {
-    SUBC(borrow, sike_params.prime_x2[i], a[i], borrow, a[i]);
-  }
-}
-
-// Modular division by two, c = a/2 mod p503.
-// Input : a in [0, 2*p503-1]
-// Output: c in [0, 2*p503-1]
-void sike_fpdiv2(const felm_t a, felm_t c) {
-  uint32_t carry = 0;
-  crypto_word_t mask;
-
-  mask = 0 - (crypto_word_t)(a[0] & 1);    // If a is odd compute a+p503
-  for (size_t i = 0; i < NWORDS_FIELD; i++) {
-    ADDC(carry, a[i], sike_params.prime[i] & mask, carry, c[i]);
-  }
-
-  // Multiprecision right shift by one.
-  for (size_t i = 0; i < NWORDS_FIELD-1; i++) {
-    c[i] = (c[i] >> 1) ^ (c[i+1] << (RADIX - 1));
-  }
-  c[NWORDS_FIELD-1] >>= 1;
-}
-
-// Modular correction to reduce field element a in [0, 2*p503-1] to [0, p503-1].
-void sike_fpcorrection(felm_t a) {
-  uint32_t borrow = 0;
-  crypto_word_t mask;
-
-  for (size_t i = 0; i < NWORDS_FIELD; i++) {
-    SUBC(borrow, a[i], sike_params.prime[i], borrow, a[i]);
-  }
-  mask = 0 - (crypto_word_t)borrow;
-
-  borrow = 0;
-  for (size_t i = 0; i < NWORDS_FIELD; i++) {
-    ADDC(borrow, a[i], sike_params.prime[i] & mask, borrow, a[i]);
-  }
-}
-
-// GF(p^2) multiplication using Montgomery arithmetic, c = a*b in GF(p^2).
-// Inputs: a = a0+a1*i and b = b0+b1*i, where a0, a1, b0, b1 are in [0, 2*p-1]
-// Output: c = c0+c1*i, where c0, c1 are in [0, 2*p-1]
-void sike_fp2mul_mont(const f2elm_t a, const f2elm_t b, f2elm_t c) {
-    felm_t t1, t2;
-    dfelm_t tt1, tt2, tt3;
-    crypto_word_t mask;
-
-    mp_addfast(a->c0, a->c1, t1);                      // t1 = a0+a1
-    mp_addfast(b->c0, b->c1, t2);                      // t2 = b0+b1
-    sike_mpmul(a->c0, b->c0, tt1);                     // tt1 = a0*b0
-    sike_mpmul(a->c1, b->c1, tt2);                     // tt2 = a1*b1
-    sike_mpmul(t1, t2, tt3);                           // tt3 = (a0+a1)*(b0+b1)
-    mp_dblsubfast(tt1, tt2, tt3);                      // tt3 = (a0+a1)*(b0+b1) - a0*b0 - a1*b1
-    mask = mp_subfast(tt1, tt2, tt1);                  // tt1 = a0*b0 - a1*b1. If tt1 < 0 then mask = 0xFF..F, else if tt1 >= 0 then mask = 0x00..0
-
-    for (size_t i = 0; i < NWORDS_FIELD; i++) {
-        t1[i] = sike_params.prime[i] & mask;
-    }
-
-    sike_fprdc(tt3, c->c1);                             // c[1] = (a0+a1)*(b0+b1) - a0*b0 - a1*b1
-    mp_addfast(&tt1[NWORDS_FIELD], t1, &tt1[NWORDS_FIELD]);
-    sike_fprdc(tt1, c->c0);                             // c[0] = a0*b0 - a1*b1
-}
-
-// GF(p^2) inversion using Montgomery arithmetic, a = (a0-i*a1)/(a0^2+a1^2).
-void sike_fp2inv_mont(f2elm_t a) {
-    f2elm_t t1;
-
-    fpsqr_mont(a->c0, t1->c0);                         // t10 = a0^2
-    fpsqr_mont(a->c1, t1->c1);                         // t11 = a1^2
-    sike_fpadd(t1->c0, t1->c1, t1->c0);                // t10 = a0^2+a1^2
-    fpinv_mont(t1->c0);                                // t10 = (a0^2+a1^2)^-1
-    sike_fpneg(a->c1);                                 // a = a0-i*a1
-    sike_fpmul_mont(a->c0, t1->c0, a->c0);
-    sike_fpmul_mont(a->c1, t1->c0, a->c1);             // a = (a0-i*a1)*(a0^2+a1^2)^-1
-}
diff --git a/src/third_party/sike/fpx.h b/src/third_party/sike/fpx.h
deleted file mode 100644
index e697688..0000000
--- a/src/third_party/sike/fpx.h
+++ /dev/null
@@ -1,113 +0,0 @@
-#ifndef FPX_H_
-#define FPX_H_
-
-#include "utils.h"
-
-#if defined(__cplusplus)
-extern "C" {
-#endif
-
-// Modular addition, c = a+b mod p.
-void sike_fpadd(const felm_t a, const felm_t b, felm_t c);
-// Modular subtraction, c = a-b mod p.
-void sike_fpsub(const felm_t a, const felm_t b, felm_t c);
-// Modular division by two, c = a/2 mod p.
-void sike_fpdiv2(const felm_t a, felm_t c);
-// Modular correction to reduce field element a in [0, 2*p-1] to [0, p-1].
-void sike_fpcorrection(felm_t a);
-// Multiprecision multiply, c = a*b, where lng(a) = lng(b) = nwords.
-void sike_mpmul(const felm_t a, const felm_t b, dfelm_t c);
-// 443-bit Montgomery reduction, c = a mod p. Buffer 'a' is modified after
-// call returns.
-void sike_fprdc(dfelm_t a, felm_t c);
-// Double 2x443-bit multiprecision subtraction, c = c-a-b
-void sike_mpdblsubx2_asm(const felm_t a, const felm_t b, felm_t c);
-// Multiprecision subtraction, c = a-b
-crypto_word_t sike_mpsubx2_asm(const dfelm_t a, const dfelm_t b, dfelm_t c);
-// 443-bit multiprecision addition, c = a+b
-void sike_mpadd_asm(const felm_t a, const felm_t b, felm_t c);
-// Modular negation, a = -a mod p.
-void sike_fpneg(felm_t a);
-// Copy of a field element, c = a
-void sike_fpcopy(const felm_t a, felm_t c);
-// Copy a field element, c = a.
-void sike_fpzero(felm_t a);
-// If option = 0xFF...FF x=y; y=x, otherwise swap doesn't happen. Constant time.
-void sike_cswap_asm(point_proj_t x, point_proj_t y, const crypto_word_t option);
-// Conversion from Montgomery representation to standard representation,
-// c = ma*R^(-1) mod p = a mod p, where ma in [0, p-1].
-void sike_from_mont(const felm_t ma, felm_t c);
-// Field multiplication using Montgomery arithmetic, c = a*b*R^-1 mod p443, where R=2^768
-void sike_fpmul_mont(const felm_t ma, const felm_t mb, felm_t mc);
-// GF(p443^2) multiplication using Montgomery arithmetic, c = a*b in GF(p443^2)
-void sike_fp2mul_mont(const f2elm_t a, const f2elm_t b, f2elm_t c);
-// GF(p443^2) inversion using Montgomery arithmetic, a = (a0-i*a1)/(a0^2+a1^2)
-void sike_fp2inv_mont(f2elm_t a);
-// GF(p^2) squaring using Montgomery arithmetic, c = a^2 in GF(p^2).
-void sike_fp2sqr_mont(const f2elm_t a, f2elm_t c);
-// Modular correction, a = a in GF(p^2).
-void sike_fp2correction(f2elm_t a);
-
-#if defined(__cplusplus)
-}  // extern C
-#endif
-
-// GF(p^2) addition, c = a+b in GF(p^2).
-#define sike_fp2add(a, b, c)             \
-do {                                     \
-    sike_fpadd(a->c0, b->c0, c->c0);     \
-    sike_fpadd(a->c1, b->c1, c->c1);     \
-} while(0)
-
-// GF(p^2) subtraction, c = a-b in GF(p^2).
-#define sike_fp2sub(a,b,c)               \
-do {                                     \
-    sike_fpsub(a->c0, b->c0, c->c0);     \
-    sike_fpsub(a->c1, b->c1, c->c1);     \
-} while(0)
-
-// Copy a GF(p^2) element, c = a.
-#define sike_fp2copy(a, c)               \
-do {                                     \
-    sike_fpcopy(a->c0, c->c0);           \
-    sike_fpcopy(a->c1, c->c1);           \
-} while(0)
-
-// GF(p^2) negation, a = -a in GF(p^2).
-#define sike_fp2neg(a)                   \
-do {                                     \
-    sike_fpneg(a->c0);                   \
-    sike_fpneg(a->c1);                   \
-} while(0)
-
-// GF(p^2) division by two, c = a/2  in GF(p^2).
-#define sike_fp2div2(a, c)               \
-do {                                     \
-    sike_fpdiv2(a->c0, c->c0);           \
-    sike_fpdiv2(a->c1, c->c1);           \
-} while(0)
-
-// Modular correction, a = a in GF(p^2).
-#define sike_fp2correction(a)            \
-do {                                     \
-    sike_fpcorrection(a->c0);            \
-    sike_fpcorrection(a->c1);            \
-} while(0)
-
-// Conversion of a GF(p^2) element to Montgomery representation,
-// mc_i = a_i*R^2*R^(-1) = a_i*R in GF(p^2).
-#define sike_to_fp2mont(a, mc)                           \
-  do {                                                   \
-    sike_fpmul_mont(a->c0, sike_params.mont_R2, mc->c0); \
-    sike_fpmul_mont(a->c1, sike_params.mont_R2, mc->c1); \
-  } while (0)
-
-// Conversion of a GF(p^2) element from Montgomery representation to standard representation,
-// c_i = ma_i*R^(-1) = a_i in GF(p^2).
-#define sike_from_fp2mont(ma, c)         \
-do {                                     \
-    sike_from_mont(ma->c0, c->c0);       \
-    sike_from_mont(ma->c1, c->c1);       \
-} while(0)
-
-#endif // FPX_H_
diff --git a/src/third_party/sike/isogeny.c b/src/third_party/sike/isogeny.c
deleted file mode 100644
index 6b910e0..0000000
--- a/src/third_party/sike/isogeny.c
+++ /dev/null
@@ -1,260 +0,0 @@
-/********************************************************************************************
-* SIDH: an efficient supersingular isogeny cryptography library
-*
-* Abstract: elliptic curve and isogeny functions
-*********************************************************************************************/
-#include "utils.h"
-#include "isogeny.h"
-#include "fpx.h"
-
-static void xDBL(const point_proj_t P, point_proj_t Q, const f2elm_t A24plus, const f2elm_t C24)
-{ // Doubling of a Montgomery point in projective coordinates (X:Z).
-  // Input: projective Montgomery x-coordinates P = (X1:Z1), where x1=X1/Z1 and Montgomery curve constants A+2C and 4C.
-  // Output: projective Montgomery x-coordinates Q = 2*P = (X2:Z2).
-    f2elm_t t0, t1;
-
-    sike_fp2sub(P->X, P->Z, t0);                         // t0 = X1-Z1
-    sike_fp2add(P->X, P->Z, t1);                         // t1 = X1+Z1
-    sike_fp2sqr_mont(t0, t0);                            // t0 = (X1-Z1)^2
-    sike_fp2sqr_mont(t1, t1);                            // t1 = (X1+Z1)^2
-    sike_fp2mul_mont(C24, t0, Q->Z);                     // Z2 = C24*(X1-Z1)^2
-    sike_fp2mul_mont(t1, Q->Z, Q->X);                    // X2 = C24*(X1-Z1)^2*(X1+Z1)^2
-    sike_fp2sub(t1, t0, t1);                             // t1 = (X1+Z1)^2-(X1-Z1)^2
-    sike_fp2mul_mont(A24plus, t1, t0);                   // t0 = A24plus*[(X1+Z1)^2-(X1-Z1)^2]
-    sike_fp2add(Q->Z, t0, Q->Z);                         // Z2 = A24plus*[(X1+Z1)^2-(X1-Z1)^2] + C24*(X1-Z1)^2
-    sike_fp2mul_mont(Q->Z, t1, Q->Z);                    // Z2 = [A24plus*[(X1+Z1)^2-(X1-Z1)^2] + C24*(X1-Z1)^2]*[(X1+Z1)^2-(X1-Z1)^2]
-}
-
-void sike_xDBLe(const point_proj_t P, point_proj_t Q, const f2elm_t A24plus, const f2elm_t C24, size_t e)
-{ // Computes [2^e](X:Z) on Montgomery curve with projective constant via e repeated doublings.
-  // Input: projective Montgomery x-coordinates P = (XP:ZP), such that xP=XP/ZP and Montgomery curve constants A+2C and 4C.
-  // Output: projective Montgomery x-coordinates Q <- (2^e)*P.
-
-    memmove(Q, P, sizeof(*P));
-    for (size_t i = 0; i < e; i++) {
-        xDBL(Q, Q, A24plus, C24);
-    }
-}
-
-void sike_get_4_isog(const point_proj_t P, f2elm_t A24plus, f2elm_t C24, f2elm_t* coeff)
-{ // Computes the corresponding 4-isogeny of a projective Montgomery point (X4:Z4) of order 4.
-  // Input:  projective point of order four P = (X4:Z4).
-  // Output: the 4-isogenous Montgomery curve with projective coefficients A+2C/4C and the 3 coefficients
-  //         that are used to evaluate the isogeny at a point in eval_4_isog().
-
-    sike_fp2sub(P->X, P->Z, coeff[1]);                   // coeff[1] = X4-Z4
-    sike_fp2add(P->X, P->Z, coeff[2]);                   // coeff[2] = X4+Z4
-    sike_fp2sqr_mont(P->Z, coeff[0]);                    // coeff[0] = Z4^2
-    sike_fp2add(coeff[0], coeff[0], coeff[0]);           // coeff[0] = 2*Z4^2
-    sike_fp2sqr_mont(coeff[0], C24);                     // C24 = 4*Z4^4
-    sike_fp2add(coeff[0], coeff[0], coeff[0]);           // coeff[0] = 4*Z4^2
-    sike_fp2sqr_mont(P->X, A24plus);                     // A24plus = X4^2
-    sike_fp2add(A24plus, A24plus, A24plus);              // A24plus = 2*X4^2
-    sike_fp2sqr_mont(A24plus, A24plus);                  // A24plus = 4*X4^4
-}
-
-void sike_eval_4_isog(point_proj_t P, f2elm_t* coeff)
-{ // Evaluates the isogeny at the point (X:Z) in the domain of the isogeny, given a 4-isogeny phi defined
-  // by the 3 coefficients in coeff (computed in the function get_4_isog()).
-  // Inputs: the coefficients defining the isogeny, and the projective point P = (X:Z).
-  // Output: the projective point P = phi(P) = (X:Z) in the codomain.
-    f2elm_t t0, t1;
-
-    sike_fp2add(P->X, P->Z, t0);                         // t0 = X+Z
-    sike_fp2sub(P->X, P->Z, t1);                         // t1 = X-Z
-    sike_fp2mul_mont(t0, coeff[1], P->X);                // X = (X+Z)*coeff[1]
-    sike_fp2mul_mont(t1, coeff[2], P->Z);                // Z = (X-Z)*coeff[2]
-    sike_fp2mul_mont(t0, t1, t0);                        // t0 = (X+Z)*(X-Z)
-    sike_fp2mul_mont(t0, coeff[0], t0);                  // t0 = coeff[0]*(X+Z)*(X-Z)
-    sike_fp2add(P->X, P->Z, t1);                         // t1 = (X-Z)*coeff[2] + (X+Z)*coeff[1]
-    sike_fp2sub(P->X, P->Z, P->Z);                       // Z = (X-Z)*coeff[2] - (X+Z)*coeff[1]
-    sike_fp2sqr_mont(t1, t1);                            // t1 = [(X-Z)*coeff[2] + (X+Z)*coeff[1]]^2
-    sike_fp2sqr_mont(P->Z, P->Z);                        // Z = [(X-Z)*coeff[2] - (X+Z)*coeff[1]]^2
-    sike_fp2add(t1, t0, P->X);                           // X = coeff[0]*(X+Z)*(X-Z) + [(X-Z)*coeff[2] + (X+Z)*coeff[1]]^2
-    sike_fp2sub(P->Z, t0, t0);                           // t0 = [(X-Z)*coeff[2] - (X+Z)*coeff[1]]^2 - coeff[0]*(X+Z)*(X-Z)
-    sike_fp2mul_mont(P->X, t1, P->X);                    // Xfinal
-    sike_fp2mul_mont(P->Z, t0, P->Z);                    // Zfinal
-}
-
-
-void sike_xTPL(const point_proj_t P, point_proj_t Q, const f2elm_t A24minus, const f2elm_t A24plus)
-{ // Tripling of a Montgomery point in projective coordinates (X:Z).
-  // Input: projective Montgomery x-coordinates P = (X:Z), where x=X/Z and Montgomery curve constants A24plus = A+2C and A24minus = A-2C.
-  // Output: projective Montgomery x-coordinates Q = 3*P = (X3:Z3).
-    f2elm_t t0, t1, t2, t3, t4, t5, t6;
-
-    sike_fp2sub(P->X, P->Z, t0);                         // t0 = X-Z
-    sike_fp2sqr_mont(t0, t2);                            // t2 = (X-Z)^2
-    sike_fp2add(P->X, P->Z, t1);                         // t1 = X+Z
-    sike_fp2sqr_mont(t1, t3);                            // t3 = (X+Z)^2
-    sike_fp2add(t0, t1, t4);                             // t4 = 2*X
-    sike_fp2sub(t1, t0, t0);                             // t0 = 2*Z
-    sike_fp2sqr_mont(t4, t1);                            // t1 = 4*X^2
-    sike_fp2sub(t1, t3, t1);                             // t1 = 4*X^2 - (X+Z)^2
-    sike_fp2sub(t1, t2, t1);                             // t1 = 4*X^2 - (X+Z)^2 - (X-Z)^2
-    sike_fp2mul_mont(t3, A24plus, t5);                   // t5 = A24plus*(X+Z)^2
-    sike_fp2mul_mont(t3, t5, t3);                        // t3 = A24plus*(X+Z)^3
-    sike_fp2mul_mont(A24minus, t2, t6);                  // t6 = A24minus*(X-Z)^2
-    sike_fp2mul_mont(t2, t6, t2);                        // t2 = A24minus*(X-Z)^3
-    sike_fp2sub(t2, t3, t3);                             // t3 = A24minus*(X-Z)^3 - coeff*(X+Z)^3
-    sike_fp2sub(t5, t6, t2);                             // t2 = A24plus*(X+Z)^2 - A24minus*(X-Z)^2
-    sike_fp2mul_mont(t1, t2, t1);                        // t1 = [4*X^2 - (X+Z)^2 - (X-Z)^2]*[A24plus*(X+Z)^2 - A24minus*(X-Z)^2]
-    sike_fp2add(t3, t1, t2);                             // t2 = [4*X^2 - (X+Z)^2 - (X-Z)^2]*[A24plus*(X+Z)^2 - A24minus*(X-Z)^2] + A24minus*(X-Z)^3 - coeff*(X+Z)^3
-    sike_fp2sqr_mont(t2, t2);                            // t2 = t2^2
-    sike_fp2mul_mont(t4, t2, Q->X);                      // X3 = 2*X*t2
-    sike_fp2sub(t3, t1, t1);                             // t1 = A24minus*(X-Z)^3 - A24plus*(X+Z)^3 - [4*X^2 - (X+Z)^2 - (X-Z)^2]*[A24plus*(X+Z)^2 - A24minus*(X-Z)^2]
-    sike_fp2sqr_mont(t1, t1);                            // t1 = t1^2
-    sike_fp2mul_mont(t0, t1, Q->Z);                      // Z3 = 2*Z*t1
-}
-
-void sike_xTPLe(const point_proj_t P, point_proj_t Q, const f2elm_t A24minus, const f2elm_t A24plus, size_t e)
-{ // Computes [3^e](X:Z) on Montgomery curve with projective constant via e repeated triplings.
-  // Input: projective Montgomery x-coordinates P = (XP:ZP), such that xP=XP/ZP and Montgomery curve constants A24plus = A+2C and A24minus = A-2C.
-  // Output: projective Montgomery x-coordinates Q <- (3^e)*P.
-    memmove(Q, P, sizeof(*P));
-    for (size_t i = 0; i < e; i++) {
-        sike_xTPL(Q, Q, A24minus, A24plus);
-    }
-}
-
-void sike_get_3_isog(const point_proj_t P, f2elm_t A24minus, f2elm_t A24plus, f2elm_t* coeff)
-{ // Computes the corresponding 3-isogeny of a projective Montgomery point (X3:Z3) of order 3.
-  // Input:  projective point of order three P = (X3:Z3).
-  // Output: the 3-isogenous Montgomery curve with projective coefficient A/C.
-    f2elm_t t0, t1, t2, t3, t4;
-
-    sike_fp2sub(P->X, P->Z, coeff[0]);                   // coeff0 = X-Z
-    sike_fp2sqr_mont(coeff[0], t0);                      // t0 = (X-Z)^2
-    sike_fp2add(P->X, P->Z, coeff[1]);                   // coeff1 = X+Z
-    sike_fp2sqr_mont(coeff[1], t1);                      // t1 = (X+Z)^2
-    sike_fp2add(t0, t1, t2);                             // t2 = (X+Z)^2 + (X-Z)^2
-    sike_fp2add(coeff[0], coeff[1], t3);                 // t3 = 2*X
-    sike_fp2sqr_mont(t3, t3);                            // t3 = 4*X^2
-    sike_fp2sub(t3, t2, t3);                             // t3 = 4*X^2 - (X+Z)^2 - (X-Z)^2
-    sike_fp2add(t1, t3, t2);                             // t2 = 4*X^2 - (X-Z)^2
-    sike_fp2add(t3, t0, t3);                             // t3 = 4*X^2 - (X+Z)^2
-    sike_fp2add(t0, t3, t4);                             // t4 = 4*X^2 - (X+Z)^2 + (X-Z)^2
-    sike_fp2add(t4, t4, t4);                             // t4 = 2(4*X^2 - (X+Z)^2 + (X-Z)^2)
-    sike_fp2add(t1, t4, t4);                             // t4 = 8*X^2 - (X+Z)^2 + 2*(X-Z)^2
-    sike_fp2mul_mont(t2, t4, A24minus);                  // A24minus = [4*X^2 - (X-Z)^2]*[8*X^2 - (X+Z)^2 + 2*(X-Z)^2]
-    sike_fp2add(t1, t2, t4);                             // t4 = 4*X^2 + (X+Z)^2 - (X-Z)^2
-    sike_fp2add(t4, t4, t4);                             // t4 = 2(4*X^2 + (X+Z)^2 - (X-Z)^2)
-    sike_fp2add(t0, t4, t4);                             // t4 = 8*X^2 + 2*(X+Z)^2 - (X-Z)^2
-    sike_fp2mul_mont(t3, t4, t4);                        // t4 = [4*X^2 - (X+Z)^2]*[8*X^2 + 2*(X+Z)^2 - (X-Z)^2]
-    sike_fp2sub(t4, A24minus, t0);                       // t0 = [4*X^2 - (X+Z)^2]*[8*X^2 + 2*(X+Z)^2 - (X-Z)^2] - [4*X^2 - (X-Z)^2]*[8*X^2 - (X+Z)^2 + 2*(X-Z)^2]
-    sike_fp2add(A24minus, t0, A24plus);                  // A24plus = 8*X^2 - (X+Z)^2 + 2*(X-Z)^2
-}
-
-
-void sike_eval_3_isog(point_proj_t Q, f2elm_t* coeff)
-{ // Computes the 3-isogeny R=phi(X:Z), given projective point (X3:Z3) of order 3 on a Montgomery curve and
-  // a point P with 2 coefficients in coeff (computed in the function get_3_isog()).
-  // Inputs: projective points P = (X3:Z3) and Q = (X:Z).
-  // Output: the projective point Q <- phi(Q) = (X3:Z3).
-    f2elm_t t0, t1, t2;
-
-    sike_fp2add(Q->X, Q->Z, t0);                       // t0 = X+Z
-    sike_fp2sub(Q->X, Q->Z, t1);                       // t1 = X-Z
-    sike_fp2mul_mont(t0, coeff[0], t0);                // t0 = coeff0*(X+Z)
-    sike_fp2mul_mont(t1, coeff[1], t1);                // t1 = coeff1*(X-Z)
-    sike_fp2add(t0, t1, t2);                           // t2 = coeff0*(X+Z) + coeff1*(X-Z)
-    sike_fp2sub(t1, t0, t0);                           // t0 = coeff1*(X-Z) - coeff0*(X+Z)
-    sike_fp2sqr_mont(t2, t2);                          // t2 = [coeff0*(X+Z) + coeff1*(X-Z)]^2
-    sike_fp2sqr_mont(t0, t0);                          // t0 = [coeff1*(X-Z) - coeff0*(X+Z)]^2
-    sike_fp2mul_mont(Q->X, t2, Q->X);                  // X3final = X*[coeff0*(X+Z) + coeff1*(X-Z)]^2
-    sike_fp2mul_mont(Q->Z, t0, Q->Z);                  // Z3final = Z*[coeff1*(X-Z) - coeff0*(X+Z)]^2
-}
-
-
-void sike_inv_3_way(f2elm_t z1, f2elm_t z2, f2elm_t z3)
-{ // 3-way simultaneous inversion
-  // Input:  z1,z2,z3
-  // Output: 1/z1,1/z2,1/z3 (override inputs).
-    f2elm_t t0, t1, t2, t3;
-
-    sike_fp2mul_mont(z1, z2, t0);                      // t0 = z1*z2
-    sike_fp2mul_mont(z3, t0, t1);                      // t1 = z1*z2*z3
-    sike_fp2inv_mont(t1);                              // t1 = 1/(z1*z2*z3)
-    sike_fp2mul_mont(z3, t1, t2);                      // t2 = 1/(z1*z2)
-    sike_fp2mul_mont(t2, z2, t3);                      // t3 = 1/z1
-    sike_fp2mul_mont(t2, z1, z2);                      // z2 = 1/z2
-    sike_fp2mul_mont(t0, t1, z3);                      // z3 = 1/z3
-    sike_fp2copy(t3, z1);                              // z1 = 1/z1
-}
-
-
-void sike_get_A(const f2elm_t xP, const f2elm_t xQ, const f2elm_t xR, f2elm_t A)
-{ // Given the x-coordinates of P, Q, and R, returns the value A corresponding to the Montgomery curve E_A: y^2=x^3+A*x^2+x such that R=Q-P on E_A.
-  // Input:  the x-coordinates xP, xQ, and xR of the points P, Q and R.
-  // Output: the coefficient A corresponding to the curve E_A: y^2=x^3+A*x^2+x.
-    f2elm_t t0, t1, one = F2ELM_INIT;
-
-    extern const struct params_t sike_params;
-    sike_fpcopy(sike_params.mont_one, one->c0);
-    sike_fp2add(xP, xQ, t1);                           // t1 = xP+xQ
-    sike_fp2mul_mont(xP, xQ, t0);                      // t0 = xP*xQ
-    sike_fp2mul_mont(xR, t1, A);                       // A = xR*t1
-    sike_fp2add(t0, A, A);                             // A = A+t0
-    sike_fp2mul_mont(t0, xR, t0);                      // t0 = t0*xR
-    sike_fp2sub(A, one, A);                            // A = A-1
-    sike_fp2add(t0, t0, t0);                           // t0 = t0+t0
-    sike_fp2add(t1, xR, t1);                           // t1 = t1+xR
-    sike_fp2add(t0, t0, t0);                           // t0 = t0+t0
-    sike_fp2sqr_mont(A, A);                            // A = A^2
-    sike_fp2inv_mont(t0);                              // t0 = 1/t0
-    sike_fp2mul_mont(A, t0, A);                        // A = A*t0
-    sike_fp2sub(A, t1, A);                             // Afinal = A-t1
-}
-
-
-void sike_j_inv(const f2elm_t A, const f2elm_t C, f2elm_t jinv)
-{ // Computes the j-invariant of a Montgomery curve with projective constant.
-  // Input: A,C in GF(p^2).
-  // Output: j=256*(A^2-3*C^2)^3/(C^4*(A^2-4*C^2)), which is the j-invariant of the Montgomery curve B*y^2=x^3+(A/C)*x^2+x or (equivalently) j-invariant of B'*y^2=C*x^3+A*x^2+C*x.
-    f2elm_t t0, t1;
-
-    sike_fp2sqr_mont(A, jinv);                           // jinv = A^2
-    sike_fp2sqr_mont(C, t1);                             // t1 = C^2
-    sike_fp2add(t1, t1, t0);                             // t0 = t1+t1
-    sike_fp2sub(jinv, t0, t0);                           // t0 = jinv-t0
-    sike_fp2sub(t0, t1, t0);                             // t0 = t0-t1
-    sike_fp2sub(t0, t1, jinv);                           // jinv = t0-t1
-    sike_fp2sqr_mont(t1, t1);                            // t1 = t1^2
-    sike_fp2mul_mont(jinv, t1, jinv);                    // jinv = jinv*t1
-    sike_fp2add(t0, t0, t0);                             // t0 = t0+t0
-    sike_fp2add(t0, t0, t0);                             // t0 = t0+t0
-    sike_fp2sqr_mont(t0, t1);                            // t1 = t0^2
-    sike_fp2mul_mont(t0, t1, t0);                        // t0 = t0*t1
-    sike_fp2add(t0, t0, t0);                             // t0 = t0+t0
-    sike_fp2add(t0, t0, t0);                             // t0 = t0+t0
-    sike_fp2inv_mont(jinv);                              // jinv = 1/jinv
-    sike_fp2mul_mont(jinv, t0, jinv);                    // jinv = t0*jinv
-}
-
-
-void sike_xDBLADD(point_proj_t P, point_proj_t Q, const f2elm_t xPQ, const f2elm_t A24)
-{ // Simultaneous doubling and differential addition.
-  // Input: projective Montgomery points P=(XP:ZP) and Q=(XQ:ZQ) such that xP=XP/ZP and xQ=XQ/ZQ, affine difference xPQ=x(P-Q) and Montgomery curve constant A24=(A+2)/4.
-  // Output: projective Montgomery points P <- 2*P = (X2P:Z2P) such that x(2P)=X2P/Z2P, and Q <- P+Q = (XQP:ZQP) such that = x(Q+P)=XQP/ZQP.
-    f2elm_t t0, t1, t2;
-
-    sike_fp2add(P->X, P->Z, t0);                         // t0 = XP+ZP
-    sike_fp2sub(P->X, P->Z, t1);                         // t1 = XP-ZP
-    sike_fp2sqr_mont(t0, P->X);                          // XP = (XP+ZP)^2
-    sike_fp2sub(Q->X, Q->Z, t2);                         // t2 = XQ-ZQ
-    sike_fp2correction(t2);
-    sike_fp2add(Q->X, Q->Z, Q->X);                       // XQ = XQ+ZQ
-    sike_fp2mul_mont(t0, t2, t0);                        // t0 = (XP+ZP)*(XQ-ZQ)
-    sike_fp2sqr_mont(t1, P->Z);                          // ZP = (XP-ZP)^2
-    sike_fp2mul_mont(t1, Q->X, t1);                      // t1 = (XP-ZP)*(XQ+ZQ)
-    sike_fp2sub(P->X, P->Z, t2);                         // t2 = (XP+ZP)^2-(XP-ZP)^2
-    sike_fp2mul_mont(P->X, P->Z, P->X);                  // XP = (XP+ZP)^2*(XP-ZP)^2
-    sike_fp2mul_mont(t2, A24, Q->X);                     // XQ = A24*[(XP+ZP)^2-(XP-ZP)^2]
-    sike_fp2sub(t0, t1, Q->Z);                           // ZQ = (XP+ZP)*(XQ-ZQ)-(XP-ZP)*(XQ+ZQ)
-    sike_fp2add(Q->X, P->Z, P->Z);                       // ZP = A24*[(XP+ZP)^2-(XP-ZP)^2]+(XP-ZP)^2
-    sike_fp2add(t0, t1, Q->X);                           // XQ = (XP+ZP)*(XQ-ZQ)+(XP-ZP)*(XQ+ZQ)
-    sike_fp2mul_mont(P->Z, t2, P->Z);                    // ZP = [A24*[(XP+ZP)^2-(XP-ZP)^2]+(XP-ZP)^2]*[(XP+ZP)^2-(XP-ZP)^2]
-    sike_fp2sqr_mont(Q->Z, Q->Z);                        // ZQ = [(XP+ZP)*(XQ-ZQ)-(XP-ZP)*(XQ+ZQ)]^2
-    sike_fp2sqr_mont(Q->X, Q->X);                        // XQ = [(XP+ZP)*(XQ-ZQ)+(XP-ZP)*(XQ+ZQ)]^2
-    sike_fp2mul_mont(Q->Z, xPQ, Q->Z);                   // ZQ = xPQ*[(XP+ZP)*(XQ-ZQ)-(XP-ZP)*(XQ+ZQ)]^2
-}
diff --git a/src/third_party/sike/isogeny.h b/src/third_party/sike/isogeny.h
deleted file mode 100644
index 18337dd..0000000
--- a/src/third_party/sike/isogeny.h
+++ /dev/null
@@ -1,49 +0,0 @@
-#ifndef ISOGENY_H_
-#define ISOGENY_H_
-
-// Computes [2^e](X:Z) on Montgomery curve with projective
-// constant via e repeated doublings.
-void sike_xDBLe(
-    const point_proj_t P, point_proj_t Q, const f2elm_t A24plus,
-    const f2elm_t C24, size_t e);
-// Simultaneous doubling and differential addition.
-void sike_xDBLADD(
-    point_proj_t P, point_proj_t Q, const f2elm_t xPQ,
-    const f2elm_t A24);
-// Tripling of a Montgomery point in projective coordinates (X:Z).
-void sike_xTPL(
-    const point_proj_t P, point_proj_t Q, const f2elm_t A24minus,
-    const f2elm_t A24plus);
-// Computes [3^e](X:Z) on Montgomery curve with projective constant
-// via e repeated triplings.
-void sike_xTPLe(
-    const point_proj_t P, point_proj_t Q, const f2elm_t A24minus,
-    const f2elm_t A24plus, size_t e);
-// Given the x-coordinates of P, Q, and R, returns the value A
-// corresponding to the Montgomery curve E_A: y^2=x^3+A*x^2+x such that R=Q-P on E_A.
-void sike_get_A(
-    const f2elm_t xP, const f2elm_t xQ, const f2elm_t xR, f2elm_t A);
-// Computes the j-invariant of a Montgomery curve with projective constant.
-void sike_j_inv(
-    const f2elm_t A, const f2elm_t C, f2elm_t jinv);
-// Computes the corresponding 4-isogeny of a projective Montgomery
-// point (X4:Z4) of order 4.
-void sike_get_4_isog(
-    const point_proj_t P, f2elm_t A24plus, f2elm_t C24, f2elm_t* coeff);
-// Computes the corresponding 3-isogeny of a projective Montgomery
-// point (X3:Z3) of order 3.
-void sike_get_3_isog(
-    const point_proj_t P, f2elm_t A24minus, f2elm_t A24plus,
-    f2elm_t* coeff);
-// Computes the 3-isogeny R=phi(X:Z), given projective point (X3:Z3)
-// of order 3 on a Montgomery curve and a point P with coefficients given in coeff.
-void sike_eval_3_isog(
-    point_proj_t Q, f2elm_t* coeff);
-// Evaluates the isogeny at the point (X:Z) in the domain of the isogeny.
-void sike_eval_4_isog(
-    point_proj_t P, f2elm_t* coeff);
-// 3-way simultaneous inversion
-void sike_inv_3_way(
-    f2elm_t z1, f2elm_t z2, f2elm_t z3);
-
-#endif // ISOGENY_H_
diff --git a/src/third_party/sike/sike.c b/src/third_party/sike/sike.c
deleted file mode 100644
index 87b7417..0000000
--- a/src/third_party/sike/sike.c
+++ /dev/null
@@ -1,531 +0,0 @@
-/********************************************************************************************
-* SIDH: an efficient supersingular isogeny cryptography library
-*
-* Abstract: supersingular isogeny key encapsulation (SIKE) protocol
-*********************************************************************************************/
-
-#include <assert.h>
-#include <stdint.h>
-#include <string.h>
-#include <openssl/bn.h>
-#include <openssl/base.h>
-#include <openssl/rand.h>
-#include <openssl/mem.h>
-#include <openssl/sha.h>
-
-#include "utils.h"
-#include "isogeny.h"
-#include "fpx.h"
-
-extern const struct params_t sike_params;
-
-// SIDH_JINV_BYTESZ is a number of bytes used for encoding j-invariant.
-#define SIDH_JINV_BYTESZ    110U
-// SIDH_PRV_A_BITSZ is a number of bits of SIDH private key (2-isogeny)
-#define SIDH_PRV_A_BITSZ    216U
-// SIDH_PRV_A_BITSZ is a number of bits of SIDH private key (3-isogeny)
-#define SIDH_PRV_B_BITSZ    217U
-// MAX_INT_POINTS_ALICE is a number of points used in 2-isogeny tree computation
-#define MAX_INT_POINTS_ALICE    7U
-// MAX_INT_POINTS_ALICE is a number of points used in 3-isogeny tree computation
-#define MAX_INT_POINTS_BOB      8U
-
-// Swap points.
-// If option = 0 then P <- P and Q <- Q, else if option = 0xFF...FF then P <- Q and Q <- P
-#if !defined(OPENSSL_X86_64) || defined(OPENSSL_NO_ASM)
-static void sike_cswap(point_proj_t P, point_proj_t Q, const crypto_word_t option)
-{
-    crypto_word_t temp;
-    for (size_t i = 0; i < NWORDS_FIELD; i++) {
-        temp = option & (P->X->c0[i] ^ Q->X->c0[i]);
-        P->X->c0[i] = temp ^ P->X->c0[i];
-        Q->X->c0[i] = temp ^ Q->X->c0[i];
-        temp = option & (P->Z->c0[i] ^ Q->Z->c0[i]);
-        P->Z->c0[i] = temp ^ P->Z->c0[i];
-        Q->Z->c0[i] = temp ^ Q->Z->c0[i];
-        temp = option & (P->X->c1[i] ^ Q->X->c1[i]);
-        P->X->c1[i] = temp ^ P->X->c1[i];
-        Q->X->c1[i] = temp ^ Q->X->c1[i];
-        temp = option & (P->Z->c1[i] ^ Q->Z->c1[i]);
-        P->Z->c1[i] = temp ^ P->Z->c1[i];
-        Q->Z->c1[i] = temp ^ Q->Z->c1[i];
-    }
-}
-#endif
-
-// Swap points.
-// If option = 0 then P <- P and Q <- Q, else if option = 0xFF...FF then P <- Q and Q <- P
-static inline void sike_fp2cswap(point_proj_t P, point_proj_t Q, const crypto_word_t option)
-{
-#if defined(OPENSSL_X86_64) && !defined(OPENSSL_NO_ASM)
-    sike_cswap_asm(P, Q, option);
-#else
-    sike_cswap(P, Q, option);
-#endif
-}
-
-static void ladder3Pt(
-    const f2elm_t xP, const f2elm_t xQ, const f2elm_t xPQ, const uint8_t* m,
-    int is_A, point_proj_t R, const f2elm_t A) {
-    point_proj_t R0 = POINT_PROJ_INIT, R2 = POINT_PROJ_INIT;
-    f2elm_t A24 = F2ELM_INIT;
-    crypto_word_t mask;
-    int bit, swap, prevbit = 0;
-
-    const size_t nbits = is_A?SIDH_PRV_A_BITSZ:SIDH_PRV_B_BITSZ;
-
-    // Initializing constant
-    sike_fpcopy(sike_params.mont_one, A24[0].c0);
-    sike_fp2add(A24, A24, A24);
-    sike_fp2add(A, A24, A24);
-    sike_fp2div2(A24, A24);
-    sike_fp2div2(A24, A24); // A24 = (A+2)/4
-
-    // Initializing points
-    sike_fp2copy(xQ, R0->X);
-    sike_fpcopy(sike_params.mont_one, R0->Z[0].c0);
-    sike_fp2copy(xPQ, R2->X);
-    sike_fpcopy(sike_params.mont_one, R2->Z[0].c0);
-    sike_fp2copy(xP, R->X);
-    sike_fpcopy(sike_params.mont_one, R->Z[0].c0);
-    memset(R->Z->c1, 0, sizeof(R->Z->c1));
-
-    // Main loop
-    for (size_t i = 0; i < nbits; i++) {
-        bit = (m[i >> 3] >> (i & 7)) & 1;
-        swap = bit ^ prevbit;
-        prevbit = bit;
-        mask = 0 - (crypto_word_t)swap;
-
-        sike_fp2cswap(R, R2, mask);
-        sike_xDBLADD(R0, R2, R->X, A24);
-        sike_fp2mul_mont(R2->X, R->Z, R2->X);
-    }
-
-    mask = 0 - (crypto_word_t)prevbit;
-    sike_fp2cswap(R, R2, mask);
-}
-
-// Initialization of basis points
-static inline void sike_init_basis(const crypto_word_t *gen, f2elm_t XP, f2elm_t XQ, f2elm_t XR) {
-    sike_fpcopy(gen,                  XP->c0);
-    sike_fpcopy(gen +   NWORDS_FIELD, XP->c1);
-    sike_fpcopy(gen + 2*NWORDS_FIELD, XQ->c0);
-    sike_fpcopy(gen + 3*NWORDS_FIELD, XQ->c1);
-    sike_fpcopy(gen + 4*NWORDS_FIELD, XR->c0);
-    sike_fpcopy(gen + 5*NWORDS_FIELD, XR->c1);
-}
-
-// Conversion of GF(p^2) element from Montgomery to standard representation.
-static inline void sike_fp2_encode(const f2elm_t x, uint8_t *enc) {
-    f2elm_t t;
-    sike_from_fp2mont(x, t);
-
-    // convert to bytes in little endian form
-    for (size_t i=0; i<FIELD_BYTESZ; i++) {
-        enc[i+           0] = (t[0].c0[i/LSZ] >> (8*(i%LSZ))) & 0xFF;
-        enc[i+FIELD_BYTESZ] = (t[0].c1[i/LSZ] >> (8*(i%LSZ))) & 0xFF;
-    }
-}
-
-// Parse byte sequence back into GF(p^2) element, and conversion to Montgomery representation.
-// Elements over GF(p503) are encoded in 63 octets in little endian format
-// (i.e., the least significant octet is located in the lowest memory address).
-static inline void fp2_decode(const uint8_t *enc, f2elm_t t) {
-    memset(t[0].c0, 0, sizeof(t[0].c0));
-    memset(t[0].c1, 0, sizeof(t[0].c1));
-    // convert bytes in little endian form to f2elm_t
-    for (size_t i = 0; i < FIELD_BYTESZ; i++) {
-        t[0].c0[i/LSZ] |= ((crypto_word_t)enc[i+           0]) << (8*(i%LSZ));
-        t[0].c1[i/LSZ] |= ((crypto_word_t)enc[i+FIELD_BYTESZ]) << (8*(i%LSZ));
-    }
-    sike_to_fp2mont(t, t);
-}
-
-// Alice's ephemeral public key generation
-// Input:  a private key prA in the range [0, 2^250 - 1], stored in 32 bytes.
-// Output: the public key pkA consisting of 3 GF(p503^2) elements encoded in 378 bytes.
-static void gen_iso_A(const uint8_t* skA, uint8_t* pkA)
-{
-    point_proj_t R, pts[MAX_INT_POINTS_ALICE];
-    point_proj_t phiP = POINT_PROJ_INIT;
-    point_proj_t phiQ = POINT_PROJ_INIT;
-    point_proj_t phiR = POINT_PROJ_INIT;
-    f2elm_t XPA, XQA, XRA, coeff[3];
-    f2elm_t A24plus = F2ELM_INIT;
-    f2elm_t C24 = F2ELM_INIT;
-    f2elm_t A = F2ELM_INIT;
-    unsigned int m, index = 0, pts_index[MAX_INT_POINTS_ALICE], npts = 0, ii = 0;
-
-    // Initialize basis points
-    sike_init_basis(sike_params.A_gen, XPA, XQA, XRA);
-    sike_init_basis(sike_params.B_gen, phiP->X, phiQ->X, phiR->X);
-    sike_fpcopy(sike_params.mont_one, (phiP->Z)->c0);
-    sike_fpcopy(sike_params.mont_one, (phiQ->Z)->c0);
-    sike_fpcopy(sike_params.mont_one, (phiR->Z)->c0);
-
-    // Initialize constants: A24plus = A+2C, C24 = 4C, where A=6, C=1
-    sike_fpcopy(sike_params.mont_one, A24plus->c0);
-    sike_fp2add(A24plus, A24plus, A24plus);
-    sike_fp2add(A24plus, A24plus, C24);
-    sike_fp2add(A24plus, C24, A);
-    sike_fp2add(C24, C24, A24plus);
-
-    // Retrieve kernel point
-    ladder3Pt(XPA, XQA, XRA, skA, 1, R, A);
-
-    // Traverse tree
-    index = 0;
-    for (size_t row = 1; row < A_max; row++) {
-        while (index < A_max-row) {
-            sike_fp2copy(R->X, pts[npts]->X);
-            sike_fp2copy(R->Z, pts[npts]->Z);
-            pts_index[npts++] = index;
-            m = sike_params.A_strat[ii++];
-            sike_xDBLe(R, R, A24plus, C24, (2*m));
-            index += m;
-        }
-        sike_get_4_isog(R, A24plus, C24, coeff);
-
-        for (size_t i = 0; i < npts; i++) {
-            sike_eval_4_isog(pts[i], coeff);
-        }
-        sike_eval_4_isog(phiP, coeff);
-        sike_eval_4_isog(phiQ, coeff);
-        sike_eval_4_isog(phiR, coeff);
-
-        sike_fp2copy(pts[npts-1]->X, R->X);
-        sike_fp2copy(pts[npts-1]->Z, R->Z);
-        index = pts_index[npts-1];
-        npts -= 1;
-    }
-
-    sike_get_4_isog(R, A24plus, C24, coeff);
-    sike_eval_4_isog(phiP, coeff);
-    sike_eval_4_isog(phiQ, coeff);
-    sike_eval_4_isog(phiR, coeff);
-
-    sike_inv_3_way(phiP->Z, phiQ->Z, phiR->Z);
-    sike_fp2mul_mont(phiP->X, phiP->Z, phiP->X);
-    sike_fp2mul_mont(phiQ->X, phiQ->Z, phiQ->X);
-    sike_fp2mul_mont(phiR->X, phiR->Z, phiR->X);
-
-    // Format public key
-    sike_fp2_encode(phiP->X, pkA);
-    sike_fp2_encode(phiQ->X, pkA + SIDH_JINV_BYTESZ);
-    sike_fp2_encode(phiR->X, pkA + 2*SIDH_JINV_BYTESZ);
-}
-
-// Bob's ephemeral key-pair generation
-// It produces a private key skB and computes the public key pkB.
-// The private key is an integer in the range [0, 2^Floor(Log(2,3^159)) - 1], stored in 32 bytes.
-// The public key consists of 3 GF(p503^2) elements encoded in 378 bytes.
-static void gen_iso_B(const uint8_t* skB, uint8_t* pkB)
-{
-    point_proj_t R, pts[MAX_INT_POINTS_BOB];
-    point_proj_t phiP = POINT_PROJ_INIT;
-    point_proj_t phiQ = POINT_PROJ_INIT;
-    point_proj_t phiR = POINT_PROJ_INIT;
-    f2elm_t XPB, XQB, XRB, coeff[3];
-    f2elm_t A24plus = F2ELM_INIT;
-    f2elm_t A24minus = F2ELM_INIT;
-    f2elm_t A = F2ELM_INIT;
-    unsigned int m, index = 0, pts_index[MAX_INT_POINTS_BOB], npts = 0, ii = 0;
-
-    // Initialize basis points
-    sike_init_basis(sike_params.B_gen, XPB, XQB, XRB);
-    sike_init_basis(sike_params.A_gen, phiP->X, phiQ->X, phiR->X);
-    sike_fpcopy(sike_params.mont_one, (phiP->Z)->c0);
-    sike_fpcopy(sike_params.mont_one, (phiQ->Z)->c0);
-    sike_fpcopy(sike_params.mont_one, (phiR->Z)->c0);
-
-    // Initialize constants: A24minus = A-2C, A24plus = A+2C, where A=6, C=1
-    sike_fpcopy(sike_params.mont_one, A24plus->c0);
-    sike_fp2add(A24plus, A24plus, A24plus);
-    sike_fp2add(A24plus, A24plus, A24minus);
-    sike_fp2add(A24plus, A24minus, A);
-    sike_fp2add(A24minus, A24minus, A24plus);
-
-    // Retrieve kernel point
-    ladder3Pt(XPB, XQB, XRB, skB, 0, R, A);
-
-    // Traverse tree
-    index = 0;
-    for (size_t row = 1; row < B_max; row++) {
-        while (index < B_max-row) {
-            sike_fp2copy(R->X, pts[npts]->X);
-            sike_fp2copy(R->Z, pts[npts]->Z);
-            pts_index[npts++] = index;
-            m = sike_params.B_strat[ii++];
-            sike_xTPLe(R, R, A24minus, A24plus, m);
-            index += m;
-        }
-        sike_get_3_isog(R, A24minus, A24plus, coeff);
-
-        for (size_t i = 0; i < npts; i++) {
-            sike_eval_3_isog(pts[i], coeff);
-        }
-        sike_eval_3_isog(phiP, coeff);
-        sike_eval_3_isog(phiQ, coeff);
-        sike_eval_3_isog(phiR, coeff);
-
-        sike_fp2copy(pts[npts-1]->X, R->X);
-        sike_fp2copy(pts[npts-1]->Z, R->Z);
-        index = pts_index[npts-1];
-        npts -= 1;
-    }
-
-    sike_get_3_isog(R, A24minus, A24plus, coeff);
-    sike_eval_3_isog(phiP, coeff);
-    sike_eval_3_isog(phiQ, coeff);
-    sike_eval_3_isog(phiR, coeff);
-
-    sike_inv_3_way(phiP->Z, phiQ->Z, phiR->Z);
-    sike_fp2mul_mont(phiP->X, phiP->Z, phiP->X);
-    sike_fp2mul_mont(phiQ->X, phiQ->Z, phiQ->X);
-    sike_fp2mul_mont(phiR->X, phiR->Z, phiR->X);
-
-    // Format public key
-    sike_fp2_encode(phiP->X, pkB);
-    sike_fp2_encode(phiQ->X, pkB + SIDH_JINV_BYTESZ);
-    sike_fp2_encode(phiR->X, pkB + 2*SIDH_JINV_BYTESZ);
-}
-
-// Alice's ephemeral shared secret computation
-// It produces a shared secret key ssA using her secret key skA and Bob's public key pkB
-// Inputs: Alice's skA is an integer in the range [0, 2^250 - 1], stored in 32 bytes.
-//         Bob's pkB consists of 3 GF(p503^2) elements encoded in 378 bytes.
-// Output: a shared secret ssA that consists of one element in GF(p503^2) encoded in 126 bytes.
-static void ex_iso_A(const uint8_t* skA, const uint8_t* pkB, uint8_t* ssA)
-{
-    point_proj_t R, pts[MAX_INT_POINTS_ALICE];
-    f2elm_t coeff[3], PKB[3], jinv;
-    f2elm_t A24plus = F2ELM_INIT;
-    f2elm_t C24 = F2ELM_INIT;
-    f2elm_t A = F2ELM_INIT;
-    unsigned int m, index = 0, pts_index[MAX_INT_POINTS_ALICE], npts = 0, ii = 0;
-
-    // Initialize images of Bob's basis
-    fp2_decode(pkB, PKB[0]);
-    fp2_decode(pkB + SIDH_JINV_BYTESZ, PKB[1]);
-    fp2_decode(pkB + 2*SIDH_JINV_BYTESZ, PKB[2]);
-
-    // Initialize constants
-    sike_get_A(PKB[0], PKB[1], PKB[2], A);
-    sike_fpadd(sike_params.mont_one, sike_params.mont_one, C24->c0);
-    sike_fp2add(A, C24, A24plus);
-    sike_fpadd(C24->c0, C24->c0, C24->c0);
-
-    // Retrieve kernel point
-    ladder3Pt(PKB[0], PKB[1], PKB[2], skA, 1, R, A);
-
-    // Traverse tree
-    index = 0;
-    for (size_t row = 1; row < A_max; row++) {
-        while (index < A_max-row) {
-            sike_fp2copy(R->X, pts[npts]->X);
-            sike_fp2copy(R->Z, pts[npts]->Z);
-            pts_index[npts++] = index;
-            m = sike_params.A_strat[ii++];
-            sike_xDBLe(R, R, A24plus, C24, (2*m));
-            index += m;
-        }
-        sike_get_4_isog(R, A24plus, C24, coeff);
-
-        for (size_t i = 0; i < npts; i++) {
-            sike_eval_4_isog(pts[i], coeff);
-        }
-
-        sike_fp2copy(pts[npts-1]->X, R->X);
-        sike_fp2copy(pts[npts-1]->Z, R->Z);
-        index = pts_index[npts-1];
-        npts -= 1;
-    }
-
-    sike_get_4_isog(R, A24plus, C24, coeff);
-    sike_fp2add(A24plus, A24plus, A24plus);
-    sike_fp2sub(A24plus, C24, A24plus);
-    sike_fp2add(A24plus, A24plus, A24plus);
-    sike_j_inv(A24plus, C24, jinv);
-    sike_fp2_encode(jinv, ssA);
-}
-
-// Bob's ephemeral shared secret computation
-// It produces a shared secret key ssB using his secret key skB and Alice's public key pkA
-// Inputs: Bob's skB is an integer in the range [0, 2^Floor(Log(2,3^159)) - 1], stored in 32 bytes.
-//         Alice's pkA consists of 3 GF(p503^2) elements encoded in 378 bytes.
-// Output: a shared secret ssB that consists of one element in GF(p503^2) encoded in 126 bytes.
-static void ex_iso_B(const uint8_t* skB, const uint8_t* pkA, uint8_t* ssB)
-{
-    point_proj_t R, pts[MAX_INT_POINTS_BOB];
-    f2elm_t coeff[3], PKB[3], jinv;
-    f2elm_t A24plus = F2ELM_INIT;
-    f2elm_t A24minus = F2ELM_INIT;
-    f2elm_t A = F2ELM_INIT;
-    unsigned int m, index = 0, pts_index[MAX_INT_POINTS_BOB], npts = 0, ii = 0;
-
-    // Initialize images of Alice's basis
-    fp2_decode(pkA, PKB[0]);
-    fp2_decode(pkA + SIDH_JINV_BYTESZ, PKB[1]);
-    fp2_decode(pkA + 2*SIDH_JINV_BYTESZ, PKB[2]);
-
-    // Initialize constants
-    sike_get_A(PKB[0], PKB[1], PKB[2], A);
-    sike_fpadd(sike_params.mont_one, sike_params.mont_one, A24minus->c0);
-    sike_fp2add(A, A24minus, A24plus);
-    sike_fp2sub(A, A24minus, A24minus);
-
-    // Retrieve kernel point
-    ladder3Pt(PKB[0], PKB[1], PKB[2], skB, 0, R, A);
-
-    // Traverse tree
-    index = 0;
-    for (size_t row = 1; row < B_max; row++) {
-        while (index < B_max-row) {
-            sike_fp2copy(R->X, pts[npts]->X);
-            sike_fp2copy(R->Z, pts[npts]->Z);
-            pts_index[npts++] = index;
-            m = sike_params.B_strat[ii++];
-            sike_xTPLe(R, R, A24minus, A24plus, m);
-            index += m;
-        }
-        sike_get_3_isog(R, A24minus, A24plus, coeff);
-
-        for (size_t i = 0; i < npts; i++) {
-            sike_eval_3_isog(pts[i], coeff);
-        }
-
-        sike_fp2copy(pts[npts-1]->X, R->X);
-        sike_fp2copy(pts[npts-1]->Z, R->Z);
-        index = pts_index[npts-1];
-        npts -= 1;
-    }
-
-    sike_get_3_isog(R, A24minus, A24plus, coeff);
-    sike_fp2add(A24plus, A24minus, A);
-    sike_fp2add(A, A, A);
-    sike_fp2sub(A24plus, A24minus, A24plus);
-    sike_j_inv(A, A24plus, jinv);
-    sike_fp2_encode(jinv, ssB);
-}
-
-int SIKE_keypair(uint8_t out_priv[SIKE_PRV_BYTESZ],
-                 uint8_t out_pub[SIKE_PUB_BYTESZ]) {
-  int ret = 0;
-
-  // Calculate private key for Alice. Needs to be in range [0, 2^0xFA - 1] and <
-  // 253 bits
-  BIGNUM *bn_sidh_prv = BN_new();
-  if (!bn_sidh_prv ||
-      !BN_rand(bn_sidh_prv, SIDH_PRV_B_BITSZ, BN_RAND_TOP_ONE,
-               BN_RAND_BOTTOM_ANY) ||
-      !BN_bn2le_padded(out_priv, BITS_TO_BYTES(SIDH_PRV_B_BITSZ),
-                       bn_sidh_prv)) {
-    goto end;
-  }
-
-  gen_iso_B(out_priv, out_pub);
-  ret = 1;
-
-end:
-  BN_free(bn_sidh_prv);
-  return ret;
-}
-
-void SIKE_encaps(uint8_t out_shared_key[SIKE_SS_BYTESZ],
-                 uint8_t out_ciphertext[SIKE_CT_BYTESZ],
-                 const uint8_t pub_key[SIKE_PUB_BYTESZ]) {
-  // Secret buffer is reused by the function to store some ephemeral
-  // secret data. It's size must be maximum of SHA256_CBLOCK,
-  // SIKE_MSG_BYTESZ and SIDH_PRV_A_BITSZ in bytes.
-  uint8_t secret[SHA256_CBLOCK];
-  uint8_t j[SIDH_JINV_BYTESZ];
-  uint8_t temp[SIKE_MSG_BYTESZ + SIKE_CT_BYTESZ];
-  SHA256_CTX ctx;
-
-  // Generate secret key for A
-  // secret key A = SHA256({0,1}^n || pub_key)) mod SIDH_PRV_A_BITSZ
-  RAND_bytes(temp, SIKE_MSG_BYTESZ);
-
-  SHA256_Init(&ctx);
-  SHA256_Update(&ctx, temp, SIKE_MSG_BYTESZ);
-  SHA256_Update(&ctx, pub_key, SIKE_PUB_BYTESZ);
-  SHA256_Final(secret, &ctx);
-
-  // Generate public key for A - first part of the ciphertext
-  gen_iso_A(secret, out_ciphertext);
-
-  // Generate c1:
-  //  h = SHA256(j-invariant)
-  // c1 = h ^ m
-  ex_iso_A(secret, pub_key, j);
-  SHA256_Init(&ctx);
-  SHA256_Update(&ctx, j, sizeof(j));
-  SHA256_Final(secret, &ctx);
-
-  // c1 = h ^ m
-  uint8_t *c1 = &out_ciphertext[SIKE_PUB_BYTESZ];
-  for (size_t i = 0; i < SIKE_MSG_BYTESZ; i++) {
-    c1[i] = temp[i] ^ secret[i];
-  }
-
-  SHA256_Init(&ctx);
-  SHA256_Update(&ctx, temp, SIKE_MSG_BYTESZ);
-  SHA256_Update(&ctx, out_ciphertext, SIKE_CT_BYTESZ);
-  SHA256_Final(secret, &ctx);
-  // Generate shared secret out_shared_key = SHA256(m||out_ciphertext)
-  memcpy(out_shared_key, secret, SIKE_SS_BYTESZ);
-}
-
-void SIKE_decaps(uint8_t out_shared_key[SIKE_SS_BYTESZ],
-                 const uint8_t ciphertext[SIKE_CT_BYTESZ],
-                 const uint8_t pub_key[SIKE_PUB_BYTESZ],
-                 const uint8_t priv_key[SIKE_PRV_BYTESZ]) {
-  // Secret buffer is reused by the function to store some ephemeral
-  // secret data. It's size must be maximum of SHA256_CBLOCK,
-  // SIKE_MSG_BYTESZ and SIDH_PRV_A_BITSZ in bytes.
-  uint8_t secret[SHA256_CBLOCK];
-  uint8_t j[SIDH_JINV_BYTESZ];
-  uint8_t c0[SIKE_PUB_BYTESZ];
-  uint8_t temp[SIKE_MSG_BYTESZ];
-  uint8_t shared_nok[SIKE_MSG_BYTESZ];
-  SHA256_CTX ctx;
-
-  // This is OK as we are only using ephemeral keys in BoringSSL
-  RAND_bytes(shared_nok, SIKE_MSG_BYTESZ);
-
-  // Recover m
-  // Let ciphertext = c0 || c1 - both have fixed sizes
-  // m = F(j-invariant(c0, priv_key)) ^ c1
-  ex_iso_B(priv_key, ciphertext, j);
-
-  SHA256_Init(&ctx);
-  SHA256_Update(&ctx, j, sizeof(j));
-  SHA256_Final(secret, &ctx);
-
-  const uint8_t *c1 = &ciphertext[sizeof(c0)];
-  for (size_t i = 0; i < SIKE_MSG_BYTESZ; i++) {
-    temp[i] = c1[i] ^ secret[i];
-  }
-
-  SHA256_Init(&ctx);
-  SHA256_Update(&ctx, temp, SIKE_MSG_BYTESZ);
-  SHA256_Update(&ctx, pub_key, SIKE_PUB_BYTESZ);
-  SHA256_Final(secret, &ctx);
-
-  // Recover c0 = public key A
-  gen_iso_A(secret, c0);
-  crypto_word_t ok = constant_time_is_zero_w(
-      CRYPTO_memcmp(c0, ciphertext, SIKE_PUB_BYTESZ));
-  for (size_t i = 0; i < SIKE_MSG_BYTESZ; i++) {
-    temp[i] = constant_time_select_8(ok, temp[i], shared_nok[i]);
-  }
-
-  SHA256_Init(&ctx);
-  SHA256_Update(&ctx, temp, SIKE_MSG_BYTESZ);
-  SHA256_Update(&ctx, ciphertext, SIKE_CT_BYTESZ);
-  SHA256_Final(secret, &ctx);
-
-  // Generate shared secret out_shared_key = SHA256(m||ciphertext)
-  memcpy(out_shared_key, secret, SIKE_SS_BYTESZ);
-}
diff --git a/src/third_party/sike/sike.h b/src/third_party/sike/sike.h
deleted file mode 100644
index 5819ebf..0000000
--- a/src/third_party/sike/sike.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/********************************************************************************************
-* SIDH: an efficient supersingular isogeny cryptography library
-*
-* Abstract: API header file for SIKE
-*********************************************************************************************/
-
-#ifndef SIKE_H_
-#define SIKE_H_
-
-#include <stdint.h>
-#include <openssl/base.h>
-
-#if defined(__cplusplus)
-extern "C" {
-#endif
-
-/* SIKE
- *
- * SIKE is a isogeny based post-quantum key encapsulation mechanism. Description of the
- * algorithm is provided in [SIKE]. This implementation uses 434-bit field size. The code
- * is based on "Additional_Implementations" from PQC NIST submission package which can
- * be found here:
- * https://csrc.nist.gov/CSRC/media/Projects/Post-Quantum-Cryptography/documents/round-1/submissions/SIKE.zip
- *
- * [SIKE] https://sike.org/files/SIDH-spec.pdf
- */
-
-// SIKE_PUB_BYTESZ is the number of bytes in a public key.
-#define SIKE_PUB_BYTESZ 330
-// SIKE_PRV_BYTESZ is the number of bytes in a private key.
-#define SIKE_PRV_BYTESZ 28
-// SIKE_SS_BYTESZ is the number of bytes in a shared key.
-#define SIKE_SS_BYTESZ  16
-// SIKE_MSG_BYTESZ is the number of bytes in a random bit string concatenated
-// with the public key (see 1.4 of SIKE).
-#define SIKE_MSG_BYTESZ 16
-// SIKE_SS_BYTESZ is the number of bytes in a ciphertext.
-#define SIKE_CT_BYTESZ  (SIKE_PUB_BYTESZ + SIKE_MSG_BYTESZ)
-
-// SIKE_keypair outputs a public and secret key. Internally it uses BN_rand() as
-// an entropy source. In case of success function returns 1, otherwise 0.
-OPENSSL_EXPORT int SIKE_keypair(
-    uint8_t out_priv[SIKE_PRV_BYTESZ],
-    uint8_t out_pub[SIKE_PUB_BYTESZ]);
-
-// SIKE_encaps generates and encrypts a random session key, writing those values to
-// |out_shared_key| and |out_ciphertext|, respectively.
-OPENSSL_EXPORT void SIKE_encaps(
-    uint8_t out_shared_key[SIKE_SS_BYTESZ],
-    uint8_t out_ciphertext[SIKE_CT_BYTESZ],
-    const uint8_t pub_key[SIKE_PUB_BYTESZ]);
-
-// SIKE_decaps outputs a random session key, writing it to |out_shared_key|.
-OPENSSL_EXPORT void SIKE_decaps(
-    uint8_t out_shared_key[SIKE_SS_BYTESZ],
-    const uint8_t ciphertext[SIKE_CT_BYTESZ],
-    const uint8_t pub_key[SIKE_PUB_BYTESZ],
-    const uint8_t priv_key[SIKE_PRV_BYTESZ]);
-
-#if defined(__cplusplus)
-}
-#endif
-
-#endif
diff --git a/src/third_party/sike/sike_test.cc b/src/third_party/sike/sike_test.cc
deleted file mode 100644
index 2180a52..0000000
--- a/src/third_party/sike/sike_test.cc
+++ /dev/null
@@ -1,251 +0,0 @@
-/* Copyright (c) 2018, Google Inc.
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
- * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
- * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
- * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
-
-#include <gtest/gtest.h>
-#include <stdint.h>
-
-#include "sike.h"
-#include "fpx.h"
-#include "../../crypto/test/abi_test.h"
-
-TEST(SIKE, RoundTrip) {
-  uint8_t sk[SIKE_PRV_BYTESZ] = {0};
-  uint8_t pk[SIKE_PUB_BYTESZ] = {0};
-  uint8_t ct[SIKE_CT_BYTESZ] = {0};
-  uint8_t ss_enc[SIKE_SS_BYTESZ] = {0};
-  uint8_t ss_dec[SIKE_SS_BYTESZ] = {0};
-
-  for (size_t i = 0; i < 30; i++) {
-    EXPECT_EQ(SIKE_keypair(sk, pk), 1);
-    SIKE_encaps(ss_enc, ct, pk);
-    SIKE_decaps(ss_dec, ct, pk, sk);
-
-    EXPECT_EQ(memcmp(ss_enc, ss_dec, SIKE_SS_BYTESZ), 0);
-  }
-}
-
-TEST(SIKE, Decapsulation) {
-  const uint8_t sk[SIKE_PRV_BYTESZ] = {
-      0xB1, 0xFD, 0x34, 0x42, 0xDB, 0x02, 0xBC, 0x9D, 0x4C, 0xD0,
-      0x72, 0x34, 0x4D, 0xBD, 0x06, 0xDF, 0x1C, 0x7D, 0x0A, 0x88,
-      0xB2, 0x50, 0xC4, 0xF6, 0xAE, 0xE8, 0x25, 0x01};
-
-  const uint8_t pk[SIKE_PUB_BYTESZ] = {
-      0x6D, 0x8D, 0xF5, 0x7B, 0xCD, 0x47, 0xCA, 0xCB, 0x7A, 0x38, 0xB7, 0xA6,
-      0x90, 0xB7, 0x37, 0x03, 0xD4, 0x6F, 0x27, 0x73, 0x74, 0x17, 0x5A, 0xA4,
-      0x0D, 0xC6, 0x81, 0xAD, 0xDB, 0xF7, 0x18, 0xB2, 0x3C, 0x30, 0xCF, 0xAA,
-      0x08, 0x11, 0x91, 0xCC, 0x27, 0x4E, 0xF1, 0xA6, 0xB7, 0xDA, 0xD2, 0xCF,
-      0x99, 0x7F, 0xF7, 0xE1, 0xD0, 0xCE, 0x00, 0xD2, 0x4B, 0xA4, 0x33, 0xB4,
-      0x87, 0x01, 0x3F, 0x02, 0xF7, 0xF9, 0xDE, 0xC3, 0x60, 0x62, 0xDA, 0x3F,
-      0x74, 0xA9, 0x44, 0xBE, 0x19, 0xD5, 0x03, 0x2A, 0x79, 0x8C, 0xA7, 0xFF,
-      0xEA, 0xB3, 0xBB, 0xB5, 0xD4, 0x1D, 0x8F, 0x92, 0xCE, 0x62, 0x6E, 0x99,
-      0x24, 0xD7, 0x57, 0xFA, 0xCD, 0xB6, 0xE2, 0x8E, 0xFD, 0x22, 0x0E, 0x31,
-      0x21, 0x01, 0x8D, 0x79, 0xF8, 0x3E, 0x27, 0xEC, 0x43, 0x40, 0xDB, 0x82,
-      0xE5, 0xEB, 0x6C, 0x97, 0x66, 0x29, 0x15, 0x68, 0xB7, 0x4D, 0x84, 0xD1,
-      0x8A, 0x0B, 0x12, 0x36, 0x2C, 0x0C, 0x0A, 0x6E, 0x4E, 0xDE, 0xA5, 0x8A,
-      0xDE, 0x77, 0xDD, 0x70, 0x49, 0x73, 0xAC, 0x27, 0x6D, 0x8D, 0x25, 0x9A,
-      0xE4, 0x25, 0xE8, 0x95, 0x8F, 0xFE, 0x90, 0x3B, 0x00, 0x69, 0x20, 0xE8,
-      0x7C, 0xA5, 0xF5, 0x79, 0xC0, 0x61, 0x51, 0x91, 0x35, 0x25, 0x3F, 0x17,
-      0x2F, 0x70, 0x73, 0xF0, 0x89, 0xB5, 0xC8, 0x25, 0xB8, 0xE5, 0x7E, 0x34,
-      0xDD, 0x11, 0xE5, 0xD6, 0xC3, 0xD5, 0x29, 0x89, 0xC6, 0x2C, 0x99, 0x53,
-      0x1D, 0x2C, 0x77, 0xB0, 0xB6, 0xA1, 0xBD, 0x79, 0xFB, 0x4A, 0xC2, 0x48,
-      0x4C, 0x62, 0x51, 0x00, 0xE3, 0x91, 0x2A, 0xCB, 0x84, 0x03, 0x5D, 0x2D,
-      0xC8, 0x33, 0xE9, 0x14, 0xBF, 0x74, 0x21, 0xBC, 0xF4, 0x76, 0xE5, 0x42,
-      0xB8, 0xBD, 0xE2, 0xE7, 0x20, 0x95, 0x54, 0xF2, 0xED, 0xC0, 0x79, 0x38,
-      0x1E, 0xD2, 0xEA, 0x1A, 0x63, 0x85, 0xE7, 0x3A, 0xDA, 0xAD, 0xAB, 0x1B,
-      0x1E, 0x19, 0x9E, 0x73, 0xD0, 0x10, 0x2E, 0x38, 0xAC, 0x8B, 0x00, 0x6A,
-      0x30, 0x2C, 0x3D, 0x70, 0x8E, 0x39, 0x6D, 0xC0, 0x12, 0x61, 0x7D, 0x2A,
-      0x0A, 0x04, 0x95, 0x8E, 0x09, 0x3C, 0x7B, 0xEC, 0x2E, 0xBC, 0xE8, 0xE8,
-      0xE8, 0x37, 0x29, 0xC4, 0x7E, 0x76, 0x48, 0xB9, 0x3B, 0x72, 0xE5, 0x99,
-      0x9B, 0xF9, 0xE3, 0x99, 0x72, 0x3F, 0x35, 0x29, 0x85, 0xE0, 0xC8, 0xBF,
-      0xB1, 0x6B, 0xB1, 0x6E, 0x72, 0x00};
-
-  const uint8_t ct[SIKE_CT_BYTESZ] = {
-      0xFF, 0xEB, 0xEF, 0x4A, 0xC0, 0x57, 0x0F, 0x26, 0xAC, 0x76, 0xA8, 0xB0,
-      0xA3, 0x5D, 0x9C, 0xD9, 0x25, 0xD1, 0x7F, 0x92, 0x5D, 0xF4, 0x23, 0x34,
-      0xC3, 0x03, 0x10, 0xE1, 0xB0, 0x24, 0x9B, 0x44, 0x58, 0x26, 0x13, 0x56,
-      0x83, 0x43, 0x72, 0x69, 0x28, 0x0D, 0x55, 0x07, 0x1F, 0xDB, 0xC0, 0x23,
-      0x34, 0x83, 0x1A, 0x09, 0x9B, 0x80, 0x00, 0x64, 0x56, 0xDC, 0x79, 0x7A,
-      0xD2, 0xCE, 0x23, 0xC9, 0x72, 0x27, 0xFC, 0x8D, 0xAB, 0xBF, 0xD3, 0x17,
-      0xF6, 0x91, 0x7B, 0x15, 0x93, 0x83, 0x8A, 0x4F, 0x6C, 0xCA, 0x4A, 0x94,
-      0xDA, 0xC7, 0x9D, 0xB6, 0xD6, 0xBA, 0xBD, 0x81, 0x9A, 0x78, 0xE5, 0xE5,
-      0xBE, 0x17, 0xBC, 0xCB, 0xC8, 0x23, 0x80, 0x5F, 0x75, 0xF8, 0xDB, 0x51,
-      0x55, 0x00, 0x25, 0x33, 0x52, 0x64, 0xB2, 0xD6, 0xD8, 0x9A, 0x2A, 0x9E,
-      0x29, 0x99, 0x13, 0x33, 0xE2, 0xA7, 0x98, 0xAC, 0xD7, 0x79, 0x5C, 0x2F,
-      0xBA, 0x07, 0xC3, 0x03, 0x37, 0xD6, 0xE6, 0xB5, 0xA1, 0xF5, 0x29, 0xB6,
-      0xF6, 0xC0, 0x5C, 0x44, 0x68, 0x2B, 0x0B, 0xF5, 0x00, 0x01, 0x44, 0xD5,
-      0xCC, 0x23, 0xB5, 0x27, 0x4F, 0xCA, 0xB4, 0x05, 0x01, 0xF9, 0xD4, 0x41,
-      0xE0, 0xE1, 0x1E, 0xCF, 0xA9, 0xBC, 0x79, 0xD7, 0xD5, 0xF5, 0x3C, 0xE6,
-      0x93, 0xF4, 0x6C, 0x84, 0x5A, 0x2C, 0x4B, 0xE4, 0x91, 0xB2, 0xB2, 0xB8,
-      0xAD, 0x74, 0x9A, 0x69, 0x79, 0x4C, 0x84, 0xB7, 0xBF, 0xF1, 0x68, 0x4B,
-      0xAE, 0x0F, 0x7F, 0x45, 0x3B, 0x18, 0x3F, 0xFA, 0x00, 0x48, 0xE0, 0x3A,
-      0xE2, 0xC0, 0xAE, 0x00, 0xCE, 0x90, 0x28, 0xA4, 0x1B, 0xBE, 0xCA, 0x0C,
-      0x21, 0x29, 0x64, 0x30, 0x5E, 0x35, 0xAD, 0xFD, 0x83, 0x47, 0x40, 0x6D,
-      0x15, 0x56, 0xFC, 0xF8, 0x5F, 0xAB, 0x81, 0xFE, 0x6B, 0xE9, 0x6B, 0xED,
-      0x27, 0x35, 0x7C, 0xD8, 0x2C, 0xD4, 0xF2, 0x11, 0xE6, 0xAF, 0xDF, 0xB8,
-      0x91, 0x96, 0xEB, 0xF7, 0x4C, 0x8D, 0x70, 0x77, 0x90, 0x81, 0x00, 0x09,
-      0x19, 0x27, 0x8A, 0x9E, 0xB6, 0x1A, 0xE9, 0xAC, 0x6C, 0xC9, 0xF8, 0xEA,
-      0xA2, 0x34, 0xB8, 0xAC, 0xB3, 0xB3, 0x68, 0xA1, 0xB7, 0x29, 0x55, 0xCA,
-      0x40, 0x23, 0x92, 0x5C, 0x0C, 0x79, 0x6B, 0xD6, 0x9F, 0x5B, 0xD2, 0xE6,
-      0xAE, 0x04, 0xCB, 0xEC, 0xC7, 0x88, 0x18, 0xDB, 0x7A, 0xE6, 0xD6, 0xC9,
-      0x39, 0xFD, 0x93, 0x9B, 0xC8, 0x01, 0x6F, 0x3E, 0x6C, 0x90, 0x3E, 0x73,
-      0x76, 0x99, 0x7C, 0x48, 0xDA, 0x68, 0x48, 0x80, 0x2B, 0x63};
-
-  const uint8_t ss_exp[SIKE_SS_BYTESZ] = {0xA1, 0xF9, 0x5A, 0x67, 0xB9, 0x3D,
-                                          0x1E, 0x72, 0xE8, 0xC5, 0x71, 0xF1,
-                                          0x4C, 0xB2, 0xAA, 0x6D};
-
-  uint8_t ss_dec[SIKE_SS_BYTESZ] = {0};
-  SIKE_decaps(ss_dec, ct, pk, sk);
-  EXPECT_EQ(memcmp(ss_dec, ss_exp, sizeof(ss_exp)), 0);
-}
-
-// SIKE_encaps and SIKE_keypair doesn't return zeros.
-TEST(SIKE, NonZero) {
-  uint8_t sk[SIKE_PRV_BYTESZ] = {0};
-  uint8_t pk[SIKE_PUB_BYTESZ] = {0};
-  uint8_t ct[SIKE_CT_BYTESZ] = {0};
-  uint8_t ss[SIKE_SS_BYTESZ] = {0};
-
-  // Check secret and public key returned by SIKE_keypair
-  EXPECT_EQ(SIKE_keypair(sk, pk), 1);
-  uint8_t tmp = 0;
-  for (size_t i = 0; i < sizeof(sk); i++) {
-    tmp |= sk[i];
-  }
-  EXPECT_NE(tmp, 0);
-
-  tmp = 0;
-  for (size_t i = 0; i < sizeof(pk); i++) {
-    tmp |= pk[i];
-  }
-  EXPECT_NE(tmp, 0);
-
-  // Check shared secret and ciphertext returned by SIKE_encaps
-  SIKE_encaps(ss, ct, pk);
-  tmp = 0;
-  for (size_t i = 0; i < sizeof(ct); i++) {
-    tmp |= ct[i];
-  }
-  EXPECT_NE(tmp, 0);
-
-  tmp = 0;
-  for (size_t i = 0; i < sizeof(ss); i++) {
-    tmp |= ss[i];
-  }
-  EXPECT_NE(tmp, 0);
-}
-
-TEST(SIKE, Negative) {
-  uint8_t sk[SIKE_PRV_BYTESZ] = {0};
-  uint8_t pk[SIKE_PUB_BYTESZ] = {0};
-  uint8_t ct[SIKE_CT_BYTESZ] = {0};
-  uint8_t ss_enc[SIKE_SS_BYTESZ] = {0};
-  uint8_t ss_dec[SIKE_SS_BYTESZ] = {0};
-
-  EXPECT_EQ(SIKE_keypair(sk, pk), 1);
-  SIKE_encaps(ss_enc, ct, pk);
-
-  // Change cipertext
-  uint8_t ct_tmp[SIKE_CT_BYTESZ] = {0};
-  memcpy(ct_tmp, ct, sizeof(ct));
-  ct_tmp[0] = ~ct_tmp[0];
-  SIKE_decaps(ss_dec, ct_tmp, pk, sk);
-  EXPECT_NE(memcmp(ss_enc, ss_dec, SIKE_SS_BYTESZ), 0);
-
-  // Change secret key
-  uint8_t sk_tmp[SIKE_PRV_BYTESZ] = {0};
-  memcpy(sk_tmp, sk, sizeof(sk));
-  sk_tmp[0] = ~sk_tmp[0];
-  SIKE_decaps(ss_dec, ct, pk, sk_tmp);
-  EXPECT_NE(memcmp(ss_enc, ss_dec, SIKE_SS_BYTESZ), 0);
-
-  // Change public key
-  uint8_t pk_tmp[SIKE_PUB_BYTESZ] = {0};
-  memcpy(pk_tmp, pk, sizeof(pk));
-  pk_tmp[0] = ~pk_tmp[0];
-  SIKE_decaps(ss_dec, ct, pk_tmp, sk);
-  EXPECT_NE(memcmp(ss_enc, ss_dec, SIKE_SS_BYTESZ), 0);
-}
-
-TEST(SIKE, Unaligned) {
-  alignas(4) uint8_t priv[SIKE_PRV_BYTESZ + 1];
-  alignas(4) uint8_t pub[SIKE_PUB_BYTESZ + 1];
-  alignas(4) uint8_t shared_key1[SIKE_SS_BYTESZ + 1];
-  alignas(4) uint8_t ciphertext[SIKE_CT_BYTESZ + 1];
-  alignas(4) uint8_t shared_key2[SIKE_SS_BYTESZ + 1];
-
-  ASSERT_TRUE(SIKE_keypair(priv + 1, pub + 1));
-  SIKE_encaps(shared_key1 + 1, ciphertext + 1, pub + 1);
-  SIKE_decaps(shared_key2 + 1, ciphertext + 1, pub + 1, priv + 1);
-
-  EXPECT_EQ(memcmp(shared_key1 + 1, shared_key2 + 1, SIKE_SS_BYTESZ), 0);
-}
-
-#if defined(SUPPORTS_ABI_TEST) && \
-    (defined(OPENSSL_X86_64) || defined(OPENSSL_AARCH64))
-TEST(SIKE, ABI) {
-  felm_t a, b, c;
-  dfelm_t d, e, f;
-  CHECK_ABI(sike_fpadd, a, b, c);
-  CHECK_ABI(sike_fpsub, a, b, c);
-  CHECK_ABI(sike_mpmul, a, b, d);
-  CHECK_ABI(sike_fprdc, d, a);
-  CHECK_ABI(sike_mpadd_asm, a, b, c);
-  CHECK_ABI(sike_mpsubx2_asm, d, e, f);
-  CHECK_ABI(sike_mpdblsubx2_asm, d, e, f);
-}
-
-// Additional tests for checking if assembly implementation
-// of MUL and REDC handles carry chains correctly.
-TEST(SIKE, CarryChains) {
-  // Expected results
-  const dfelm_t exp_mul = {
-    0x0000000000000001, 0x0000000000000000, 0x0000000000000000,
-    0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
-    0x0000000000000000, 0xFFFFFFFFFFFFFFFE, 0xFFFFFFFFFFFFFFFF,
-    0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF,
-    0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF,
-  };
-
-  const felm_t exp_redc = {
-    0x93AA0C8C2D3235BE, 0xA8CD35DDDE399B46, 0xB9BBA5469509CA65,
-    0x6B2FB3A5A2FB86E4, 0x585591BA6DBE862C, 0xD92D3FF5FE0938F2,
-    0x0001E1F0EE75A1E1
-  };
-
-  // Input
-  dfelm_t in14 = {
-    0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF,
-    0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF,
-    0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF,
-    0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF,
-    0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF
-  };
-
-  felm_t in7 = {
-    0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF,
-    0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF,
-    0xFFFFFFFFFFFFFFFF
-  };
-
-  dfelm_t res;
-  sike_mpmul(in7, in7, res);
-  EXPECT_EQ(memcmp(exp_mul, res, sizeof(exp_mul)), 0);
-
-  // modifies in14 and in7
-  sike_fprdc(in14, in7);
-  EXPECT_EQ(memcmp(exp_redc, in7, sizeof(exp_redc)), 0);
-}
-#endif  // SUPPORTS_ABI_TEST && (X86_64 || AARCH64)
diff --git a/src/third_party/sike/utils.h b/src/third_party/sike/utils.h
deleted file mode 100644
index cbc8329..0000000
--- a/src/third_party/sike/utils.h
+++ /dev/null
@@ -1,145 +0,0 @@
-/********************************************************************************************
-* SIDH: an efficient supersingular isogeny cryptography library
-*
-* Abstract: internal header file for P434
-*********************************************************************************************/
-
-#ifndef UTILS_H_
-#define UTILS_H_
-
-#include <openssl/base.h>
-
-#include "../crypto/internal.h"
-#include "sike.h"
-
-// Conversion macro from number of bits to number of bytes
-#define BITS_TO_BYTES(nbits)      (((nbits)+7)/8)
-
-// Bit size of the field
-#define BITS_FIELD              434
-// Byte size of the field
-#define FIELD_BYTESZ            BITS_TO_BYTES(BITS_FIELD)
-// Number of 64-bit words of a 224-bit element
-#define NBITS_ORDER             224
-#define NWORDS64_ORDER          ((NBITS_ORDER+63)/64)
-// Number of elements in Alice's strategy
-#define A_max                   108
-// Number of elements in Bob's strategy
-#define B_max                   137
-// Word size size
-#define RADIX                   sizeof(crypto_word_t)*8
-// Byte size of a limb
-#define LSZ                     sizeof(crypto_word_t)
-
-#if defined(OPENSSL_64_BIT)
-    // Number of words of a 434-bit field element
-    #define NWORDS_FIELD    7
-    // Number of "0" digits in the least significant part of p434 + 1
-    #define ZERO_WORDS 3
-    // U64_TO_WORDS expands |x| for a |crypto_word_t| array literal.
-    #define U64_TO_WORDS(x) UINT64_C(x)
-#else
-    // Number of words of a 434-bit field element
-    #define NWORDS_FIELD    14
-    // Number of "0" digits in the least significant part of p434 + 1
-    #define ZERO_WORDS 6
-    // U64_TO_WORDS expands |x| for a |crypto_word_t| array literal.
-    #define U64_TO_WORDS(x) \
-        (uint32_t)(UINT64_C(x) & 0xffffffff), (uint32_t)(UINT64_C(x) >> 32)
-#endif
-
-// Extended datatype support
-#if !defined(BORINGSSL_HAS_UINT128)
-    typedef uint64_t uint128_t[2];
-#endif
-
-// The following functions return 1 (TRUE) if condition is true, 0 (FALSE) otherwise
-// Digit multiplication
-#define MUL(multiplier, multiplicand, hi, lo) digit_x_digit((multiplier), (multiplicand), &(lo));
-
-// If mask |x|==0xff.ff set |x| to 1, otherwise 0
-#define M2B(x) ((x)>>(RADIX-1))
-
-// Digit addition with carry
-#define ADDC(carryIn, addend1, addend2, carryOut, sumOut)                   \
-do {                                                                        \
-  crypto_word_t tempReg = (addend1) + (crypto_word_t)(carryIn);             \
-  (sumOut) = (addend2) + tempReg;                                           \
-  (carryOut) = M2B(constant_time_lt_w(tempReg, (crypto_word_t)(carryIn)) |  \
-                   constant_time_lt_w((sumOut), tempReg));                  \
-} while(0)
-
-// Digit subtraction with borrow
-#define SUBC(borrowIn, minuend, subtrahend, borrowOut, differenceOut)           \
-do {                                                                            \
-    crypto_word_t tempReg = (minuend) - (subtrahend);                           \
-    crypto_word_t borrowReg = M2B(constant_time_lt_w((minuend), (subtrahend))); \
-    borrowReg |= ((borrowIn) & constant_time_is_zero_w(tempReg));               \
-    (differenceOut) = tempReg - (crypto_word_t)(borrowIn);                      \
-    (borrowOut) = borrowReg;                                                    \
-} while(0)
-
-/* Old GCC 4.9 (jessie) doesn't implement {0} initialization properly,
-   which violates C11 as described in 6.7.9, 21 (similarily C99, 6.7.8).
-   Defines below are used to work around the bug, and provide a way
-   to initialize f2elem_t and point_proj_t structs.
-   Bug has been fixed in GCC6 (debian stretch).
-*/
-#define F2ELM_INIT {{ {0}, {0} }}
-#define POINT_PROJ_INIT {{ F2ELM_INIT, F2ELM_INIT }}
-
-// Datatype for representing 434-bit field elements (448-bit max.)
-// Elements over GF(p434) are encoded in 63 octets in little endian format
-// (i.e., the least significant octet is located in the lowest memory address).
-typedef crypto_word_t felm_t[NWORDS_FIELD];
-
-// An element in F_{p^2}, is composed of two coefficients from F_p, * i.e.
-// Fp2 element = c0 + c1*i in F_{p^2}
-// Datatype for representing double-precision 2x434-bit field elements (448-bit max.)
-// Elements (a+b*i) over GF(p434^2), where a and b are defined over GF(p434), are
-// encoded as {a, b}, with a in the lowest memory portion.
-typedef struct {
-    felm_t c0;
-    felm_t c1;
-} fp2;
-
-// Our F_{p^2} element type is a pointer to the struct.
-typedef fp2 f2elm_t[1];
-
-// Datatype for representing double-precision 2x434-bit
-// field elements in contiguous memory.
-typedef crypto_word_t dfelm_t[2*NWORDS_FIELD];
-
-// Constants used during SIKE computation.
-struct params_t {
-    // Stores a prime
-    const crypto_word_t prime[NWORDS_FIELD];
-    // Stores prime + 1
-    const crypto_word_t prime_p1[NWORDS_FIELD];
-    // Stores prime * 2
-    const crypto_word_t prime_x2[NWORDS_FIELD];
-    // Alice's generator values {XPA0 + XPA1*i, XQA0 + XQA1*i, XRA0 + XRA1*i}
-    // in GF(prime^2), expressed in Montgomery representation
-    const crypto_word_t A_gen[6*NWORDS_FIELD];
-    // Bob's generator values {XPB0 + XPB1*i, XQB0 + XQB1*i, XRB0 + XRB1*i}
-    // in GF(prime^2), expressed in Montgomery representation
-    const crypto_word_t B_gen[6*NWORDS_FIELD];
-    // Montgomery constant mont_R2 = (2^448)^2 mod prime
-    const crypto_word_t mont_R2[NWORDS_FIELD];
-    // Value 'one' in Montgomery representation
-    const crypto_word_t mont_one[NWORDS_FIELD];
-    // Value '6' in Montgomery representation
-    const crypto_word_t mont_six[NWORDS_FIELD];
-    // Fixed parameters for isogeny tree computation
-    const unsigned int A_strat[A_max-1];
-    const unsigned int B_strat[B_max-1];
-};
-
-// Point representation in projective XZ Montgomery coordinates.
-typedef struct {
-    f2elm_t X;
-    f2elm_t Z;
-} point_proj;
-typedef point_proj point_proj_t[1];
-
-#endif // UTILS_H_
diff --git a/src/third_party/wycheproof_testvectors/kwp_test.txt b/src/third_party/wycheproof_testvectors/kwp_test.txt
deleted file mode 100644
index ef48491..0000000
--- a/src/third_party/wycheproof_testvectors/kwp_test.txt
+++ /dev/null
@@ -1,1562 +0,0 @@
-# Imported from Wycheproof's third_party/wycheproof_testvectors/kwp_test.json.
-# This file is generated by convert_wycheproof.go. Do not edit by hand.
-#
-# Algorithm: KWP
-# Generator version: 0.4.12
-
-[keySize = 128]
-
-# tcId = 1
-ct = 8cd63fa6788aa5edfa753fc87d645a672b14107c3b4519e7
-key = 6f67486d1e914419cb43c28509c7c1ea
-msg = 8dc0632d92ee0be4f740028410b08270
-result = valid
-
-# tcId = 2
-ct = e8bac475d1429034b32f9bdeec09a37f9b3704028f1e0270
-key = a0b17172bb296db7f5c869e9a36b5ce3
-msg = 615dd022d607c910f20178cbdf42060f
-result = valid
-
-# tcId = 3
-ct = 4c8bcd601b508ef399f71b841294497a4493c4a0014c0103
-key = 0e49d571c19b5250effd41d94bde39d6
-msg = f25e4de8caca363fd5f29442eb147b55
-result = valid
-
-# tcId = 4
-# wrapped key is longer than wrapping key
-ct = 9e4510cc84c4bd7abab0a8a5d7f1e6ff3e6777ca2dff9be7e223652239fe57d8
-key = e0e12959109103e30ae8b5684a22e662
-msg = dbb0f2bb2be912a20430972d9842ce3fd3b928e573e1ac8e
-result = acceptable
-
-# tcId = 5
-# wrapped key is longer than wrapping key
-ct = 8fbf39ae583bd4efa7a3e8f7b86870b34766ae7d8923a8e97b0cd289ad98cacb
-key = dd583d9f1059861430ec8b5d8a180e9b
-msg = f2e34f356362a31b51d6e02bcd333c9e6170494ca5ff5487
-result = acceptable
-
-# tcId = 6
-# wrapped key is longer than wrapping key
-ct = df2fbe5fa86418edc7b5b04a4aea724aca17e88cedc84ca8b0b0f048e64590cb
-key = faf5ccfae42b43cee2c5f0f3177a7c5d
-msg = 4e02084833660c463830483b36dab866c64c8cf7429cac3d
-result = acceptable
-
-# tcId = 7
-# wrapped key is longer than wrapping key
-ct = 67f8edf57f84ea0a35b35511d67d3f299c9984b2c07d3809c3d7f5f45091f1a8fbb937ed447677f6
-key = c2b9d23f2831ddcdeb456853d4014db9
-msg = f4cfea98e58b939cc859554385cf3a6c7f8217f728efb431c964786de8274907
-result = acceptable
-
-# tcId = 8
-# wrapped key is longer than wrapping key
-ct = 60d55a22ba7dbd7d8f317388e01e6be561d15d29f85c566f1259aa7e7dc3d5d30e0ef5f4c6267553
-key = 620a08f320cdedbf7ae551add348d95e
-msg = cec34eaf8e67e1ce619ddfc309531c42f16033a7e2cbc4f5eb3a548164e9b291
-result = acceptable
-
-# tcId = 9
-# wrapped key is longer than wrapping key
-ct = d78a8291108f0f2d8be0ec10ec08240bf4d3021f0a5ed7faba0748db73762f34a0504bd373212df2
-key = ed089ac274f8c7cea2415671a94b5e53
-msg = 6065e41df14daeeefacac5daeb7674cdc9c1f686013b797153e80ef215893299
-result = acceptable
-
-# tcId = 10
-# Round counter overflows 256
-ct = 9341221aca1c647e2afc2bdd9cf4ed6e60058eb0a84cb3fc2daf3a87d9fad0a1f8268b27aaf7201d705e72f7e2240309ad98742094e3f1c99b7faa9ae181b441f5004b8bc93cdd4160d403d0884749a3c379d47c112a45788c05c2106c98f59758d393e04c880691b0e8683a12df7f876e1e1f68b4acbae9cc8310b34d59ccf4617cee72e845df1e0e32e5b4938f2923d55f1bb5156dd8c787401e6ef241ea4073d0a59ddfcd7a53db5d89b480b030cfb9084ea8479b964f090bb612d5251eee9ef8870a45f1e76fd24abdd9b350fe148b15a4cfeb032d57b5743b3548a7ce9eec8e21a31ce832530edfd1cffd9bb37369e6463c6b373ab60d80b0a2677e92e658f7daf2a5234b7312bf2d967cd0bc809e9be2f706ae63bd632fd611f161e48ee19677f3243aa0e91f6651a1cef62feff7a72eedf830bae1dc6d89e55ccb5e6f97889c6266f7d3f2eb0aea6c8c42200febccc5916825368adc87e04e835de06fd7bc2805c219e7f0b6252563f29969b1f30cfa1a8da4b90ae7534fb849d068a7e77de7360f8af173
-key = b6121acad51038e11873aaa7e6c7be06
-msg = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-result = acceptable
-
-# tcId = 11
-# wrapping small key
-ct = a65959a600000000
-key = 1abf4b7fa2bb62a78f09ddab04625dca
-msg = 
-result = acceptable
-
-# tcId = 12
-# wrapping small key
-ct = 09bcbab50b8dd45ad83412e2919030d3
-key = 1abf4b7fa2bb62a78f09ddab04625dca
-msg = 4c
-result = acceptable
-
-# tcId = 13
-# wrapping small key
-ct = 0cbe852cdce4f0b5333366f446b2b1c5
-key = 1abf4b7fa2bb62a78f09ddab04625dca
-msg = be52
-result = acceptable
-
-# tcId = 14
-# wrapping small key
-ct = a9dc66e03435ab3d4f97ff66f2c911a3
-key = 1abf4b7fa2bb62a78f09ddab04625dca
-msg = 2d5244
-result = acceptable
-
-# tcId = 15
-# wrapping small key
-ct = 1b970c8ecb4187447e60e6083da03086
-key = 1abf4b7fa2bb62a78f09ddab04625dca
-msg = 6c3d3b4c
-result = acceptable
-
-# tcId = 16
-# wrapping small key
-ct = 0344f7b34ab8ef28aaa843f276b0b3d5
-key = 1abf4b7fa2bb62a78f09ddab04625dca
-msg = 0412ab3ec6
-result = acceptable
-
-# tcId = 17
-# wrapping small key
-ct = 17356c7148334ca1a24aab7e82a66e18
-key = 1abf4b7fa2bb62a78f09ddab04625dca
-msg = 8ae08938929c
-result = acceptable
-
-# tcId = 18
-# wrapping small key
-ct = 1db7510a55591a455d9f8167e6db3c88
-key = 1abf4b7fa2bb62a78f09ddab04625dca
-msg = 7c8dfbb68d72af
-result = acceptable
-
-# tcId = 19
-# wrapping small key
-ct = 936fe58b629ea6ec158145218f2361c7
-key = 1abf4b7fa2bb62a78f09ddab04625dca
-msg = 536f8f83b64771c1
-result = acceptable
-
-# tcId = 20
-# wrapping small key
-ct = 6787816804b3127d0ca4073f1dba5c4d3db1ec9c227e6556
-key = 1abf4b7fa2bb62a78f09ddab04625dca
-msg = 8571f282b18b64ec5e
-result = acceptable
-
-# tcId = 21
-# wrapping small key
-ct = 34131c3bfcc48af15eea8672e52927b462f81d5ba0e6260f
-key = 1abf4b7fa2bb62a78f09ddab04625dca
-msg = 8ada889862813e364c4d
-result = acceptable
-
-# tcId = 22
-# wrapping small key
-ct = 4d1ec9287cd4dd378b9aefee79d4ed35bcb98ad9fa9fe529
-key = 1abf4b7fa2bb62a78f09ddab04625dca
-msg = f9c56e8058758a5c7c2baa
-result = acceptable
-
-# tcId = 23
-# wrapping small key
-ct = 7209f5b6bd5d4916f4995d280e9aa89edd5e96e3c9283ad2
-key = 1abf4b7fa2bb62a78f09ddab04625dca
-msg = 7c7dbc83fa62206a521ed4ad
-result = acceptable
-
-# tcId = 24
-# wrapping small key
-ct = d85a1efc6ab3a40948f723d9810a5deb019b3ce0208a0d94
-key = 1abf4b7fa2bb62a78f09ddab04625dca
-msg = a6614daf00df6d14f50388bad5
-result = acceptable
-
-# tcId = 25
-# wrapping small key
-ct = 43509b5df3688b6e44c1a994592f4c03da34712f886e63d5
-key = 1abf4b7fa2bb62a78f09ddab04625dca
-msg = 450580a47d7008321496bfb82f48
-result = acceptable
-
-# tcId = 26
-# wrapping small key
-ct = 16e369351c40f220d3fb1197f35da652a3a40ca3b1e99bfb
-key = 1abf4b7fa2bb62a78f09ddab04625dca
-msg = 9efd21e13855eea8907afdcd8935f4
-result = acceptable
-
-# tcId = 27
-# Modified IV
-ct = 82af032f5389caa503147d2825336eab84816fb6f8ae6df4
-key = 4f710eb6b5e28703becfc3dc52fa8bc1
-msg = a828cbda9b5ff0ae37
-result = invalid
-
-# tcId = 28
-# Modified IV
-ct = 4e00a9eeef87eb6d7be4ec46204d94006c216d5177d2a83c
-key = 4f710eb6b5e28703becfc3dc52fa8bc1
-msg = a828cbda9b5ff0ae37
-result = invalid
-
-# tcId = 29
-# Modified IV
-ct = d3dc6c3b4707a08039d621879caf419b9895482fff7bdcd0
-key = 4f710eb6b5e28703becfc3dc52fa8bc1
-msg = a828cbda9b5ff0ae37
-result = invalid
-
-# tcId = 30
-# Modified IV
-ct = 09d3bfc3c9c5af2b2951b06406f7ea4d84e9c37402637e2c
-key = 4f710eb6b5e28703becfc3dc52fa8bc1
-msg = a828cbda9b5ff0ae37
-result = invalid
-
-# tcId = 31
-# Modified IV
-ct = 3396679a4d87caf7ce7eb4707ba1c6526728f5a973191713
-key = 4f710eb6b5e28703becfc3dc52fa8bc1
-msg = a828cbda9b5ff0ae37
-result = invalid
-
-# tcId = 32
-# Modified IV
-ct = ec637d90d945e92929c1c873d9aa9c47bc7b172237319d15
-key = 4f710eb6b5e28703becfc3dc52fa8bc1
-msg = a828cbda9b5ff0ae37
-result = invalid
-
-# tcId = 33
-# Modified IV
-ct = 748f373d48d8590e2216b294b9ef94860dbb6b0b0ab625c5
-key = 4f710eb6b5e28703becfc3dc52fa8bc1
-msg = a828cbda9b5ff0ae37
-result = invalid
-
-# tcId = 34
-# Modified IV
-ct = 61d7c584197f257caf2583e444896f1d3ba12509b1ef725b
-key = 4f710eb6b5e28703becfc3dc52fa8bc1
-msg = a828cbda9b5ff0ae37
-result = invalid
-
-# tcId = 35
-# Modified IV
-ct = 7f8cda973fe58b484b120fc710b520c5636057629795f89a
-key = 4f710eb6b5e28703becfc3dc52fa8bc1
-msg = a828cbda9b5ff0ae374f84fa01d070
-result = invalid
-
-# tcId = 36
-# Modified IV
-ct = ccea198029edb9d848d6ca76667b666b1dbebd1e4b1faa8d
-key = 4f710eb6b5e28703becfc3dc52fa8bc1
-msg = a828cbda9b5ff0ae374f84fa01d070
-result = invalid
-
-# tcId = 37
-# Modified IV
-ct = ee08cb9d20a98b88b2d8f0e39acf34219d105dc14afbe364
-key = 4f710eb6b5e28703becfc3dc52fa8bc1
-msg = a828cbda9b5ff0ae374f84fa01d070
-result = invalid
-
-# tcId = 38
-# Modified IV
-ct = 6782992bf8cff068cf41341dd2ca04adedea92e846f74411
-key = 4f710eb6b5e28703becfc3dc52fa8bc1
-msg = a828cbda9b5ff0ae374f84fa01d070
-result = invalid
-
-# tcId = 39
-# Modified IV
-ct = 7ed35d0c08042dd56bb5df78056ecd21b8c797d36f57aaec
-key = 4f710eb6b5e28703becfc3dc52fa8bc1
-msg = a828cbda9b5ff0ae374f84fa01d070
-result = invalid
-
-# tcId = 40
-# Modified IV
-ct = 37e3b4cefee648766a8efe73d6af12812eded603ab7141bb
-key = 4f710eb6b5e28703becfc3dc52fa8bc1
-msg = a828cbda9b5ff0ae374f84fa01d070
-result = invalid
-
-# tcId = 41
-# Modified IV
-ct = fe73777d8992e07eef0d053ad5ec0bf8243fc7e0bc2b405b
-key = 4f710eb6b5e28703becfc3dc52fa8bc1
-msg = a828cbda9b5ff0ae374f84fa01d070
-result = invalid
-
-# tcId = 42
-# Modified IV
-ct = 39292c91b6b826d47d502043c3ba4f41e2ce32960a0291b5
-key = 4f710eb6b5e28703becfc3dc52fa8bc1
-msg = a828cbda9b5ff0ae374f84fa01d070
-result = invalid
-
-# tcId = 43
-# Modified IV
-ct = 36ef8fc13d0f1f5745e3939877b62b8ecba2f5f0b19f9e90
-key = 4f710eb6b5e28703becfc3dc52fa8bc1
-msg = a828cbda9b5ff0ae374f84fa01d070a5
-result = invalid
-
-# tcId = 44
-# Modified IV
-ct = 7255c4eacb4105a68095e9e5b5a4bd8f9623a0da5c6fc230
-key = 4f710eb6b5e28703becfc3dc52fa8bc1
-msg = a828cbda9b5ff0ae374f84fa01d070a5
-result = invalid
-
-# tcId = 45
-# Modified IV
-ct = ea26eec89a46ff1a628834c7247a8e4e45d8a8d3229e26cc
-key = 4f710eb6b5e28703becfc3dc52fa8bc1
-msg = a828cbda9b5ff0ae374f84fa01d070a5
-result = invalid
-
-# tcId = 46
-# Modified IV
-ct = 508593fa85a8effd27c8a225981978fcec6e992eb488c9c2
-key = 4f710eb6b5e28703becfc3dc52fa8bc1
-msg = a828cbda9b5ff0ae374f84fa01d070a5
-result = invalid
-
-# tcId = 47
-# Modified IV
-ct = b8a4cb22f15529864d4ced8e8abae69752a9045a084dfc3f
-key = 4f710eb6b5e28703becfc3dc52fa8bc1
-msg = a828cbda9b5ff0ae374f84fa01d070a5
-result = invalid
-
-# tcId = 48
-# Modified IV
-ct = a0a6bf5e47e89706932b1057b680c3c81dc4d9d0b4f9153b
-key = 4f710eb6b5e28703becfc3dc52fa8bc1
-msg = a828cbda9b5ff0ae374f84fa01d070a5
-result = invalid
-
-# tcId = 49
-# Modified IV
-ct = 11f3af4ed30e77520517c880f1d0c272a89a968dc697cb5a
-key = 4f710eb6b5e28703becfc3dc52fa8bc1
-msg = a828cbda9b5ff0ae374f84fa01d070a5
-result = invalid
-
-# tcId = 50
-# Modified IV
-ct = 6fc912a0bda73bacfa93db4002f18f349fa30f22f7a95ab9
-key = 4f710eb6b5e28703becfc3dc52fa8bc1
-msg = a828cbda9b5ff0ae374f84fa01d070a5
-result = invalid
-
-# tcId = 51
-# RFC 3349 padding
-ct = 3731038571c35f7dcc55e48892de353e54c079b89774bbfd
-key = 48a53c11ef2d727db7eb9a834b134ea9
-msg = 000102030405060708090a0b0c0d0e0f
-result = invalid
-
-# tcId = 52
-# Invalid encryption
-ct = d85c6bfd092df1aeae5a548e47aa7681
-key = 48a53c11ef2d727db7eb9a834b134ea9
-msg = 0001020304050607
-result = invalid
-
-# tcId = 53
-# padding too long
-ct = 7a92427387f5587ee825d1ffa011c40286844ecdadce31cd9678338694ea2682
-key = 48a53c11ef2d727db7eb9a834b134ea9
-msg = 000000000000000000000000000000000000000000000000
-result = invalid
-
-# tcId = 54
-# padding too long
-ct = a437d354606ae752894feb62c8def7d17046d8e47f9aed755fba48b3a3009e3ff67d34e26a779064
-key = 48a53c11ef2d727db7eb9a834b134ea9
-msg = 0000000000000000000000000000000000000000000000000000000000000000
-result = invalid
-
-# tcId = 55
-# incorrectly encoded length
-ct = e8d240d64f16d1522ae2ded42ced257dfec158ff2fe1467d
-key = 48a53c11ef2d727db7eb9a834b134ea9
-msg = 00000000000000000000000000000000
-result = invalid
-
-# tcId = 56
-# length = 2**32-1
-ct = 6d1bfda356b7b954e7aaccc6df953322f75be95947b02b30
-key = 48a53c11ef2d727db7eb9a834b134ea9
-msg = 00000000000000000000000000000000
-result = invalid
-
-# tcId = 57
-# length = 2**32-1
-ct = 17dbf878ef4076cfcaba5f81d7b123d7
-key = 48a53c11ef2d727db7eb9a834b134ea9
-msg = 0000000000000000
-result = invalid
-
-# tcId = 58
-# length = 2**31-1
-ct = 75c23e253478037802fae0f86af9c78d4e4d9be0c3bff89f
-key = 48a53c11ef2d727db7eb9a834b134ea9
-msg = 00000000000000000000000000000000
-result = invalid
-
-# tcId = 59
-# length = 2**31 + 16
-ct = 55717658c6a35e15ee36c66cce91083b63091f51525c0b51
-key = 48a53c11ef2d727db7eb9a834b134ea9
-msg = 00000000000000000000000000000000
-result = invalid
-
-# tcId = 60
-# data is incorrectly padded
-ct = 8ede88a52ccb8a6d617456955a9f04c94d87696125ded87eebe3e97e185496d9
-key = 48a53c11ef2d727db7eb9a834b134ea9
-msg = ffffffffffffffffffffffffffffffffffffffffffffffff
-result = invalid
-
-# tcId = 61
-# data is incorrectly padded
-ct = 5b4a8f1abffa51676ac8b5ddf9366c12
-key = 48a53c11ef2d727db7eb9a834b134ea9
-msg = 0001020304050607
-result = invalid
-
-# tcId = 62
-# length = 0
-ct = 205cc6dd9592da0ebff6b4b48a0c450eeaeb11a60d33f387
-key = 48a53c11ef2d727db7eb9a834b134ea9
-msg = 00000000000000000000000000000000
-result = invalid
-
-# tcId = 63
-# RFC 3349 padding with incorrect size
-ct = 908a68b0d2054e199220d37c34a2e136
-key = 48a53c11ef2d727db7eb9a834b134ea9
-msg = 0001020304050607
-result = invalid
-
-# tcId = 64
-# length = 9
-ct = f84bdb15045cee3a8a0f3ed2f07c1771
-key = 48a53c11ef2d727db7eb9a834b134ea9
-msg = 0000000000000000
-result = invalid
-
-# tcId = 65
-# length = 16
-ct = 7592b1ee6ee92c9467db366adcfa65bb
-key = 48a53c11ef2d727db7eb9a834b134ea9
-msg = 0000000000000000
-result = invalid
-
-# tcId = 66
-# length = 2**31 + 8
-ct = db93a1db3b5babc80a304d527682c1ef
-key = 48a53c11ef2d727db7eb9a834b134ea9
-msg = 0000000000000000
-result = invalid
-
-[keySize = 192]
-
-# tcId = 67
-ct = 5c117a678223cfe5ee691503061e7ab1e5f720e005171b32
-key = f75a2f49a630c7dc91626b00ce029f0bd2981d7c74a93ebe
-msg = 9adbc00c710b1101bdf6a4ed65b32d72
-result = valid
-
-# tcId = 68
-ct = 6a7f9e03b6f379c56da3a56d8f32eba515454a91fd417449
-key = b713f6b7814f98894d7b153974684359f1460213eb74be68
-msg = 78585f0c49922e82caf17ebc3721b4db
-result = valid
-
-# tcId = 69
-ct = 764097f5ee8236bc0d93bbcea139a652f4b211cc33a61ac9
-key = 13ecf423211caa334ba6db37259a535c20de8ad10fc8c432
-msg = 4fc75d0f221e22408a37e11265d49a05
-result = valid
-
-# tcId = 70
-ct = 04b83ec803a75bbcb2f87fc6f488a4ccc1827b412483070eed195b6f0048ccbe
-key = 4417fbbea51bdd91818d74051957dd70e135c5cf3732bdf1
-msg = f5357da9f8fd4a1190f36e9fa09a90fcf14d87d62332f1a5
-result = valid
-
-# tcId = 71
-ct = 46ab71f032cb1ccbcc7447a5183574268c0167a26a93fe8422bf284417aa93ea
-key = b3f26d8a22fdd61f709841231fbde695b3f28dddced6d41e
-msg = 0d0af955d2e3829cc3d643219b301e64e0510dfbc428119a
-result = valid
-
-# tcId = 72
-ct = 47ca298ee47b1b755a499129347e11e7a25754ccb6c2689e8eff270e98c81d18
-key = f70cfb262c729a18206c8afd74356ec7e049d10b44a6e000
-msg = 241cedfa64c4e7bec541a2eb4c368269e0f0ddebc58267ea
-result = valid
-
-# tcId = 73
-# wrapped key is longer than wrapping key
-ct = ecac4c91758e1ae7bb010c34f4c5f99a3d728b9fa92cb778d3fe80d777a20d3de85ef46e7a0c6a6a
-key = 1639f9f81e53e2eeb677a249e5eced3af108971301601a7b
-msg = ec3c6a1f1a9585327fe658490c74635e5300876da5846a629398984fb551d691
-result = acceptable
-
-# tcId = 74
-# wrapped key is longer than wrapping key
-ct = 39b7326a44eaed08bffbd4aeaf3e2c3f899c1fd049384ed7b3eb92b788c6449acd6385f0bb18cf28
-key = 1f22d5658aa685b8ba8659dc342880d5b2399e6a815005b0
-msg = 50be4c1b2f29a63f44d7fc63737f600f0194ea3fb36e173d2ddd19f218656380
-result = acceptable
-
-# tcId = 75
-# wrapped key is longer than wrapping key
-ct = 3d2e9f39c7b13e9585227c4344fbe596f92b002456616f137deacc6a8c941649ce294bb2695c1807
-key = 3a2f4aa50441954bba5a1836294ce071f9296b23dbed6771
-msg = 65da02ff21b483a1e39575490b4319e84ae0299f1f00b3859fbe2e74b3ec2aaf
-result = acceptable
-
-# tcId = 76
-# Round counter overflows 256
-ct = d6aacfb52c26baae78c2f54259a4e4168f817064344e2ba8fbfa7fae9f1fd69bd5bc5c1e20a6101b4a7119cbce028e25a9e93d29ee260c4e609baedee788411c2afe60218ce1b0d28b9c29b941251fdcbac3009d59040a0337b8b4a3a020c6d8f310cba63db046d8f36b64c9092e75cee463fc7692ef56bed395c4579da0ecb02129e45ad8a7f116aac6170204888e40693f017a6a0a7dd3962004e60db3a9b6c8b7614a467ccb799bce1ba83f5c0921f1e52bb3909bc0486ec0eaea736498f3ba520a519c3ddf491307958620b737613417b15b438b80b43189baa455031f5771502002ea170c767b33d247feebce62e606f2262537f85f18d1951cc75cedef291c6a501cb1778586249b58156eb8d7283a3f508ee8bcc1206d77bbd6892fe74b865bfc02a8f07223087a6c1e50a41b7cf5f6ee04bd07766b2e5b34c4a7666b0ce06f670e6434a59fb74e0df36c91d94e5e8b721e53e09b6f6504c5d515492a373fcc348a63122cc6e4716e0e1a543d038c6f7731199f691780a8a655cca6718e3dc56e815b3669
-key = b6121acad51038e11873aaa7e6c7be06f93826b74fec0ea1
-msg = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-result = acceptable
-
-# tcId = 77
-# wrapping small key
-ct = a65959a600000000
-key = 1abf4b7fa2bb62a78f09ddab04625dcacdd9e551d1a69b6b
-msg = 
-result = acceptable
-
-# tcId = 78
-# wrapping small key
-ct = 52c7f388d0d4237afaa29f2b94723475
-key = 1abf4b7fa2bb62a78f09ddab04625dcacdd9e551d1a69b6b
-msg = a3
-result = acceptable
-
-# tcId = 79
-# wrapping small key
-ct = 833431ce8799be69b36aafe3f38d9dac
-key = 1abf4b7fa2bb62a78f09ddab04625dcacdd9e551d1a69b6b
-msg = 594b
-result = acceptable
-
-# tcId = 80
-# wrapping small key
-ct = 31674f46b989f6ead582c70dedc8c6b9
-key = 1abf4b7fa2bb62a78f09ddab04625dcacdd9e551d1a69b6b
-msg = 72ab34
-result = acceptable
-
-# tcId = 81
-# wrapping small key
-ct = 80535172d2a498aa31601d70fdca9dea
-key = 1abf4b7fa2bb62a78f09ddab04625dcacdd9e551d1a69b6b
-msg = d4d9460f
-result = acceptable
-
-# tcId = 82
-# wrapping small key
-ct = 56232300dd7b2a71d2328b6df47af8e3
-key = 1abf4b7fa2bb62a78f09ddab04625dcacdd9e551d1a69b6b
-msg = 643972e552
-result = acceptable
-
-# tcId = 83
-# wrapping small key
-ct = e27e08efe39adbbad8d300b87be2c258
-key = 1abf4b7fa2bb62a78f09ddab04625dcacdd9e551d1a69b6b
-msg = f3cdb73d2561
-result = acceptable
-
-# tcId = 84
-# wrapping small key
-ct = 8f90942cdab33e58b24a23ad7efb7538
-key = 1abf4b7fa2bb62a78f09ddab04625dcacdd9e551d1a69b6b
-msg = 7b0b53b6429e14
-result = acceptable
-
-# tcId = 85
-# wrapping small key
-ct = 0ebaf23c858015d3bda5b8d908db6049
-key = 1abf4b7fa2bb62a78f09ddab04625dcacdd9e551d1a69b6b
-msg = 6b2393773e6d1378
-result = acceptable
-
-# tcId = 86
-# wrapping small key
-ct = d56f89977b8eff511158edad6b993007189e5a4b8c0e2faf
-key = 1abf4b7fa2bb62a78f09ddab04625dcacdd9e551d1a69b6b
-msg = 2c52d6639e769960e8
-result = acceptable
-
-# tcId = 87
-# wrapping small key
-ct = dd889475a76733849f59bed49a15d4315bdb5ba00dc63470
-key = 1abf4b7fa2bb62a78f09ddab04625dcacdd9e551d1a69b6b
-msg = 707c9356216d69c69048
-result = acceptable
-
-# tcId = 88
-# wrapping small key
-ct = 1a9b3369239b0f40a8dc5bd8d965caf7431445799337b99b
-key = 1abf4b7fa2bb62a78f09ddab04625dcacdd9e551d1a69b6b
-msg = 615f6fa79e1847e7359a8a
-result = acceptable
-
-# tcId = 89
-# wrapping small key
-ct = 5232f8f6679a17d3303b0bd72b06b56b5089e80372dc295b
-key = 1abf4b7fa2bb62a78f09ddab04625dcacdd9e551d1a69b6b
-msg = 7f5e999168ec60624426cbb1
-result = acceptable
-
-# tcId = 90
-# wrapping small key
-ct = e5544361c60980f3d38f2d8820a150f48f49ef3f9184b29f
-key = 1abf4b7fa2bb62a78f09ddab04625dcacdd9e551d1a69b6b
-msg = 3f93aaf4463775baf6c0c975ae
-result = acceptable
-
-# tcId = 91
-# wrapping small key
-ct = 55396065905915ec914b8d1efbf471e37d283fc2c1496b49
-key = 1abf4b7fa2bb62a78f09ddab04625dcacdd9e551d1a69b6b
-msg = fefcf10c976309b2beb085771e50
-result = acceptable
-
-# tcId = 92
-# wrapping small key
-ct = d90376be302a24c541bd6d96094f0025e3d73888391b4306
-key = 1abf4b7fa2bb62a78f09ddab04625dcacdd9e551d1a69b6b
-msg = 6854354d0099f7eff740b0587140b3
-result = acceptable
-
-# tcId = 93
-# Modified IV
-ct = eee27510be39cc88379459420f3773642a423ac1ff0cfb84
-key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4
-msg = a828cbda9b5ff0ae37
-result = invalid
-
-# tcId = 94
-# Modified IV
-ct = 765df3fa1aca6f13268ba79f8659807049a313a0308b643e
-key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4
-msg = a828cbda9b5ff0ae37
-result = invalid
-
-# tcId = 95
-# Modified IV
-ct = 71346c17a2718cb7c357e3af2b2d0c3e29b7e02317926746
-key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4
-msg = a828cbda9b5ff0ae37
-result = invalid
-
-# tcId = 96
-# Modified IV
-ct = 55fd49ba081fdf72896068c5a968e2b3c4a473786a2e12c2
-key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4
-msg = a828cbda9b5ff0ae37
-result = invalid
-
-# tcId = 97
-# Modified IV
-ct = 133c66fcbf0e9d5139eff3fcb494b672d72bb622d7015c4b
-key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4
-msg = a828cbda9b5ff0ae37
-result = invalid
-
-# tcId = 98
-# Modified IV
-ct = 8439244f27470e5f1f294cfa22ef5412675d7fbbd92ff016
-key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4
-msg = a828cbda9b5ff0ae37
-result = invalid
-
-# tcId = 99
-# Modified IV
-ct = 4265bdb7d8ea30d9a51e5f48b7ac5487e0c95f154ea8baeb
-key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4
-msg = a828cbda9b5ff0ae37
-result = invalid
-
-# tcId = 100
-# Modified IV
-ct = 31afcca8ff2b8806408c3460181ee5a96bbaf51d133211be
-key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4
-msg = a828cbda9b5ff0ae37
-result = invalid
-
-# tcId = 101
-# Modified IV
-ct = 196f2a6eccb5368fe6a3f2fa0874d8fc9b3b52484e2d6351
-key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4
-msg = a828cbda9b5ff0ae374f84fa01d070
-result = invalid
-
-# tcId = 102
-# Modified IV
-ct = 8dc73d363fdb32f6e0ff830c2a48db5815f66d0922694c74
-key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4
-msg = a828cbda9b5ff0ae374f84fa01d070
-result = invalid
-
-# tcId = 103
-# Modified IV
-ct = e90022b9da998b4a30c91c1bd1a1f8ca05a52432867e5e78
-key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4
-msg = a828cbda9b5ff0ae374f84fa01d070
-result = invalid
-
-# tcId = 104
-# Modified IV
-ct = c9898a1b70bd718df45f1f3eca82eab1eaddb8ed7f2380dc
-key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4
-msg = a828cbda9b5ff0ae374f84fa01d070
-result = invalid
-
-# tcId = 105
-# Modified IV
-ct = cc3f2cd6476eddbbfdc801b61174301688554f3db54c2903
-key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4
-msg = a828cbda9b5ff0ae374f84fa01d070
-result = invalid
-
-# tcId = 106
-# Modified IV
-ct = 23e15705e7b00d82bd052f0e0135ab7ac0dcce471ff2f1a7
-key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4
-msg = a828cbda9b5ff0ae374f84fa01d070
-result = invalid
-
-# tcId = 107
-# Modified IV
-ct = b8e2862c0f9eae4f44ad99496e3ed62b3b9c4ce7ab5afb74
-key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4
-msg = a828cbda9b5ff0ae374f84fa01d070
-result = invalid
-
-# tcId = 108
-# Modified IV
-ct = 66d8a7769d81421efda456992f6c26cb17665fe080b0160e
-key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4
-msg = a828cbda9b5ff0ae374f84fa01d070
-result = invalid
-
-# tcId = 109
-# Modified IV
-ct = a6a28bceb91551a395369ff09370658cc92b092855f417aa
-key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4
-msg = a828cbda9b5ff0ae374f84fa01d070a5
-result = invalid
-
-# tcId = 110
-# Modified IV
-ct = 03ff601cf12b432078a2185590fb5d01e3441cf084bcb04a
-key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4
-msg = a828cbda9b5ff0ae374f84fa01d070a5
-result = invalid
-
-# tcId = 111
-# Modified IV
-ct = e250d358d16d9fd20ad80a99656509229dca391aad3798f0
-key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4
-msg = a828cbda9b5ff0ae374f84fa01d070a5
-result = invalid
-
-# tcId = 112
-# Modified IV
-ct = 643a17860b116ec74089bc574685a6328a3d7a07cd18b520
-key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4
-msg = a828cbda9b5ff0ae374f84fa01d070a5
-result = invalid
-
-# tcId = 113
-# Modified IV
-ct = 3e86e8128904f753c0f3fe3401ba36672966567725c4726c
-key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4
-msg = a828cbda9b5ff0ae374f84fa01d070a5
-result = invalid
-
-# tcId = 114
-# Modified IV
-ct = d4b8cc849176b8344b0849490143d3512915171bd7d5759e
-key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4
-msg = a828cbda9b5ff0ae374f84fa01d070a5
-result = invalid
-
-# tcId = 115
-# Modified IV
-ct = f84e0e6ff64e0b27b8b59b5b77c223023f0fea95433864ec
-key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4
-msg = a828cbda9b5ff0ae374f84fa01d070a5
-result = invalid
-
-# tcId = 116
-# Modified IV
-ct = 4030b4b0e9c1b1ce8e52f6bdb48088e65b05844307989c8b
-key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4
-msg = a828cbda9b5ff0ae374f84fa01d070a5
-result = invalid
-
-# tcId = 117
-# Modified IV
-ct = ccb3b36c26b2d901b7f0765362d992b2d5089c2a7559b195becbe173780352fa
-key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4
-msg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1
-result = invalid
-
-# tcId = 118
-# Modified IV
-ct = 4e5fc8dccaeec9b1c8a606a2bd7d7201eede62b9c2e939a5aba663a6a040e361
-key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4
-msg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1
-result = invalid
-
-# tcId = 119
-# Modified IV
-ct = af21f5e7f15a63c8ea6001cf024f281e7f44aedd68954564fc2bd146e96d793a
-key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4
-msg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1
-result = invalid
-
-# tcId = 120
-# Modified IV
-ct = 3a4f571ffbf761d3f7d413172ee1e4ae2862baacfd5ab66dc685b9af8b70b538
-key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4
-msg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1
-result = invalid
-
-# tcId = 121
-# Modified IV
-ct = 273de386d5fef497f9487afd54c1c0fae8aacabf2af465caf352e2300d29266b
-key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4
-msg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1
-result = invalid
-
-# tcId = 122
-# Modified IV
-ct = 16511743dc44199cee1dbf5045141b075f01ee13326c9faf2c74b7c99791830f
-key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4
-msg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1
-result = invalid
-
-# tcId = 123
-# Modified IV
-ct = 370f92db00f7fc8a0e654318a5b3ff89a604034f421339201d79e0ec4d6088de
-key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4
-msg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1
-result = invalid
-
-# tcId = 124
-# Modified IV
-ct = e3edd0e84832f3615f6deefb444de3b9ec527741686029db91de0bb9b2a5c05d
-key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4
-msg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1
-result = invalid
-
-# tcId = 125
-# RFC 3349 padding
-ct = 36ee480138edf11e144efcddd24d2c121749da6e4eab17fe
-key = 48a53c11ef2d727db7eb9a834b134ea9602273aca929702e
-msg = 000102030405060708090a0b0c0d0e0f
-result = invalid
-
-# tcId = 126
-# Invalid encryption
-ct = 166beb49e97a4a9cc7b0ccf441ec15b5
-key = 48a53c11ef2d727db7eb9a834b134ea9602273aca929702e
-msg = 0001020304050607
-result = invalid
-
-# tcId = 127
-# padding too long
-ct = 74ff3070a0a08471c001febb95a890f35159a9fe263719e40c2332ce5c58fada
-key = 48a53c11ef2d727db7eb9a834b134ea9602273aca929702e
-msg = 000000000000000000000000000000000000000000000000
-result = invalid
-
-# tcId = 128
-# padding too long
-ct = 4f0b38eb328d1227b1e17c103a44a373ff67cee953c59eea26117947b5d3ef8932c8858b4f9fb47c
-key = 48a53c11ef2d727db7eb9a834b134ea9602273aca929702e
-msg = 0000000000000000000000000000000000000000000000000000000000000000
-result = invalid
-
-# tcId = 129
-# incorrectly encoded length
-ct = 775dcabab9e4be8fd9963a4dc7a1447ef82888403882bdb6
-key = 48a53c11ef2d727db7eb9a834b134ea9602273aca929702e
-msg = 00000000000000000000000000000000
-result = invalid
-
-# tcId = 130
-# length = 2**32-1
-ct = 669803237fa10eabb4d2c6ad85bd9f7df5f4a33340eb0ce9
-key = 48a53c11ef2d727db7eb9a834b134ea9602273aca929702e
-msg = 00000000000000000000000000000000
-result = invalid
-
-# tcId = 131
-# length = 2**32-1
-ct = c788504d786f5c21b6671bf190657301
-key = 48a53c11ef2d727db7eb9a834b134ea9602273aca929702e
-msg = 0000000000000000
-result = invalid
-
-# tcId = 132
-# length = 2**31-1
-ct = d079f60d3258f5e695d1a73db008ef38516b713eca2c0eaf
-key = 48a53c11ef2d727db7eb9a834b134ea9602273aca929702e
-msg = 00000000000000000000000000000000
-result = invalid
-
-# tcId = 133
-# length = 2**31 + 16
-ct = f1ae4b8865013b0fc63b463e664cec3c6031f61f2de82f43
-key = 48a53c11ef2d727db7eb9a834b134ea9602273aca929702e
-msg = 00000000000000000000000000000000
-result = invalid
-
-# tcId = 134
-# data is incorrectly padded
-ct = 8874e1b6e15e3ef6c461411a5f5ad0c8b05368cd5b3ee39b2b413d18a4eebfc9
-key = 48a53c11ef2d727db7eb9a834b134ea9602273aca929702e
-msg = ffffffffffffffffffffffffffffffffffffffffffffffff
-result = invalid
-
-# tcId = 135
-# data is incorrectly padded
-ct = 890a3dab8439bb73b14c6e99c34f0b0e
-key = 48a53c11ef2d727db7eb9a834b134ea9602273aca929702e
-msg = 0001020304050607
-result = invalid
-
-# tcId = 136
-# length = 0
-ct = d4f633aedeb89e349a98738b00ee42c90d583b16e986e49f
-key = 48a53c11ef2d727db7eb9a834b134ea9602273aca929702e
-msg = 00000000000000000000000000000000
-result = invalid
-
-# tcId = 137
-# RFC 3349 padding with incorrect size
-ct = b8b2a5b1d3280dcb4daeeed43f36509b
-key = 48a53c11ef2d727db7eb9a834b134ea9602273aca929702e
-msg = 0001020304050607
-result = invalid
-
-# tcId = 138
-# length = 9
-ct = 4429cf64251d8a54a9d1389c01c30900
-key = 48a53c11ef2d727db7eb9a834b134ea9602273aca929702e
-msg = 0000000000000000
-result = invalid
-
-# tcId = 139
-# length = 16
-ct = e5634eca10372c867c7f91ee813ec3f3
-key = 48a53c11ef2d727db7eb9a834b134ea9602273aca929702e
-msg = 0000000000000000
-result = invalid
-
-# tcId = 140
-# length = 2**31 + 8
-ct = 9e517d4d0142e1544ba1e7419a696c21
-key = 48a53c11ef2d727db7eb9a834b134ea9602273aca929702e
-msg = 0000000000000000
-result = invalid
-
-# tcId = 141
-# RFC 3394
-ct = 138bdeaa9b8fa7fc61f97742e72248ee5ae6ae5360d1ae6a5f54f373fa543b6a
-key = 5840df6e29b02af1ab493b705bf16ea1ae8338f4dcc176a8
-msg = c37b7e6492584340bed12207808941155068f738
-result = valid
-
-# tcId = 142
-# RFC 3394
-ct = afbeb0f07dfbf5419200f2ccb50bb24f
-key = 5840df6e29b02af1ab493b705bf16ea1ae8338f4dcc176a8
-msg = 466f7250617369
-result = valid
-
-[keySize = 256]
-
-# tcId = 143
-ct = e3eab96d9a2fda12f9e252053aff15e753e5ea6f5172c92b
-key = fce0429c610658ef8e7cfb0154c51de2239a8a317f5af5b6714f985fb5c4d75c
-msg = 287326b5ed0078e7ca0164d748f667e7
-result = valid
-
-# tcId = 144
-ct = 9d2b42fb2fdb92c89fb0c3bcd9e1600d3334b4e35e791369
-key = 0dda6da5123e2c37c6fa16ba0d334cd01acd652f8994211751dfab4faac2fc22
-msg = b40b6828729b456322a8d065abc0d081
-result = valid
-
-# tcId = 145
-ct = 5291e05abd55f5886850855e3f9f2f576b101acc222d6766
-key = d6925914cd06308f81ad91e23073593d99d4e50351b20eb2a8d1a1ac4ced6588
-msg = 037b27b3dc95b19d15bd4091e320bfe1
-result = valid
-
-# tcId = 146
-ct = 4b1220525c537aec30ebcd562b694b4e9e2ccd819de22ef608b5d8090779d9de
-key = 07518a82cbc8da1dcec55f3763a206d277487abd03cedd0b8bef9ee2fb157121
-msg = faa4664d79fce3c7d2fdd462f6c1c423c2f8e6b69be2e071
-result = valid
-
-# tcId = 147
-ct = 67b2cbd68f6a208d647bdc5af7d0bccf6711a9e8fd0d9434363006addd4b9696
-key = ea46991d4e71f53dd624e7fe7fde11944a7c5942d232369b8065d42b8cd2dde1
-msg = dffc5cf1dd5411d015d84601fa38df5effe885c7f26a4825
-result = valid
-
-# tcId = 148
-ct = cfdbbd95f187508a488fe017c5e5d5a5975b68441d520e0e931922388e28784c
-key = fdcfa902c6f222f527af84da533b14b52e2615da3a89d1d35708b0cd49f60d87
-msg = 966b07047354966a703e79607b556032f4f596b7f9206f05
-result = valid
-
-# tcId = 149
-ct = b63b7e0fec7e315816233db6758fd3e744b9f6a40862bdf866487e53bcb950d8b2649269e51b4475
-key = 38e1b1d075d9d852b9a6c01c8ff6965af01bac457a4e339ae3e1d7b2ffacc0cd
-msg = 80ad6820f1c90981e2ca42b817a345c1179d0a11d8e23a8adc0505e13d87295a
-result = valid
-
-# tcId = 150
-ct = 837cfc316b49299edaf427e0988020ee876204b29d847669daab72c8660b0d860e9de3bd851198ff
-key = c641f1689d81caa8ba37d895272240664054ed974cfffc40e6c5c0cad1b916c7
-msg = 3fd0ba19955e46749f54d88e99d080b7339d588fe612ec0f4021ca3ca2104270
-result = valid
-
-# tcId = 151
-ct = 0e9e2e9aa34bbf973d67bc534ac86fc5b5a5f9da5f026866177894ec6077a5c84501510e1bf4afb3
-key = aa0ab9d68ed4a04e723f81b44c0c88d0bcde7a80cfd476eb4b8836d9aa01ec4c
-msg = 57faa8766f6d6a0aa1cf643f857c150df5b31303b50af480e21c4b5e8c8a15d5
-result = valid
-
-# tcId = 152
-# Round counter overflows 256
-ct = 1c6b7e4003384f071bf29baea9098ad81da8e9862909329f52793b35d592c10dba15aa89400ea6403df8dcaffd0dbf5606303f109f79ad700ed5d5ad4e59950ce9ce5296c9d186a0df441973d1835f9ac000ad1a6797875c3a03161e9e3f5ea464032e407854eadca5a9e7a386bb0d29253e3804adefd8c0402cc8c40ac7f9041429cc0bb77a405b284baa2dae764ea09c654c0a82f2c5724221ba44e341503d3103dbc393c7702182f8cc2762ddbc873b7f84197709886a4b5df5b04ff9d21b79b50904af3c32128dfb9cde94fe1254d981e6ce3acfda82db1fa2badbccd2d29052a04a69ce1f5652f30496ea57edc7e3e885dd4a35ca15aba602bb4c888a8064da94c2ac5c12c11f608810af46fbb49c3e8f8771ff661f8d8dccd163d0c4a401b8b9aa74e68a56011cf78d21dc7541a974f9dad5ae27f8a26d1b0e76be2f86c6a21e9d1c2b5df3c8878a8bcae143b3af1f082afc52616eeadd2232926597b245d394931e02e493b0bc27a92d013e111694cac2c5a2a46e008a8498b5c31bb5ec35a4e9957e365d
-key = b6121acad51038e11873aaa7e6c7be06f93826b74fec0ea1c02f9981ed49d16a
-msg = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-result = acceptable
-
-# tcId = 153
-# wrapping small key
-ct = a65959a600000000
-key = 1abf4b7fa2bb62a78f09ddab04625dcacdd9e551d1a69b6b162baa53d2700093
-msg = 
-result = acceptable
-
-# tcId = 154
-# wrapping small key
-ct = 06c1e65ac0f385b4e8c400d229f39422
-key = 1abf4b7fa2bb62a78f09ddab04625dcacdd9e551d1a69b6b162baa53d2700093
-msg = ae
-result = acceptable
-
-# tcId = 155
-# wrapping small key
-ct = c98da5936a1313eba1a6773b8060ea5e
-key = 1abf4b7fa2bb62a78f09ddab04625dcacdd9e551d1a69b6b162baa53d2700093
-msg = c548
-result = acceptable
-
-# tcId = 156
-# wrapping small key
-ct = b2a77d9b837e87cdb7391e1df7cdaf14
-key = 1abf4b7fa2bb62a78f09ddab04625dcacdd9e551d1a69b6b162baa53d2700093
-msg = f713b9
-result = acceptable
-
-# tcId = 157
-# wrapping small key
-ct = d8ecf20191f75aa36686298bfa5022ab
-key = 1abf4b7fa2bb62a78f09ddab04625dcacdd9e551d1a69b6b162baa53d2700093
-msg = f375cbf7
-result = acceptable
-
-# tcId = 158
-# wrapping small key
-ct = 077362f50356fc7c54c70f9cb4306f7d
-key = 1abf4b7fa2bb62a78f09ddab04625dcacdd9e551d1a69b6b162baa53d2700093
-msg = d9445094b1
-result = acceptable
-
-# tcId = 159
-# wrapping small key
-ct = a4bd6a116ad88a52aae3f0c0cb893f9b
-key = 1abf4b7fa2bb62a78f09ddab04625dcacdd9e551d1a69b6b162baa53d2700093
-msg = fab43e91ae15
-result = acceptable
-
-# tcId = 160
-# wrapping small key
-ct = 68a52de00ec0f1ebbedc38fee6be0c23
-key = 1abf4b7fa2bb62a78f09ddab04625dcacdd9e551d1a69b6b162baa53d2700093
-msg = 90735025797bd2
-result = acceptable
-
-# tcId = 161
-# wrapping small key
-ct = 3a6746052a1744cfe7e2f36dafc4042d
-key = 1abf4b7fa2bb62a78f09ddab04625dcacdd9e551d1a69b6b162baa53d2700093
-msg = e43f5e4e123a03c4
-result = acceptable
-
-# tcId = 162
-# wrapping small key
-ct = db7e73da22219e1baac0f4e955c3db2b900b5d3078f94b59
-key = 1abf4b7fa2bb62a78f09ddab04625dcacdd9e551d1a69b6b162baa53d2700093
-msg = 1723eb9d000916996a
-result = acceptable
-
-# tcId = 163
-# wrapping small key
-ct = f77ec14a010777f1f1071808f285c1c00b4e9420f0e8bf48
-key = 1abf4b7fa2bb62a78f09ddab04625dcacdd9e551d1a69b6b162baa53d2700093
-msg = 8b18daecde14b8472ffd
-result = acceptable
-
-# tcId = 164
-# wrapping small key
-ct = 6b40d4f0863581a7d0365ad477568bfad94f8bf134984838
-key = 1abf4b7fa2bb62a78f09ddab04625dcacdd9e551d1a69b6b162baa53d2700093
-msg = e5bd6fbacbf3ef0d40c884
-result = acceptable
-
-# tcId = 165
-# wrapping small key
-ct = 660f645b02405a18f7225b68c0a09a949b2b5ba784922cfe
-key = 1abf4b7fa2bb62a78f09ddab04625dcacdd9e551d1a69b6b162baa53d2700093
-msg = b3be5e5397df5f46b099e821
-result = acceptable
-
-# tcId = 166
-# wrapping small key
-ct = 6bea6bf57601bf063873f47ec3572cfb9cfb595d8bdb5e97
-key = 1abf4b7fa2bb62a78f09ddab04625dcacdd9e551d1a69b6b162baa53d2700093
-msg = 4cdd960cabcf8aaf69c37da1d3
-result = acceptable
-
-# tcId = 167
-# wrapping small key
-ct = b631292536aaf02d829cc6d3c39e5a5cd76240889e9d51d0
-key = 1abf4b7fa2bb62a78f09ddab04625dcacdd9e551d1a69b6b162baa53d2700093
-msg = da29e0889cf98742612e0326300b
-result = acceptable
-
-# tcId = 168
-# wrapping small key
-ct = de497acf18a177a3a9b3d8da46d74dfa58dcc537a3a95323
-key = 1abf4b7fa2bb62a78f09ddab04625dcacdd9e551d1a69b6b162baa53d2700093
-msg = 72aaee126a822184806c7d22eed66b
-result = acceptable
-
-# tcId = 169
-# Modified IV
-ct = aef4d2357a8fc5c3b4a80a15ed49781d3a82c98eb78c9180
-key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7
-msg = a828cbda9b5ff0ae37
-result = invalid
-
-# tcId = 170
-# Modified IV
-ct = 6eaefd5193f0725fea545077a430860663901979f0b6f4a3
-key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7
-msg = a828cbda9b5ff0ae37
-result = invalid
-
-# tcId = 171
-# Modified IV
-ct = f9ded536c1ae9c680f7d9c4b91a566a07b1628e9b9f4fccd
-key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7
-msg = a828cbda9b5ff0ae37
-result = invalid
-
-# tcId = 172
-# Modified IV
-ct = 443526477c779a329ded0b230307afa64fdc10dfc86414dd
-key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7
-msg = a828cbda9b5ff0ae37
-result = invalid
-
-# tcId = 173
-# Modified IV
-ct = 21ba79f3b423a66e7baad86fe49786e07a33dfdf227687e9
-key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7
-msg = a828cbda9b5ff0ae37
-result = invalid
-
-# tcId = 174
-# Modified IV
-ct = 3e65dbacaae556fa18bd192035cd55958adeac30e5ca7b3b
-key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7
-msg = a828cbda9b5ff0ae37
-result = invalid
-
-# tcId = 175
-# Modified IV
-ct = de2054883b00f81ff68e42b7ff1c05ef5faaf75b2bb14004
-key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7
-msg = a828cbda9b5ff0ae37
-result = invalid
-
-# tcId = 176
-# Modified IV
-ct = 2aa3c6ba891d1211677d59f886cc6d05698243d10dc189f7
-key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7
-msg = a828cbda9b5ff0ae37
-result = invalid
-
-# tcId = 177
-# Modified IV
-ct = 9b1e7d6caf42bb3a15530f2387ed7329310ba76e1852566a
-key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7
-msg = a828cbda9b5ff0ae374f84fa01d070
-result = invalid
-
-# tcId = 178
-# Modified IV
-ct = daf6a9f5e4b4985fcd4815bf6298a3039bcb32327b0876ff
-key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7
-msg = a828cbda9b5ff0ae374f84fa01d070
-result = invalid
-
-# tcId = 179
-# Modified IV
-ct = 14c4079399721142fd5fce26e9417064c7e0201fb7b5255c
-key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7
-msg = a828cbda9b5ff0ae374f84fa01d070
-result = invalid
-
-# tcId = 180
-# Modified IV
-ct = f48a30b8691a2a80dd79c355c281addf779bfed8971e3ce4
-key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7
-msg = a828cbda9b5ff0ae374f84fa01d070
-result = invalid
-
-# tcId = 181
-# Modified IV
-ct = 248f867430ffc954b494c936a3ef815b1754009928aaf0c4
-key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7
-msg = a828cbda9b5ff0ae374f84fa01d070
-result = invalid
-
-# tcId = 182
-# Modified IV
-ct = dcaa88dad9b03e59a3ac8350239824368004e2ca616c15d7
-key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7
-msg = a828cbda9b5ff0ae374f84fa01d070
-result = invalid
-
-# tcId = 183
-# Modified IV
-ct = a6cc8470192687ec9a31258ddb73084005784475f3442705
-key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7
-msg = a828cbda9b5ff0ae374f84fa01d070
-result = invalid
-
-# tcId = 184
-# Modified IV
-ct = 0527ab5408b4f1484b27f98641511143ab88783688256815
-key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7
-msg = a828cbda9b5ff0ae374f84fa01d070
-result = invalid
-
-# tcId = 185
-# Modified IV
-ct = 7fd3ad3aee0545da1ed3a54d5a198a2c76cf8290c011c042
-key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7
-msg = a828cbda9b5ff0ae374f84fa01d070a5
-result = invalid
-
-# tcId = 186
-# Modified IV
-ct = a24e94c12b2e6b776c8febe9179521beae0cfbd507d358b4
-key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7
-msg = a828cbda9b5ff0ae374f84fa01d070a5
-result = invalid
-
-# tcId = 187
-# Modified IV
-ct = 9395b071fa3d9908b2e1b349bf7cd6a1cfc86b979c8c73cd
-key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7
-msg = a828cbda9b5ff0ae374f84fa01d070a5
-result = invalid
-
-# tcId = 188
-# Modified IV
-ct = 1eb452770bc0f26a3576b604bf5ac72f714fc468c357eba7
-key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7
-msg = a828cbda9b5ff0ae374f84fa01d070a5
-result = invalid
-
-# tcId = 189
-# Modified IV
-ct = b42bcb4161f40b30f3d2f740f43e441d3c9a39613914f1c6
-key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7
-msg = a828cbda9b5ff0ae374f84fa01d070a5
-result = invalid
-
-# tcId = 190
-# Modified IV
-ct = f3d76dd320e5f1b3f85b8f73a9ebcfabfb8346daafaf36e6
-key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7
-msg = a828cbda9b5ff0ae374f84fa01d070a5
-result = invalid
-
-# tcId = 191
-# Modified IV
-ct = b8e26164496942f44f16751096fb47952ec478bb288e72a1
-key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7
-msg = a828cbda9b5ff0ae374f84fa01d070a5
-result = invalid
-
-# tcId = 192
-# Modified IV
-ct = fa783b3aca0ec1e677378f23ebe937776fa590ecc6b01392
-key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7
-msg = a828cbda9b5ff0ae374f84fa01d070a5
-result = invalid
-
-# tcId = 193
-# Modified IV
-ct = 8b011408049eab81cc185796b9636982c1ad28e940e5c35ab1219434c23e8c59
-key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7
-msg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1
-result = invalid
-
-# tcId = 194
-# Modified IV
-ct = 08db2f06aa2400d4cc1113b1c9e3ba1b39e3e26a84918f9266796c426c166428
-key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7
-msg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1
-result = invalid
-
-# tcId = 195
-# Modified IV
-ct = 3114404be000ee167b65dd3cfae3b10c50dffe1df864b5e52a2805f0c80021c0
-key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7
-msg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1
-result = invalid
-
-# tcId = 196
-# Modified IV
-ct = 405ae5bdeff8b05d28ea55900b8e81dc789d532ec3fc457730819e762172f751
-key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7
-msg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1
-result = invalid
-
-# tcId = 197
-# Modified IV
-ct = 7c19e66d21c0f1409ee6f03a36ab6ba532349e2567200b95d7f5012b2b7e5d33
-key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7
-msg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1
-result = invalid
-
-# tcId = 198
-# Modified IV
-ct = 955ac67d6e496b9b93a4dda8f6e65e668f1326b256ee146a7647ba18deee7986
-key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7
-msg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1
-result = invalid
-
-# tcId = 199
-# Modified IV
-ct = c8600aa18be27279493fd68c84130c8bc328b0f6821e01e892b6c2dc1c005270
-key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7
-msg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1
-result = invalid
-
-# tcId = 200
-# Modified IV
-ct = 492566e0dc539e234b08b95fb23594a6d14f59fa4367799495c2e7f2993135ec
-key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7
-msg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1
-result = invalid
-
-# tcId = 201
-# Modified IV
-ct = 8c5c2ea18125a03d15d2a624c9bfcccdf53709a89ae03d5728c98943b13df72c6f02fc8e1cfcdfa7
-key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7
-msg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1acce3497352690
-result = invalid
-
-# tcId = 202
-# Modified IV
-ct = 8836c5cb2eec2ca2541b18c1259933ebd601bd6763d9f7cebf06ed6abbe37d455aca13a2db87d111
-key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7
-msg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1acce3497352690
-result = invalid
-
-# tcId = 203
-# Modified IV
-ct = 2554e0faf721d77f7dfadaaa90b70c2f242f93bdc4f876cd058a86ccfff33f8fd88736997f505d98
-key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7
-msg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1acce3497352690
-result = invalid
-
-# tcId = 204
-# Modified IV
-ct = 53ee4c8f03212b389f5bc2b26bc898deb91a457f258a22028a688919e12c4da23090c26b5c9ff692
-key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7
-msg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1acce3497352690
-result = invalid
-
-# tcId = 205
-# Modified IV
-ct = 3a63b0283ec071a4d4c32b0f30b384eccb3cd8d7fb12de6806e12fef5da82a7a39aad8128c3e5915
-key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7
-msg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1acce3497352690
-result = invalid
-
-# tcId = 206
-# Modified IV
-ct = d1cfaaa9adc25f948c0c4720967b01488e06d3dfc5622b5de38a722798d4a3a44fa6194a92c5ede7
-key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7
-msg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1acce3497352690
-result = invalid
-
-# tcId = 207
-# Modified IV
-ct = 251a71511a4e73d1469a051fd88fa78cae96547fd8ca8e323b05d8717cdcd239292c7bbe0708fae5
-key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7
-msg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1acce3497352690
-result = invalid
-
-# tcId = 208
-# Modified IV
-ct = 14a62f7284124d795826cc89852e97dbe6b8a30ac56df07173878cf0136dbe386ec46327d6fc65f1
-key = 4f710eb6b5e28703becfc3dc52fa8bc1dd44a4a6d38a84b4f94e89ac32d987e7
-msg = a828cbda9b5ff0ae374f84fa01d070a5f0a17a0c462be4f1acce3497352690
-result = invalid
-
-# tcId = 209
-# RFC 3349 padding
-ct = ac1a774a5de27e4f9c356e4f62deaf8b7eeee6bcafafd895
-key = 48a53c11ef2d727db7eb9a834b134ea9602273aca929702eb2c31d96a58c9be2
-msg = 000102030405060708090a0b0c0d0e0f
-result = invalid
-
-# tcId = 210
-# Invalid encryption
-ct = b3941437f55e7cbc3f88050aff703967
-key = 48a53c11ef2d727db7eb9a834b134ea9602273aca929702eb2c31d96a58c9be2
-msg = 0001020304050607
-result = invalid
-
-# tcId = 211
-# padding too long
-ct = 86175acf19ad0b7ac60d1fe4bb7850635e7ec6f8a314f85b6dd3d8f9349ea38d
-key = 48a53c11ef2d727db7eb9a834b134ea9602273aca929702eb2c31d96a58c9be2
-msg = 000000000000000000000000000000000000000000000000
-result = invalid
-
-# tcId = 212
-# padding too long
-ct = 791f088847a76731e0d56b9b2dcb28bf9f091a9725790e0a64fc8e7cb3ad50f380297a98e3b1c33e
-key = 48a53c11ef2d727db7eb9a834b134ea9602273aca929702eb2c31d96a58c9be2
-msg = 0000000000000000000000000000000000000000000000000000000000000000
-result = invalid
-
-# tcId = 213
-# incorrectly encoded length
-ct = 868c34495bd3d7b4e2c1861e7fcbbdb372099488dd96c9ea
-key = 48a53c11ef2d727db7eb9a834b134ea9602273aca929702eb2c31d96a58c9be2
-msg = 00000000000000000000000000000000
-result = invalid
-
-# tcId = 214
-# length = 2**32-1
-ct = 4a8b4aeaa713469bfd9bf88d4072379fc858e40b24b0bebe
-key = 48a53c11ef2d727db7eb9a834b134ea9602273aca929702eb2c31d96a58c9be2
-msg = 00000000000000000000000000000000
-result = invalid
-
-# tcId = 215
-# length = 2**32-1
-ct = c210aa3b5fbf5eac97e68d98d7727f38
-key = 48a53c11ef2d727db7eb9a834b134ea9602273aca929702eb2c31d96a58c9be2
-msg = 0000000000000000
-result = invalid
-
-# tcId = 216
-# length = 2**31-1
-ct = e0ebd376e050cc9027b76dfc38ee2c6ae2808cecf480a560
-key = 48a53c11ef2d727db7eb9a834b134ea9602273aca929702eb2c31d96a58c9be2
-msg = 00000000000000000000000000000000
-result = invalid
-
-# tcId = 217
-# length = 2**31 + 16
-ct = 23a693e211c08ab9b222c2ede2db18f437e22917fdff8032
-key = 48a53c11ef2d727db7eb9a834b134ea9602273aca929702eb2c31d96a58c9be2
-msg = 00000000000000000000000000000000
-result = invalid
-
-# tcId = 218
-# data is incorrectly padded
-ct = 003f2916fea6827e01199028d3dc4e03889113f97b1860cc242e5a0f28a0f159
-key = 48a53c11ef2d727db7eb9a834b134ea9602273aca929702eb2c31d96a58c9be2
-msg = ffffffffffffffffffffffffffffffffffffffffffffffff
-result = invalid
-
-# tcId = 219
-# data is incorrectly padded
-ct = 5c25a170d5225a6d66e117c691b37383
-key = 48a53c11ef2d727db7eb9a834b134ea9602273aca929702eb2c31d96a58c9be2
-msg = 0001020304050607
-result = invalid
-
-# tcId = 220
-# length = 0
-ct = df9ef924eb59634be5b27cabd33d72bd6be6e01e4672ab05
-key = 48a53c11ef2d727db7eb9a834b134ea9602273aca929702eb2c31d96a58c9be2
-msg = 00000000000000000000000000000000
-result = invalid
-
-# tcId = 221
-# RFC 3349 padding with incorrect size
-ct = e6e66fad359a7b63a977788acd297121
-key = 48a53c11ef2d727db7eb9a834b134ea9602273aca929702eb2c31d96a58c9be2
-msg = 0001020304050607
-result = invalid
-
-# tcId = 222
-# length = 9
-ct = 76b88ecda760b1af80703036185fc476
-key = 48a53c11ef2d727db7eb9a834b134ea9602273aca929702eb2c31d96a58c9be2
-msg = 0000000000000000
-result = invalid
-
-# tcId = 223
-# length = 16
-ct = fd101943f4ab7c38ec68c75d4b3193dc
-key = 48a53c11ef2d727db7eb9a834b134ea9602273aca929702eb2c31d96a58c9be2
-msg = 0000000000000000
-result = invalid
-
-# tcId = 224
-# length = 2**31 + 8
-ct = 1793a3a9bd146726edbcb9589f20e849
-key = 48a53c11ef2d727db7eb9a834b134ea9602273aca929702eb2c31d96a58c9be2
-msg = 0000000000000000
-result = invalid
-
diff --git a/src/tool/speed.cc b/src/tool/speed.cc
index 3929cf6..a0fc905 100644
--- a/src/tool/speed.cc
+++ b/src/tool/speed.cc
@@ -51,8 +51,6 @@
 #include "../crypto/internal.h"
 #include "internal.h"
 
-#include "../third_party/sike/sike.h"
-
 
 // TimeResults represents the results of benchmarking a function.
 struct TimeResults {
@@ -296,64 +294,6 @@
   return true;
 }
 
-static bool SpeedSIKEP434(const std::string &selected) {
-  if (!selected.empty() && selected.find("SIKE") == std::string::npos) {
-    return true;
-  }
-  // speed generation
-  uint8_t public_SIKE[SIKE_PUB_BYTESZ];
-  uint8_t private_SIKE[SIKE_PRV_BYTESZ];
-  uint8_t ct[SIKE_CT_BYTESZ];
-  bool res;
-
-  {
-    TimeResults results;
-    res = TimeFunction(&results,
-                [&private_SIKE, &public_SIKE]() -> bool {
-      return (SIKE_keypair(private_SIKE, public_SIKE) == 1);
-    });
-    results.Print("SIKE/P434 generate");
-  }
-
-  if (!res) {
-    fprintf(stderr, "Failed to time SIKE_keypair.\n");
-    return false;
-  }
-
-  {
-    TimeResults results;
-    TimeFunction(&results,
-                [&ct, &public_SIKE]() -> bool {
-      uint8_t ss[SIKE_SS_BYTESZ];
-      SIKE_encaps(ss, ct, public_SIKE);
-      return true;
-    });
-    results.Print("SIKE/P434 encap");
-  }
-
-  if (!res) {
-    fprintf(stderr, "Failed to time SIKE_encaps.\n");
-    return false;
-  }
-
-  {
-    TimeResults results;
-    TimeFunction(&results,
-                [&ct, &public_SIKE, &private_SIKE]() -> bool {
-      uint8_t ss[SIKE_SS_BYTESZ];
-      SIKE_decaps(ss, ct, public_SIKE, private_SIKE);
-      return true;
-    });
-    results.Print("SIKE/P434 decap");
-  }
-
-  if (!res) {
-    fprintf(stderr, "Failed to time SIKE_decaps.\n");
-    return false;
-  }
-  return true;
-}
-
 static uint8_t *align(uint8_t *in, unsigned alignment) {
   return reinterpret_cast<uint8_t *>(
       (reinterpret_cast<uintptr_t>(in) + alignment) &
@@ -495,7 +435,7 @@
 static bool SpeedHashChunk(const EVP_MD *md, std::string name,
                            size_t chunk_len) {
   bssl::ScopedEVP_MD_CTX ctx;
-  uint8_t scratch[16384];
+  uint8_t scratch[8192];
 
   if (chunk_len > sizeof(scratch)) {
     return false;
@@ -536,7 +476,7 @@
 }
 
 static bool SpeedRandomChunk(std::string name, size_t chunk_len) {
-  uint8_t scratch[16384];
+  uint8_t scratch[8192];
 
   if (chunk_len > sizeof(scratch)) {
     return false;
@@ -998,7 +938,6 @@
       !SpeedECDH(selected) ||
       !SpeedECDSA(selected) ||
       !Speed25519(selected) ||
-      !SpeedSIKEP434(selected) ||
       !SpeedSPAKE2(selected) ||
       !SpeedScrypt(selected) ||
       !SpeedRSAKeyGen(selected) ||
diff --git a/src/util/bot/DEPS b/src/util/bot/DEPS
index 760f2e4..1eb563d 100644
--- a/src/util/bot/DEPS
+++ b/src/util/bot/DEPS
@@ -19,8 +19,6 @@
   'checkout_sde': False,
   'checkout_nasm': False,
   'checkout_libcxx': False,
-
-  'android_sdk_platform-tools_version': 'MSnxgXN7IurL-MQs1RrTkSFSb8Xd1UtZjLArI8Ty1FgC',
 }
 
 deps = {
@@ -29,29 +27,23 @@
     'condition': 'checkout_android',
   },
 
-  'boringssl/util/bot/android_sdk/public': {
-      'packages': [
-          {
-              'package': 'chromium/third_party/android_sdk/public/platform-tools',
-              'version': Var('android_sdk_platform-tools_version'),
-          },
-      ],
-      'condition': 'checkout_android',
-      'dep_type': 'cipd',
+  'boringssl/util/bot/android_tools': {
+    'url': Var('chromium_git') + '/android_tools.git' + '@' + '347a7c8078a009e98995985b7ab6ec6b35696dea',
+    'condition': 'checkout_android',
   },
 
   'boringssl/util/bot/gyp':
     Var('chromium_git') + '/external/gyp.git' + '@' + 'd61a9397e668fa9843c4aa7da9e79460fe590bfb',
 
   'boringssl/util/bot/libFuzzer': {
-    'url': Var('chromium_git') + '/chromium/llvm-project/compiler-rt/lib/fuzzer.git' +'@' + 'e9b95bcfe2f5472fac2e516a0040aedf2140dd62',
+    'url': Var('chromium_git') + '/chromium/llvm-project/compiler-rt/lib/fuzzer.git' +'@' + 'e847d8a9b47158695593d5693b0f69250472b229',
     'condition': 'checkout_fuzzer',
   },
 
   # Update the following revisions from
   # https://chromium.googlesource.com/chromium/src/+/master/buildtools/DEPS
   'boringssl/util/bot/libcxx': {
-    'url': Var('chromium_git') + '/chromium/llvm-project/libcxx.git' + '@' + '5938e0582bac570a41edb3d6a2217c299adc1bc6',
+    'url': Var('chromium_git') + '/chromium/llvm-project/libcxx.git' + '@' + '955113db37563c8632e31ddcff2047845553d7ff',
     'condition': 'checkout_libcxx',
   },
   'boringssl/util/bot/libcxxabi': {
diff --git a/src/util/bot/go/bootstrap.py b/src/util/bot/go/bootstrap.py
index 1e97ecf..d295748 100755
--- a/src/util/bot/go/bootstrap.py
+++ b/src/util/bot/go/bootstrap.py
@@ -45,7 +45,7 @@
 EXE_SFX = '.exe' if sys.platform == 'win32' else ''
 
 # Pinned version of Go toolset to download.
-TOOLSET_VERSION = 'go1.12.6'
+TOOLSET_VERSION = 'go1.12.1'
 
 # Platform dependent portion of a download URL. See http://golang.org/dl/.
 TOOLSET_VARIANTS = {
diff --git a/src/util/bot/update_clang.py b/src/util/bot/update_clang.py
index 2965f22..5151b13 100644
--- a/src/util/bot/update_clang.py
+++ b/src/util/bot/update_clang.py
@@ -19,12 +19,10 @@
 # CLANG_REVISION and CLANG_SUB_REVISION determine the build of clang
 # to use. These should be synced with tools/clang/scripts/update.py in
 # Chromium.
-CLANG_REVISION = '80fee25776c2fb61e74c1ecb1a523375c2500b69'
-CLANG_SVN_REVISION = '362913'
+CLANG_REVISION = '357569'
 CLANG_SUB_REVISION = 1
 
-PACKAGE_VERSION = '%s-%s-%s' % (CLANG_SVN_REVISION, CLANG_REVISION[:8],
-                                CLANG_SUB_REVISION)
+PACKAGE_VERSION = "%s-%s" % (CLANG_REVISION, CLANG_SUB_REVISION)
 
 # Path constants. (All of these should be absolute paths.)
 THIS_DIR = os.path.abspath(os.path.dirname(__file__))
diff --git a/src/util/convert_wycheproof.go b/src/util/convert_wycheproof.go
index e6eab95..7846067 100644
--- a/src/util/convert_wycheproof.go
+++ b/src/util/convert_wycheproof.go
@@ -212,7 +212,6 @@
 	"ecdsa_secp521r1_sha512_test.json",
 	"eddsa_test.json",
 	"kw_test.json",
-	"kwp_test.json",
 	"rsa_pss_2048_sha1_mgf1_20_test.json",
 	"rsa_pss_2048_sha256_mgf1_0_test.json",
 	"rsa_pss_2048_sha256_mgf1_32_test.json",
diff --git a/src/util/doc.config b/src/util/doc.config
index d96e0fa..5bee1b5 100644
--- a/src/util/doc.config
+++ b/src/util/doc.config
@@ -39,8 +39,7 @@
       "include/openssl/md5.h",
       "include/openssl/rc4.h",
       "include/openssl/rsa.h",
-      "include/openssl/sha.h",
-      "include/openssl/siphash.h"
+      "include/openssl/sha.h"
     ]
   },{
     "Name": "Crypto interfaces",
diff --git a/src/util/fipstools/acvp/ACVP.md b/src/util/fipstools/acvp/ACVP.md
deleted file mode 100644
index ddae4ed..0000000
--- a/src/util/fipstools/acvp/ACVP.md
+++ /dev/null
@@ -1,159 +0,0 @@
-ACVP Client
-===========
-
-[ACVP](https://github.com/usnistgov/ACVP) is the next version of NIST's [CAVP](https://github.com/usnistgov/ACVP)—a program for running cryptographic implementations against a set of test vectors. CAVP involved emailing around zip files of somewhat-INI-like test vectors where no two files had quite the same format. ACVP is supposed to replace that with a) TLS connections rather than email and b) JSON rather than bespoke formats.
-
-The tool in this directory can speak to ACVP servers and run the resulting test vectors through a candidate FIPS module by lowering the tests to a much simpler protocol. It also provides an interface for manipulating the ACVP database which includes lists of modules, vendors, contacts, operating environments etc.
-
-## Configuration
-
-Configuration is done via a `config.json` file in the current working directory. Here's a template:
-
-```
-{
-        "ACVPServer": "https://demo.acvts.nist.gov/",
-        "CertPEMFile": "certificate_from_nist.pem",
-        "PrivateKeyDERFile": "your_private_key.key",
-        "TOTPSecret": "<base64 from NIST goes here>",
-        "SessionTokensCache": "~/.cache/acvp-session-tokens",
-        "LogFile": "log"
-}
-```
-
-NIST's ACVP servers use both TLS client certificates and TOTP for authentication. When registering with NIST, they'll sign a CSR and return a certificate in PEM format, which is pointed to be `CertPEMFile`. The corresponding PKCS#1, DER-encoded private key is expected in `PrivateKeyDERFile`. Lastly, NIST will provide a file that contains the base64-encoded TOTP seed, which must be pasted in as the value of `TOTPSecret`.
-
-NIST's ACVP server provides special access tokens for each test session and test sessions can _only_ be accessed via those tokens. The reasoning behind this is unclear but this client can, optionally, keep records of these access tokens in the directory named by `SessionTokensCache`. If that directory name begins with `~/` then that prefix will be replaced with the value of `$HOME`.
-
-Lastly, a log of all HTTP traffic will be written to the file named by `LogFile`, if provided. This is useful for debugging.
-
-## Interactive Use
-
-ACVP provides a fairly complex interface to a database of several types of objects. A rough UI is provided for this which is triggered when the client is invoked with no command-line arguments.
-
-The simplest objects in ACVP are request objects. These record the status of requested changes to the database and, in practice, changes to the NIST demo database never succeed. The set of pending requests for the current user can be enumerated just by evaluating the `requests` object:
-
-```
-> requests
-[
-  {
-    "url": "/acvp/v1/requests/374",
-    "status": "processing"
-  },
-  {
-    "url": "/acvp/v1/requests/218",
-    "status": "processing"
-  }
-]
-```
-
-A specific request can be evaluated by using indexing syntax:
-
-```
-> requests[374]
-{
-  "url": "/acvp/v1/requests/374",
-  "status": "processing"
-}
-```
-
-The list of vendors provides a more complex example. Since there are large number of duplicates in NIST's database, there are more than 10 000 vendor objects and enumerating them all takes a long time. Thus evaluating the `vendors` object doesn't do that:
-
-```
-> vendors
-[object set vendors]
-```
-
-It is still possible to use indexing syntax to read a specific vendor object if you know the ID:
-
-```
-> vendors[1234]
-{
-  "url": "/acvp/v1/vendors/1234",
-  "name": "Apple Inc.",
-  "website": "www.apple.com",
-  "contactsUrl": "/acvp/v1/vendors/1234/contacts",
-  "addresses": [
-    {
-      "url": "/acvp/v1/vendors/1234/addresses/1234",
-      "street1": "1 Infinite Loop",
-      "locality": "Cupertino",
-      "region": "CA",
-      "country": "USA",
-      "postalCode": "95014"
-    }
-  ]
-}
-```
-
-Finding a vendor when the ID is not known requires searching and the ACVP spec [documents](http://usnistgov.github.io/ACVP/artifacts/draft-fussell-acvp-spec-00.html#rfc.section.11.8.1), for each object type, what values and what relations can be searched on. This is reflected in a variant of the indexing syntax:
-
-```
-> vendors[where name contains "Google LLC"]
-[
-  {
-    "url": "/acvp/v1/vendors/11136",
-    "name": "Google LLC",
-    "website": "www.google.com",
-    "contactsUrl": "/acvp/v1/vendors/11136/contacts",
-    "addresses": [
-      {
-        "url": "/acvp/v1/vendors/11136/addresses/11136",
-        "street1": "1600 Amphitheatre Parkway",
-        "locality": "Mountain View",
-        "region": "CA",
-        "country": "USA",
-        "postalCode": "94043"
-      }
-    ]
-  },
-  {
-    "url": "/acvp/v1/vendors/11137",
-    "name": "Google LLC",
-    "website": "www.google.com",
-    "contactsUrl": "/acvp/v1/vendors/11137/contacts",
-    "addresses": [
-      {
-        "url": "/acvp/v1/vendors/11137/addresses/11137",
-        "street1": "1600 Amphitheatre Parkway",
-        "locality": "Mountain View",
-        "region": "CA",
-        "country": "USA",
-        "postalCode": "94043"
-      }
-    ]
-  }
-]
-```
-
-In general, `&&` and `||` can be used as in C and the relationships are `==`, `!=`, `contains`, `startsWith`, and `endsWith`. Only values and relations listed in the ACVP spec for a given object can be used.
-
-More complex interaction remains to be fleshed out. However, it is generally possible to create new objects by evaluating, for example, `vendors.new()`. That will invoke `$EDITOR` to edit the JSON to be submitted. (For now, however, no helpful templates are provided.)
-
-The current list of objects is:
-
-* `requests`
-* `vendors`
-* `persons`
-* `modules`
-* `oes` (operating environments)
-* `deps`
-* `algos`
-* `sessions`
-
-## Running test sessions
-
-Handling of test sessions (in non-interactive mode) is split into a “front” part, which talks to the ACVP server, and a “middle” part, which runs the actual test vectors. The middle part receives the raw JSON of the vector sets and returns the response. It also knows the set of algorithms that it supports and their respective parameters. For the moment, the only middle part provided is called `subprocess` which lowers the ACVP tests to simple binary protocol and talks to a FIPS module in a separate process to run the cryptographic algorithms.
-
-For development purposes, this code can be exercised by passing, say, `-run SHA2-256` to the client.
-
-### The subprocess protocol
-
-The lowering of ACVP to a simpler protocol might be useful for other projects so the protocol is described here. The C++ implementation for BoringSSL is in the `modulewrapper` directory.
-
-The protocol follows a strict request–response model over stdin/stdout: the subprocess only speaks in response to a request and there is exactly one response for every request. Conceptually requests consist of one or more byte strings and responses consist of zero or more byte strings.
-
-On the wire, a request involves sending the number of byte strings, then the length of each byte string in order, then the contents of each byte string. All numbers are little-endian and 32-bit. The first byte string is mandatory and is the name of the command to perform. A response has the same format except that there may be zero byte strings and the first byte string has no special semantics.
-
-All implementations must support the `getConfig` command which takes no arguments and returns a single byte string which is a JSON blob of ACVP algorithm configuration. This blob describes all the algorithms and capabilities that the module supports and is an array of JSON objects suitable for including as the `algorithms` value when [creating an ACVP vector set](http://usnistgov.github.io/ACVP/artifacts/draft-fussell-acvp-spec-00.html#rfc.section.11.15.2.1).
-
-Each supported algorithm will have its own commands that the module must implement. So far, only hash functions are supported and the commands take a byte string to hash and return a single byte string of the resulting digest. The commands are named after the ACVP algorithm names, i.e. `SHA-1`, `SHA2-224`, `SHA2-256`, `SHA2-384`, and `SHA2-512`.
diff --git a/src/util/fipstools/acvp/acvptool/acvp.go b/src/util/fipstools/acvp/acvptool/acvp.go
deleted file mode 100644
index ed1a84f..0000000
--- a/src/util/fipstools/acvp/acvptool/acvp.go
+++ /dev/null
@@ -1,430 +0,0 @@
-package main
-
-import (
-	"bufio"
-	"bytes"
-	"crypto/hmac"
-	"crypto/sha256"
-	"crypto/x509"
-	"encoding/base64"
-	"encoding/binary"
-	"encoding/json"
-	"encoding/pem"
-	"errors"
-	"flag"
-	"fmt"
-	"io/ioutil"
-	"log"
-	"net/http"
-	neturl "net/url"
-	"os"
-	"path/filepath"
-	"strings"
-	"time"
-
-	"boringssl.googlesource.com/boringssl/util/fipstools/acvp/acvptool/acvp"
-	"boringssl.googlesource.com/boringssl/util/fipstools/acvp/acvptool/subprocess"
-)
-
-var (
-	configFilename = flag.String("config", "config.json", "Location of the configuration JSON file")
-	runFlag        = flag.String("run", "", "Name of primitive to run tests for")
-	wrapperPath    = flag.String("wrapper", "../../../../build/util/fipstools/acvp/modulewrapper/modulewrapper", "Path to the wrapper binary")
-)
-
-type Config struct {
-	CertPEMFile        string
-	PrivateKeyDERFile  string
-	TOTPSecret         string
-	ACVPServer         string
-	SessionTokensCache string
-	LogFile            string
-}
-
-func isCommentLine(line []byte) bool {
-	var foundCommentStart bool
-	for _, b := range line {
-		if !foundCommentStart {
-			if b == ' ' || b == '\t' {
-				continue
-			}
-			if b != '/' {
-				return false
-			}
-			foundCommentStart = true
-		} else {
-			return b == '/'
-		}
-	}
-	return false
-}
-
-func jsonFromFile(out interface{}, filename string) error {
-	in, err := os.Open(filename)
-	if err != nil {
-		return err
-	}
-	defer in.Close()
-
-	scanner := bufio.NewScanner(in)
-	var commentsRemoved bytes.Buffer
-	for scanner.Scan() {
-		if isCommentLine(scanner.Bytes()) {
-			continue
-		}
-		commentsRemoved.Write(scanner.Bytes())
-		commentsRemoved.WriteString("\n")
-	}
-	if err := scanner.Err(); err != nil {
-		return err
-	}
-
-	decoder := json.NewDecoder(&commentsRemoved)
-	decoder.DisallowUnknownFields()
-	if err := decoder.Decode(out); err != nil {
-		return err
-	}
-	if decoder.More() {
-		return errors.New("trailing garbage found")
-	}
-	return nil
-}
-
-// TOTP implements the time-based one-time password algorithm with the suggested
-// granularity of 30 seconds. See https://tools.ietf.org/html/rfc6238 and then
-// https://tools.ietf.org/html/rfc4226#section-5.3
-func TOTP(secret []byte) string {
-	const timeStep = 30
-	now := uint64(time.Now().Unix()) / 30
-	var nowBuf [8]byte
-	binary.BigEndian.PutUint64(nowBuf[:], now)
-	mac := hmac.New(sha256.New, secret)
-	mac.Write(nowBuf[:])
-	digest := mac.Sum(nil)
-	value := binary.BigEndian.Uint32(digest[digest[31]&15:])
-	value &= 0x7fffffff
-	value %= 100000000
-	return fmt.Sprintf("%08d", value)
-}
-
-type Middle interface {
-	Close()
-	Config() ([]byte, error)
-	Process(algorithm string, vectorSet []byte) ([]byte, error)
-}
-
-func loadCachedSessionTokens(server *acvp.Server, cachePath string) error {
-	cacheDir, err := os.Open(cachePath)
-	if err != nil {
-		if os.IsNotExist(err) {
-			if err := os.Mkdir(cachePath, 0700); err != nil {
-				return fmt.Errorf("Failed to create session token cache directory %q: %s", cachePath, err)
-			}
-			return nil
-		}
-		return fmt.Errorf("Failed to open session token cache directory %q: %s", cachePath, err)
-	}
-	defer cacheDir.Close()
-	names, err := cacheDir.Readdirnames(0)
-	if err != nil {
-		return fmt.Errorf("Failed to list session token cache directory %q: %s", cachePath, err)
-	}
-
-	loaded := 0
-	for _, name := range names {
-		if !strings.HasSuffix(name, ".token") {
-			continue
-		}
-		path := filepath.Join(cachePath, name)
-		contents, err := ioutil.ReadFile(path)
-		if err != nil {
-			return fmt.Errorf("Failed to read session token cache entry %q: %s", path, err)
-		}
-		urlPath, err := neturl.PathUnescape(name[:len(name)-6])
-		if err != nil {
-			return fmt.Errorf("Failed to unescape token filename %q: %s", name, err)
-		}
-		server.PrefixTokens[urlPath] = string(contents)
-		loaded++
-	}
-
-	log.Printf("Loaded %d cached tokens", loaded)
-	return nil
-}
-
-func trimLeadingSlash(s string) string {
-	if strings.HasPrefix(s, "/") {
-		return s[1:]
-	}
-	return s
-}
-
-func main() {
-	flag.Parse()
-
-	var config Config
-	if err := jsonFromFile(&config, *configFilename); err != nil {
-		log.Fatalf("Failed to load config file: %s", err)
-	}
-
-	if len(config.TOTPSecret) == 0 {
-		log.Fatal("Config file missing TOTPSecret")
-	}
-	totpSecret, err := base64.StdEncoding.DecodeString(config.TOTPSecret)
-	if err != nil {
-		log.Fatalf("Failed to decode TOTP secret from config file: %s", err)
-	}
-
-	if len(config.CertPEMFile) == 0 {
-		log.Fatal("Config file missing CertPEMFile")
-	}
-	certPEM, err := ioutil.ReadFile(config.CertPEMFile)
-	if err != nil {
-		log.Fatalf("failed to read certificate from %q: %s", config.CertPEMFile, err)
-	}
-	block, _ := pem.Decode(certPEM)
-	certDER := block.Bytes
-
-	if len(config.PrivateKeyDERFile) == 0 {
-		log.Fatal("Config file missing PrivateKeyDERFile")
-	}
-	keyDER, err := ioutil.ReadFile(config.PrivateKeyDERFile)
-	if err != nil {
-		log.Fatalf("failed to read private key from %q: %s", config.PrivateKeyDERFile, err)
-	}
-
-	certKey, err := x509.ParsePKCS1PrivateKey(keyDER)
-	if err != nil {
-		log.Fatalf("failed to parse private key from %q: %s", config.PrivateKeyDERFile, err)
-	}
-
-	var middle Middle
-	middle, err = subprocess.New(*wrapperPath)
-	if err != nil {
-		log.Fatalf("failed to initialise middle: %s", err)
-	}
-	defer middle.Close()
-
-	configBytes, err := middle.Config()
-	if err != nil {
-		log.Fatalf("failed to get config from middle: %s", err)
-	}
-
-	var supportedAlgos []map[string]interface{}
-	if err := json.Unmarshal(configBytes, &supportedAlgos); err != nil {
-		log.Fatalf("failed to parse configuration from Middle: %s", err)
-	}
-
-	runAlgos := make(map[string]bool)
-	if len(*runFlag) > 0 {
-		for _, substr := range strings.Split(*runFlag, ",") {
-			runAlgos[substr] = false
-		}
-	}
-
-	var algorithms []map[string]interface{}
-	for _, supportedAlgo := range supportedAlgos {
-		algoInterface, ok := supportedAlgo["algorithm"]
-		if !ok {
-			continue
-		}
-
-		algo, ok := algoInterface.(string)
-		if !ok {
-			continue
-		}
-
-		if _, ok := runAlgos[algo]; ok {
-			algorithms = append(algorithms, supportedAlgo)
-			runAlgos[algo] = true
-		}
-	}
-
-	for algo, recognised := range runAlgos {
-		if !recognised {
-			log.Fatalf("requested algorithm %q was not recognised", algo)
-		}
-	}
-
-	if len(config.ACVPServer) == 0 {
-		config.ACVPServer = "https://demo.acvts.nist.gov/"
-	}
-	server := acvp.NewServer(config.ACVPServer, config.LogFile, [][]byte{certDER}, certKey, func() string {
-		return TOTP(totpSecret[:])
-	})
-
-	var sessionTokensCacheDir string
-	if len(config.SessionTokensCache) > 0 {
-		sessionTokensCacheDir = config.SessionTokensCache
-		if strings.HasPrefix(sessionTokensCacheDir, "~/") {
-			home := os.Getenv("HOME")
-			if len(home) == 0 {
-				log.Fatal("~ used in config file but $HOME not set")
-			}
-			sessionTokensCacheDir = filepath.Join(home, sessionTokensCacheDir[2:])
-		}
-
-		if err := loadCachedSessionTokens(server, sessionTokensCacheDir); err != nil {
-			log.Fatal(err)
-		}
-	}
-
-	if err := server.Login(); err != nil {
-		log.Fatalf("failed to login: %s", err)
-	}
-
-	if len(*runFlag) == 0 {
-		runInteractive(server, config)
-		return
-	}
-
-	requestBytes, err := json.Marshal(acvp.TestSession{
-		IsSample:    true,
-		Publishable: false,
-		Algorithms:  algorithms,
-	})
-	if err != nil {
-		log.Fatalf("Failed to serialise JSON: %s", err)
-	}
-
-	var result acvp.TestSession
-	if err := server.Post(&result, "acvp/v1/testSessions", requestBytes); err != nil {
-		log.Fatalf("Request to create test session failed: %s", err)
-	}
-
-	url := trimLeadingSlash(result.URL)
-	log.Printf("Created test session %q", url)
-	if token := result.AccessToken; len(token) > 0 {
-		server.PrefixTokens[url] = token
-		if len(sessionTokensCacheDir) > 0 {
-			ioutil.WriteFile(filepath.Join(sessionTokensCacheDir, neturl.PathEscape(url))+".token", []byte(token), 0600)
-		}
-	}
-
-	log.Printf("Have vector sets %v", result.VectorSetURLs)
-
-	for _, setURL := range result.VectorSetURLs {
-		firstTime := true
-		for {
-			if firstTime {
-				log.Printf("Fetching test vectors %q", setURL)
-				firstTime = false
-			}
-
-			vectorsBytes, err := server.GetBytes(trimLeadingSlash(setURL))
-			if err != nil {
-				log.Fatalf("Failed to fetch vector set %q: %s", setURL, err)
-			}
-
-			var vectors acvp.Vectors
-			if err := json.Unmarshal(vectorsBytes, &vectors); err != nil {
-				log.Fatalf("Failed to parse vector set from %q: %s", setURL, err)
-			}
-
-			if retry := vectors.Retry; retry > 0 {
-				log.Printf("Server requested %d seconds delay", retry)
-				if retry > 10 {
-					retry = 10
-				}
-				time.Sleep(time.Duration(retry) * time.Second)
-				continue
-			}
-
-			replyGroups, err := middle.Process(vectors.Algo, vectorsBytes)
-			if err != nil {
-				log.Printf("Failed: %s", err)
-				log.Printf("Deleting test set")
-				server.Delete(url)
-				os.Exit(1)
-			}
-
-			headerBytes, err := json.Marshal(acvp.Vectors{
-				ID:   vectors.ID,
-				Algo: vectors.Algo,
-			})
-			if err != nil {
-				log.Printf("Failed to marshal result: %s", err)
-				log.Printf("Deleting test set")
-				server.Delete(url)
-				os.Exit(1)
-			}
-
-			var resultBuf bytes.Buffer
-			resultBuf.Write(headerBytes[:len(headerBytes)-1])
-			resultBuf.WriteString(`,"testGroups":`)
-			resultBuf.Write(replyGroups)
-			resultBuf.WriteString("}")
-
-			resultData := resultBuf.Bytes()
-			resultSize := uint64(len(resultData)) + 32 /* for framing overhead */
-			if resultSize >= server.SizeLimit {
-				log.Printf("Result is %d bytes, too much given server limit of %d bytes. Using large-upload process.", resultSize, server.SizeLimit)
-				largeRequestBytes, err := json.Marshal(acvp.LargeUploadRequest{
-					Size: resultSize,
-					URL:  setURL,
-				})
-				if err != nil {
-					log.Printf("Failed to marshal large-upload request: %s", err)
-					log.Printf("Deleting test set")
-					server.Delete(url)
-					os.Exit(1)
-				}
-
-				var largeResponse acvp.LargeUploadResponse
-				if err := server.Post(&largeResponse, "/large", largeRequestBytes); err != nil {
-					log.Fatalf("Failed to request large-upload endpoint: %s", err)
-				}
-
-				log.Printf("Directed to large-upload endpoint at %q", largeResponse.URL)
-				client := &http.Client{}
-				req, err := http.NewRequest("POST", largeResponse.URL, bytes.NewBuffer(resultData))
-				if err != nil {
-					log.Fatalf("Failed to create POST request: %s", err)
-				}
-				token := largeResponse.AccessToken
-				if len(token) == 0 {
-					token = server.AccessToken
-				}
-				req.Header.Add("Authorization", "Bearer "+token)
-				req.Header.Add("Content-Type", "application/json")
-				resp, err := client.Do(req)
-				if err != nil {
-					log.Fatalf("Failed writing large upload: %s", err)
-				}
-				resp.Body.Close()
-				if resp.StatusCode != 200 {
-					log.Fatalf("Large upload resulted in status code %d", resp.StatusCode)
-				}
-			} else {
-				log.Printf("Result size %d bytes", resultSize)
-				if err := server.Post(nil, trimLeadingSlash(setURL)+"/results", resultData); err != nil {
-					log.Fatalf("Failed to upload results: %s\n", err)
-				}
-			}
-
-			break
-		}
-	}
-
-FetchResults:
-	for {
-		var results acvp.SessionResults
-		if err := server.Get(&results, trimLeadingSlash(url)+"/results"); err != nil {
-			log.Fatalf("Failed to fetch session results: %s", err)
-		}
-
-		if results.Passed {
-			break
-		}
-
-		for _, result := range results.Results {
-			if result.Status == "incomplete" {
-				log.Print("Server hasn't finished processing results. Waiting 10 seconds.")
-				time.Sleep(10 * time.Second)
-				continue FetchResults
-			}
-		}
-
-		log.Fatalf("Server did not accept results: %#v", results)
-	}
-}
diff --git a/src/util/fipstools/acvp/acvptool/acvp/acvp.go b/src/util/fipstools/acvp/acvptool/acvp/acvp.go
deleted file mode 100644
index 2f5d363..0000000
--- a/src/util/fipstools/acvp/acvptool/acvp/acvp.go
+++ /dev/null
@@ -1,646 +0,0 @@
-package acvp
-
-import (
-	"bytes"
-	"crypto"
-	"crypto/tls"
-	"encoding/base64"
-	"encoding/json"
-	"errors"
-	"fmt"
-	"io"
-	"io/ioutil"
-	"net"
-	"net/http"
-	"net/url"
-	"os"
-	"reflect"
-	"strings"
-	"time"
-)
-
-// Server represents an ACVP server.
-type Server struct {
-	// PrefixTokens are access tokens that apply to URLs under a certain prefix.
-	// The keys of this map are strings like "acvp/v1/testSessions/1234" and the
-	// values are JWT access tokens.
-	PrefixTokens map[string]string
-	// SizeLimit is the maximum number of bytes that the server can accept as an
-	// upload before the large endpoint support must be used.
-	SizeLimit uint64
-	// AccessToken is the top-level access token for the current session.
-	AccessToken string
-
-	client      *http.Client
-	prefix      string
-	totpFunc    func() string
-}
-
-// NewServer returns a fresh Server instance representing the ACVP server at
-// prefix (e.g. "https://acvp.example.com/"). A copy of all bytes exchanged
-// will be written to logFile, if not empty.
-func NewServer(prefix string, logFile string, derCertificates [][]byte, privateKey crypto.PrivateKey, totp func() string) *Server {
-	if !strings.HasSuffix(prefix, "/") {
-		prefix = prefix + "/"
-	}
-
-	tlsConfig := &tls.Config{
-		Certificates: []tls.Certificate{
-			tls.Certificate{
-				Certificate: derCertificates,
-				PrivateKey:  privateKey,
-			},
-		},
-		Renegotiation: tls.RenegotiateOnceAsClient,
-	}
-
-	client := &http.Client{
-		Transport: &http.Transport{
-			Dial: func(network, addr string) (net.Conn, error) {
-				panic("HTTP connection requested")
-			},
-			DialTLS: func(network, addr string) (net.Conn, error) {
-				conn, err := tls.Dial(network, addr, tlsConfig)
-				if err != nil {
-					return nil, err
-				}
-				if len(logFile) > 0 {
-					logFile, err := os.OpenFile(logFile, os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0600)
-					if err != nil {
-						return nil, err
-					}
-					return &logger{Conn: conn, log: logFile}, nil
-				}
-				return conn, err
-			},
-		},
-		Timeout: 10 * time.Second,
-	}
-
-	return &Server{client: client, prefix: prefix, totpFunc: totp, PrefixTokens: make(map[string]string)}
-}
-
-type logger struct {
-	*tls.Conn
-	log           *os.File
-	lastDirection int
-}
-
-var newLine = []byte{'\n'}
-
-func (l *logger) Read(buf []byte) (int, error) {
-	if l.lastDirection != 1 {
-		l.log.Write(newLine)
-	}
-	l.lastDirection = 1
-
-	n, err := l.Conn.Read(buf)
-	if err == nil {
-		l.log.Write(buf[:n])
-	}
-	return n, err
-}
-
-func (l *logger) Write(buf []byte) (int, error) {
-	if l.lastDirection != 2 {
-		l.log.Write(newLine)
-	}
-	l.lastDirection = 2
-
-	n, err := l.Conn.Write(buf)
-	if err == nil {
-		l.log.Write(buf[:n])
-	}
-	return n, err
-}
-
-const requestPrefix = `[{"acvVersion":"1.0"},`
-const requestSuffix = "]"
-
-// parseHeaderElement parses the first JSON object that's always returned by
-// ACVP servers. If successful, it returns a JSON Decoder positioned just
-// before the second element.
-func parseHeaderElement(in io.Reader) (*json.Decoder, error) {
-	decoder := json.NewDecoder(in)
-	arrayStart, err := decoder.Token()
-	if err != nil {
-		return nil, errors.New("failed to read from server reply: " + err.Error())
-	}
-	if delim, ok := arrayStart.(json.Delim); !ok || delim != '[' {
-		return nil, fmt.Errorf("found %#v when expecting initial array from server", arrayStart)
-	}
-
-	var version struct {
-		Version string `json:"acvVersion"`
-	}
-	if err := decoder.Decode(&version); err != nil {
-		return nil, errors.New("parse error while decoding version element: " + err.Error())
-	}
-	if !strings.HasPrefix(version.Version, "1.") {
-		return nil, fmt.Errorf("expected version 1.* from server but found %q", version.Version)
-	}
-
-	return decoder, nil
-}
-
-// parseReplyToBytes reads the contents of an ACVP reply after removing the
-// header element.
-func parseReplyToBytes(in io.Reader) ([]byte, error) {
-	decoder, err := parseHeaderElement(in)
-	if err != nil {
-		return nil, err
-	}
-
-	buf, err := ioutil.ReadAll(decoder.Buffered())
-	if err != nil {
-		return nil, err
-	}
-
-	rest, err := ioutil.ReadAll(in)
-	if err != nil {
-		return nil, err
-	}
-	buf = append(buf, rest...)
-
-	buf = bytes.TrimSpace(buf)
-	if len(buf) == 0 || buf[0] != ',' {
-		return nil, errors.New("didn't find initial ','")
-	}
-	buf = buf[1:]
-
-	if len(buf) == 0 || buf[len(buf)-1] != ']' {
-		return nil, errors.New("didn't find trailing ']'")
-	}
-	buf = buf[:len(buf)-1]
-
-	return buf, nil
-}
-
-// parseReply parses the contents of an ACVP reply (after removing the header
-// element) into out. See the documentation of the encoding/json package for
-// details of the parsing.
-func parseReply(out interface{}, in io.Reader) error {
-	if out == nil {
-		// No reply expected.
-		return nil
-	}
-
-	decoder, err := parseHeaderElement(in)
-	if err != nil {
-		return err
-	}
-
-	if err := decoder.Decode(out); err != nil {
-		return errors.New("error while decoding reply body: " + err.Error())
-	}
-
-	arrayEnd, err := decoder.Token()
-	if err != nil {
-		return errors.New("failed to read end of reply from server: " + err.Error())
-	}
-	if delim, ok := arrayEnd.(json.Delim); !ok || delim != ']' {
-		return fmt.Errorf("found %#v when expecting end of array from server", arrayEnd)
-	}
-	if decoder.More() {
-		return errors.New("unexpected trailing data from server")
-	}
-
-	return nil
-}
-
-// expired returns true if the given JWT token has expired.
-func expired(tokenStr string) bool {
-	parts := strings.Split(tokenStr, ".")
-	if len(parts) != 3 {
-		return false
-	}
-	jsonBytes, err := base64.RawURLEncoding.DecodeString(parts[1])
-	if err != nil {
-		return false
-	}
-	var token struct {
-		Expiry uint64 `json:"exp"`
-	}
-	if json.Unmarshal(jsonBytes, &token) != nil {
-		return false
-	}
-	return token.Expiry > 0 && token.Expiry < uint64(time.Now().Unix())
-}
-
-func (server *Server) getToken(endPoint string) (string, error) {
-	for path, token := range server.PrefixTokens {
-		if endPoint != path && !strings.HasPrefix(endPoint, path+"/") {
-			continue
-		}
-
-		if !expired(token) {
-			return token, nil
-		}
-
-		var reply struct {
-			AccessToken string `json:"accessToken"`
-		}
-		if err := server.postMessage(&reply, "acvp/v1/login", map[string]string{
-			"password":    server.totpFunc(),
-			"accessToken": token,
-		}); err != nil {
-			return "", err
-		}
-		server.PrefixTokens[path] = reply.AccessToken
-		return reply.AccessToken, nil
-	}
-	return server.AccessToken, nil
-}
-
-// Login sends a login request and stores the returned access tokens for use
-// with future requests. The login process isn't specifically documented in
-// draft-fussell-acvp-spec and the best reference is
-// https://github.com/usnistgov/ACVP/wiki#credentials-for-accessing-the-demo-server
-func (server *Server) Login() error {
-	var reply struct {
-		AccessToken           string `json:"accessToken"`
-		LargeEndpointRequired bool   `json:"largeEndpointRequired"`
-		SizeLimit             uint64 `json:"sizeConstraint"`
-	}
-
-	if err := server.postMessage(&reply, "acvp/v1/login", map[string]string{"password": server.totpFunc()}); err != nil {
-		return err
-	}
-
-	if len(reply.AccessToken) == 0 {
-		return errors.New("login reply didn't contain access token")
-	}
-	server.AccessToken = reply.AccessToken
-
-	if reply.LargeEndpointRequired {
-		if reply.SizeLimit == 0 {
-			return errors.New("login indicated largeEndpointRequired but didn't provide a sizeConstraint")
-		}
-		server.SizeLimit = reply.SizeLimit
-	}
-
-	return nil
-}
-
-type Relation int
-
-const (
-	Equals           Relation = iota
-	NotEquals        Relation = iota
-	GreaterThan      Relation = iota
-	GreaterThanEqual Relation = iota
-	LessThan         Relation = iota
-	LessThanEqual    Relation = iota
-	Contains         Relation = iota
-	StartsWith       Relation = iota
-	EndsWith         Relation = iota
-)
-
-func (rel Relation) String() string {
-	switch rel {
-	case Equals:
-		return "eq"
-	case NotEquals:
-		return "ne"
-	case GreaterThan:
-		return "gt"
-	case GreaterThanEqual:
-		return "ge"
-	case LessThan:
-		return "lt"
-	case LessThanEqual:
-		return "le"
-	case Contains:
-		return "contains"
-	case StartsWith:
-		return "start"
-	case EndsWith:
-		return "end"
-	default:
-		panic("unknown relation")
-	}
-}
-
-type Condition struct {
-	Param    string
-	Relation Relation
-	Value    string
-}
-
-type Conjunction []Condition
-
-type Query []Conjunction
-
-func (query Query) toURLParams() string {
-	var ret string
-
-	for i, conj := range query {
-		for _, cond := range conj {
-			if len(ret) > 0 {
-				ret += "&"
-			}
-			ret += fmt.Sprintf("%s[%d]=%s:%s", url.QueryEscape(cond.Param), i, cond.Relation.String(), url.QueryEscape(cond.Value))
-		}
-	}
-
-	return ret
-}
-
-var NotFound = errors.New("acvp: HTTP code 404")
-
-func (server *Server) newRequestWithToken(method, endpoint string, body io.Reader) (*http.Request, error) {
-    token, err := server.getToken(endpoint)
-    if err != nil {
-        return nil, err
-    }
-    req, err := http.NewRequest(method, server.prefix+endpoint, body)
-    if err != nil {
-        return nil, err
-    }
-    if len(token) != 0 {
-       req.Header.Add("Authorization", "Bearer "+token)
-    }
-    return req, nil
-}
-
-func (server *Server) Get(out interface{}, endPoint string) error {
-	req, err := server.newRequestWithToken("GET", endPoint, nil)
-	if err != nil {
-		return err
-	}
-	resp, err := server.client.Do(req)
-	if err != nil {
-		return fmt.Errorf("error while fetching chunk for %q: %s", endPoint, err)
-	}
-
-	defer resp.Body.Close()
-	if resp.StatusCode == 404 {
-		return NotFound
-	} else if resp.StatusCode != 200 {
-		return fmt.Errorf("acvp: HTTP error %d", resp.StatusCode)
-	}
-	return parseReply(out, resp.Body)
-}
-
-func (server *Server) GetBytes(endPoint string) ([]byte, error) {
-	req, err := server.newRequestWithToken("GET", endPoint, nil)
-	if err != nil {
-		return nil, err
-	}
-	resp, err := server.client.Do(req)
-	if err != nil {
-		return nil, fmt.Errorf("error while fetching chunk for %q: %s", endPoint, err)
-	}
-
-	defer resp.Body.Close()
-	if resp.StatusCode == 404 {
-		return nil, NotFound
-	} else if resp.StatusCode != 200 {
-		return nil, fmt.Errorf("acvp: HTTP error %d", resp.StatusCode)
-	}
-	return parseReplyToBytes(resp.Body)
-}
-
-func (server *Server) write(method string, reply interface{}, endPoint string, contents []byte) error {
-	var buf bytes.Buffer
-	buf.WriteString(requestPrefix)
-	buf.Write(contents)
-	buf.WriteString(requestSuffix)
-
-	req, err := server.newRequestWithToken("POST", endPoint, &buf)
-	if err != nil {
-		return err
-	}
-	req.Header.Add("Content-Type", "application/json")
-	resp, err := server.client.Do(req)
-	if err != nil {
-		return fmt.Errorf("error while writing to %q: %s", endPoint, err)
-	}
-
-	defer resp.Body.Close()
-	if resp.StatusCode == 404 {
-		return NotFound
-	} else if resp.StatusCode != 200 {
-		return fmt.Errorf("acvp: HTTP error %d", resp.StatusCode)
-	}
-	return parseReply(reply, resp.Body)
-}
-
-func (server *Server) postMessage(reply interface{}, endPoint string, request interface{}) error {
-	contents, err := json.Marshal(request)
-	if err != nil {
-		return err
-	}
-	return server.write("POST", reply, endPoint, contents)
-}
-
-func (server *Server) Post(out interface{}, endPoint string, contents []byte) error {
-	return server.write("POST", out, endPoint, contents)
-}
-
-func (server *Server) Put(out interface{}, endPoint string, contents []byte) error {
-	return server.write("PUT", out, endPoint, contents)
-}
-
-func (server *Server) Delete(endPoint string) error {
-	req, err := server.newRequestWithToken("DELETE", endPoint, nil)
-	resp, err := server.client.Do(req)
-	if err != nil {
-		return fmt.Errorf("error while writing to %q: %s", endPoint, err)
-	}
-
-	defer resp.Body.Close()
-	if resp.StatusCode != 200 {
-		return fmt.Errorf("acvp: HTTP error %d", resp.StatusCode)
-	}
-	fmt.Printf("DELETE %q %d\n", server.prefix+endPoint, resp.StatusCode)
-	return nil
-}
-
-var (
-	uint64Type = reflect.TypeOf(uint64(0))
-	boolType   = reflect.TypeOf(false)
-	stringType = reflect.TypeOf("")
-)
-
-// GetPaged returns an array of records of some type using one or more requests to the server. See
-// https://usnistgov.github.io/ACVP/artifacts/draft-fussell-acvp-spec-00.html#paging_response
-func (server *Server) GetPaged(out interface{}, endPoint string, condition Query) error {
-	output := reflect.ValueOf(out)
-	if output.Kind() != reflect.Ptr {
-		panic(fmt.Sprintf("GetPaged output parameter of non-pointer type %T", out))
-	}
-
-	token, err := server.getToken(endPoint)
-	if err != nil {
-		return err
-	}
-
-	outputSlice := output.Elem()
-
-	replyType := reflect.StructOf([]reflect.StructField{
-		{Name: "TotalCount", Type: uint64Type, Tag: `json:"totalCount"`},
-		{Name: "Incomplete", Type: boolType, Tag: `json:"incomplete"`},
-		{Name: "Data", Type: output.Elem().Type(), Tag: `json:"data"`},
-		{Name: "Links", Type: reflect.StructOf([]reflect.StructField{
-			{Name: "Next", Type: stringType, Tag: `json:"next"`},
-		}), Tag: `json:"links"`},
-	})
-	nextURL := server.prefix + endPoint
-	conditionParams := condition.toURLParams()
-	if len(conditionParams) > 0 {
-		nextURL += "?" + conditionParams
-	}
-
-	isFirstRequest := true
-	for {
-		req, err := http.NewRequest("GET", nextURL, nil)
-		if err != nil {
-			return err
-		}
-		if len(token) != 0 {
-			req.Header.Add("Authorization", "Bearer "+token)
-		}
-		resp, err := server.client.Do(req)
-		if err != nil {
-			return fmt.Errorf("error while fetching chunk for %q: %s", endPoint, err)
-		}
-		if resp.StatusCode == 404 && isFirstRequest {
-			resp.Body.Close()
-			return nil
-		} else if resp.StatusCode != 200 {
-			resp.Body.Close()
-			return fmt.Errorf("acvp: HTTP error %d", resp.StatusCode)
-		}
-		isFirstRequest = false
-
-		reply := reflect.New(replyType)
-		err = parseReply(reply.Interface(), resp.Body)
-		resp.Body.Close()
-		if err != nil {
-			return err
-		}
-
-		data := reply.Elem().FieldByName("Data")
-		for i := 0; i < data.Len(); i++ {
-			outputSlice.Set(reflect.Append(outputSlice, data.Index(i)))
-		}
-
-		if uint64(outputSlice.Len()) == reply.Elem().FieldByName("TotalCount").Uint() ||
-			reply.Elem().FieldByName("Links").FieldByName("Next").String() == "" {
-			break
-		}
-
-		nextURL = server.prefix + endPoint + fmt.Sprintf("?offset=%d", outputSlice.Len())
-		if len(conditionParams) > 0 {
-			nextURL += "&" + conditionParams
-		}
-	}
-
-	return nil
-}
-
-// https://usnistgov.github.io/ACVP/artifacts/draft-fussell-acvp-spec-00.html#rfc.section.11.8.3.1
-type Vendor struct {
-	URL         string    `json:"url,omitempty"`
-	Name        string    `json:"name,omitempty"`
-	ParentURL   string    `json:"parentUrl,omitempty"`
-	Website     string    `json:"website,omitempty"`
-	Emails      []string  `json:"emails,omitempty"`
-	ContactsURL string    `json:"contactsUrl,omitempty"`
-	Addresses   []Address `json:"addresses,omitempty"`
-}
-
-// https://usnistgov.github.io/ACVP/artifacts/draft-fussell-acvp-spec-00.html#rfc.section.11.9
-type Address struct {
-	URL        string `json:"url,omitempty"`
-	Street1    string `json:"street1,omitempty"`
-	Street2    string `json:"street2,omitempty"`
-	Street3    string `json:"street3,omitempty"`
-	Locality   string `json:"locality,omitempty"`
-	Region     string `json:"region,omitempty"`
-	Country    string `json:"country,omitempty"`
-	PostalCode string `json:"postalCode,omitempty"`
-}
-
-// https://usnistgov.github.io/ACVP/artifacts/draft-fussell-acvp-spec-00.html#rfc.section.11.10
-type Person struct {
-	URL          string   `json:"url,omitempty"`
-	FullName     string   `json:"fullName,omitempty"`
-	VendorURL    string   `json:"vendorUrl,omitempty"`
-	Emails       []string `json:"emails,omitempty"`
-	PhoneNumbers []struct {
-		Number string `json:"number,omitempty"`
-		Type   string `json:"type,omitempty"`
-	} `json:"phoneNumbers,omitempty"`
-}
-
-// https://usnistgov.github.io/ACVP/artifacts/draft-fussell-acvp-spec-00.html#rfc.section.11.11
-type Module struct {
-	URL         string   `json:"url,omitempty"`
-	Name        string   `json:"name,omitempty"`
-	Version     string   `json:"version,omitempty"`
-	Type        string   `json:"type,omitempty"`
-	Website     string   `json:"website,omitempty"`
-	VendorURL   string   `json:"vendorUrl,omitempty"`
-	AddressURL  string   `json:"addressUrl,omitempty"`
-	ContactURLs []string `json:"contactUrls,omitempty"`
-	Description string   `json:"description,omitempty"`
-}
-
-type RequestStatus struct {
-	URL         string `json:"url,omitempty"`
-	Status      string `json:"status,omitempty"`
-	Message     string `json:"message,omitempty"`
-	ApprovedURL string `json:"approvedUrl,omitempty"`
-}
-
-type OperationalEnvironment struct {
-	URL            string       `json:"url,omitempty"`
-	Name           string       `json:"name,omitempty"`
-	DependencyUrls []string     `json:"dependencyUrls,omitempty"`
-	Dependencies   []Dependency `json:"dependencies,omitempty"`
-}
-
-type Dependency map[string]interface{}
-
-type Algorithm map[string]interface{}
-
-type TestSession struct {
-	URL           string                   `json:"url,omitempty"`
-	ACVPVersion   string                   `json:"acvpVersion,omitempty"`
-	Created       string                   `json:"createdOn,omitempty"`
-	Expires       string                   `json:"expiresOn,omitempty"`
-	VectorSetURLs []string                 `json:"vectorSetUrls,omitempty"`
-	AccessToken   string                   `json:"accessToken,omitempty"`
-	Algorithms    []map[string]interface{} `json:"algorithms,omitempty"`
-	EncryptAtRest bool                     `json:"encryptAtRest,omitempty"`
-	IsSample      bool                     `json:"isSample,omitempty"`
-	Publishable   bool                     `json:"publishable,omitempty"`
-	Passed        bool                     `json:"passed,omitempty"`
-}
-
-type Vectors struct {
-	Retry    uint64 `json:"retry,omitempty"`
-	ID       uint64 `json:"vsId"`
-	Algo     string `json:"algorithm,omitempty"`
-	Revision string `json:"revision,omitempty"`
-}
-
-type LargeUploadRequest struct {
-	Size uint64 `json:"submissionSize,omitempty"`
-	URL  string `json:"vectorSetUrl,omitempty"`
-}
-
-type LargeUploadResponse struct {
-	URL         string `json:"url"`
-	AccessToken string `json:"accessToken"`
-}
-
-type SessionResults struct {
-	Passed  bool `json:"passed"`
-	Results []struct {
-		URL    string `json:"vectorSetUrl,omitempty"`
-		Status string `json:"status"`
-	} `json:"results"`
-}
diff --git a/src/util/fipstools/acvp/acvptool/interactive.go b/src/util/fipstools/acvp/acvptool/interactive.go
deleted file mode 100644
index 8de57ff..0000000
--- a/src/util/fipstools/acvp/acvptool/interactive.go
+++ /dev/null
@@ -1,707 +0,0 @@
-package main
-
-import (
-	"bytes"
-	"encoding/json"
-	"errors"
-	"fmt"
-	"io"
-	"io/ioutil"
-	neturl "net/url"
-	"os"
-	"os/exec"
-	"os/signal"
-	"path/filepath"
-	"reflect"
-	"strconv"
-	"strings"
-	"syscall"
-
-	"boringssl.googlesource.com/boringssl/util/fipstools/acvp/acvptool/acvp"
-	"golang.org/x/crypto/ssh/terminal"
-)
-
-func updateTerminalSize(term *terminal.Terminal) {
-	width, height, err := terminal.GetSize(0)
-	if err != nil {
-		return
-	}
-	term.SetSize(width, height)
-}
-
-func skipWS(node *node32) *node32 {
-	for ; node != nil && node.pegRule == ruleWS; node = node.next {
-	}
-	return node
-}
-
-func assertNodeType(node *node32, rule pegRule) {
-	if node.pegRule != rule {
-		panic(fmt.Sprintf("expected %q, found %q", rul3s[rule], rul3s[node.pegRule]))
-	}
-}
-
-type Object interface {
-	String() (string, error)
-	Index(string) (Object, error)
-	Search(acvp.Query) (Object, error)
-	Action(action string, args []string) error
-}
-
-type ServerObjectSet struct {
-	env          *Env
-	name         string
-	searchKeys   map[string][]acvp.Relation
-	resultType   reflect.Type
-	subObjects   map[string]func(*Env, string) (Object, error)
-	canEnumerate bool
-}
-
-func (set ServerObjectSet) String() (string, error) {
-	if !set.canEnumerate {
-		return "[object set " + set.name + "]", nil
-	}
-
-	data := reflect.New(reflect.SliceOf(set.resultType)).Interface()
-	if err := set.env.server.GetPaged(data, "acvp/v1/"+set.name, nil); err != nil {
-		return "", err
-	}
-	ret, err := json.MarshalIndent(data, "", "  ")
-	return string(ret), err
-}
-
-func (set ServerObjectSet) Index(indexStr string) (Object, error) {
-	index, err := strconv.ParseUint(indexStr, 0, 64)
-	if err != nil {
-		return nil, fmt.Errorf("object set indexes must be unsigned integers, trying to parse %q failed: %s", indexStr, err)
-	}
-	return ServerObject{&set, index}, nil
-}
-
-func (set ServerObjectSet) Search(condition acvp.Query) (Object, error) {
-	if set.searchKeys == nil {
-		return nil, errors.New("this object set cannot be searched")
-	}
-
-	for _, conj := range condition {
-	NextCondition:
-		for _, cond := range conj {
-			allowed, ok := set.searchKeys[cond.Param]
-			if !ok {
-				return nil, fmt.Errorf("search key %q not valid for this object set", cond.Param)
-			}
-
-			for _, rel := range allowed {
-				if rel == cond.Relation {
-					continue NextCondition
-				}
-			}
-
-			return nil, fmt.Errorf("search key %q cannot be used with relation %q", cond.Param, cond.Relation.String())
-		}
-	}
-
-	return Search{ServerObjectSet: set, query: condition}, nil
-}
-
-func (set ServerObjectSet) Action(action string, args []string) error {
-	switch action {
-	default:
-		return fmt.Errorf("unknown action %q", action)
-
-	case "new":
-		if len(args) != 0 {
-			return fmt.Errorf("found %d arguments but %q takes none", len(args), action)
-		}
-
-		newContents, err := edit("")
-		if err != nil {
-			return err
-		}
-
-		if strings.TrimSpace(string(newContents)) == "" {
-			io.WriteString(set.env.term, "Resulting file was empty. Ignoring.\n")
-			return nil
-		}
-
-		var result map[string]interface{}
-		if err := set.env.server.Post(&result, "acvp/v1/"+set.name, newContents); err != nil {
-			return err
-		}
-
-		// In case it's a testSession that was just created, poke any access token
-		// into the server's lookup table and the cache.
-		if urlInterface, ok := result["url"]; ok {
-			if url, ok := urlInterface.(string); ok {
-				if tokenInterface, ok := result["accessToken"]; ok {
-					if token, ok := tokenInterface.(string); ok {
-						for strings.HasPrefix(url, "/") {
-							url = url[1:]
-						}
-						set.env.server.PrefixTokens[url] = token
-						if len(set.env.config.SessionTokensCache) > 0 {
-							ioutil.WriteFile(filepath.Join(set.env.config.SessionTokensCache, neturl.PathEscape(url))+".token", []byte(token), 0600)
-						}
-					}
-				}
-			}
-		}
-
-		ret, err := json.MarshalIndent(result, "", "  ")
-		if err != nil {
-			return err
-		}
-		set.env.term.Write(ret)
-		return nil
-	}
-}
-
-type ServerObject struct {
-	set   *ServerObjectSet
-	index uint64
-}
-
-func (obj ServerObject) String() (string, error) {
-	data := reflect.New(obj.set.resultType).Interface()
-	if err := obj.set.env.server.Get(data, "acvp/v1/"+obj.set.name+"/"+strconv.FormatUint(obj.index, 10)); err != nil {
-		return "", err
-	}
-	ret, err := json.MarshalIndent(data, "", "  ")
-	return string(ret), err
-}
-
-func (obj ServerObject) Index(index string) (Object, error) {
-	if obj.set.subObjects == nil {
-		return nil, errors.New("cannot index " + obj.set.name + " objects")
-	}
-	constr, ok := obj.set.subObjects[index]
-	if !ok {
-		return nil, fmt.Errorf("no such subobject %q", index)
-	}
-	return constr(obj.set.env, fmt.Sprintf("%s/%d", obj.set.name, obj.index))
-}
-
-func (ServerObject) Search(condition acvp.Query) (Object, error) {
-	return nil, errors.New("cannot search individual object")
-}
-
-func edit(initialContents string) ([]byte, error) {
-	tmp, err := ioutil.TempFile("", "acvp*.json")
-	if err != nil {
-		return nil, err
-	}
-	path := tmp.Name()
-	defer os.Remove(path)
-
-	_, err = io.WriteString(tmp, initialContents)
-	tmp.Close()
-	if err != nil {
-		return nil, err
-	}
-
-	editor := os.Getenv("EDITOR")
-	if len(editor) == 0 {
-		editor = "vim"
-	}
-
-	cmd := exec.Command(editor, path)
-	cmd.Stdout = os.Stdout
-	cmd.Stdin = os.Stdin
-	cmd.Stderr = os.Stderr
-	if err := cmd.Run(); err != nil {
-		return nil, err
-	}
-
-	return ioutil.ReadFile(path)
-}
-
-func (obj ServerObject) Action(action string, args []string) error {
-	switch action {
-	default:
-		return fmt.Errorf("unknown action %q", action)
-
-	case "edit":
-		if len(args) != 0 {
-			return fmt.Errorf("found %d arguments but %q takes none", len(args), action)
-		}
-
-		contents, err := obj.String()
-		if err != nil {
-			return err
-		}
-
-		newContents, err := edit(contents)
-		if err != nil {
-			return err
-		}
-
-		if trimmed := strings.TrimSpace(string(newContents)); len(trimmed) == 0 || trimmed == strings.TrimSpace(contents) {
-			io.WriteString(obj.set.env.term, "Resulting file was equal or empty. Not updating.\n")
-			return nil
-		}
-
-		var status acvp.RequestStatus
-		if err := obj.set.env.server.Put(&status, "acvp/v1/"+obj.set.name+"/"+strconv.FormatUint(obj.index, 10), newContents); err != nil {
-			return err
-		}
-
-		fmt.Fprintf(obj.set.env.term, "%#v\n", status)
-		return nil
-
-	case "delete":
-		if len(args) != 0 {
-			return fmt.Errorf("found %d arguments but %q takes none", len(args), action)
-		}
-		return obj.set.env.server.Delete("acvp/v1/" + obj.set.name + "/" + strconv.FormatUint(obj.index, 10))
-	}
-}
-
-type Search struct {
-	ServerObjectSet
-	query acvp.Query
-}
-
-func (search Search) String() (string, error) {
-	data := reflect.New(reflect.SliceOf(search.resultType)).Interface()
-	fmt.Printf("Searching for %#v\n", search.query)
-	if err := search.env.server.GetPaged(data, "acvp/v1/"+search.name, search.query); err != nil {
-		return "", err
-	}
-	ret, err := json.MarshalIndent(data, "", "  ")
-	return string(ret), err
-}
-
-func (search Search) Index(_ string) (Object, error) {
-	return nil, errors.New("indexing of search results not supported")
-}
-
-func (search Search) Search(condition acvp.Query) (Object, error) {
-	search.query = append(search.query, condition...)
-	return search, nil
-}
-
-func (Search) Action(_ string, _ []string) error {
-	return errors.New("no actions supported on search objects")
-}
-
-type Algorithms struct {
-	ServerObjectSet
-}
-
-func (algos Algorithms) String() (string, error) {
-	var result struct {
-		Algorithms []map[string]interface{} `json:"algorithms"`
-	}
-	if err := algos.env.server.Get(&result, "acvp/v1/algorithms"); err != nil {
-		return "", err
-	}
-	ret, err := json.MarshalIndent(result.Algorithms, "", "  ")
-	return string(ret), err
-}
-
-type Env struct {
-	line      string
-	variables map[string]Object
-	server    *acvp.Server
-	term      *terminal.Terminal
-	config    Config
-}
-
-func (e *Env) bytes(node *node32) []byte {
-	return []byte(e.line[node.begin:node.end])
-}
-
-func (e *Env) contents(node *node32) string {
-	return e.line[node.begin:node.end]
-}
-
-type stringLiteral struct {
-	env      *Env
-	contents string
-}
-
-func (s stringLiteral) String() (string, error) {
-	return s.contents, nil
-}
-
-func (stringLiteral) Index(_ string) (Object, error) {
-	return nil, errors.New("cannot index strings")
-}
-
-func (stringLiteral) Search(_ acvp.Query) (Object, error) {
-	return nil, errors.New("cannot search strings")
-}
-
-func (s stringLiteral) Action(action string, args []string) error {
-	switch action {
-	default:
-		return fmt.Errorf("action %q not supported on string literals", action)
-
-	case "GET":
-		if len(args) != 0 {
-			return fmt.Errorf("found %d arguments but %q takes none", len(args), action)
-		}
-
-		var results map[string]interface{}
-		if err := s.env.server.Get(&results, s.contents); err != nil {
-			return err
-		}
-		ret, err := json.MarshalIndent(results, "", "  ")
-		if err != nil {
-			return err
-		}
-		s.env.term.Write(ret)
-		return nil
-	}
-}
-
-type results struct {
-	env    *Env
-	prefix string
-}
-
-func (r results) String() (string, error) {
-	var results map[string]interface{}
-	if err := r.env.server.Get(&results, "acvp/v1/"+r.prefix+"/results"); err != nil {
-		return "", err
-	}
-	ret, err := json.MarshalIndent(results, "", "  ")
-	return string(ret), err
-}
-
-func (results) Index(_ string) (Object, error) {
-	return nil, errors.New("cannot index results objects")
-}
-
-func (results) Search(_ acvp.Query) (Object, error) {
-	return nil, errors.New("cannot search results objects")
-}
-
-func (results) Action(_ string, _ []string) error {
-	return errors.New("no actions supported on results objects")
-}
-
-func (e *Env) parseStringLiteral(node *node32) string {
-	assertNodeType(node, ruleStringLiteral)
-	in := e.bytes(node)
-	var buf bytes.Buffer
-	for i := 1; i < len(in)-1; i++ {
-		if in[i] == '\\' {
-			switch in[i+1] {
-			case '\\':
-				buf.WriteByte('\\')
-			case 'n':
-				buf.WriteByte('\n')
-			case '"':
-				buf.WriteByte('"')
-			default:
-				panic("unknown escape")
-			}
-			i++
-			continue
-		}
-		buf.WriteByte(in[i])
-	}
-
-	return buf.String()
-}
-
-func (e *Env) evalExpression(node *node32) (obj Object, err error) {
-	switch node.pegRule {
-	case ruleStringLiteral:
-		return stringLiteral{e, e.parseStringLiteral(node)}, nil
-
-	case ruleVariable:
-		varName := e.contents(node)
-		obj, ok := e.variables[varName]
-		if !ok {
-			return nil, fmt.Errorf("unknown variable %q", varName)
-		}
-		return obj, nil
-
-	case ruleIndexing:
-		node = node.up
-		assertNodeType(node, ruleVariable)
-		varName := e.contents(node)
-		obj, ok := e.variables[varName]
-		if !ok {
-			return nil, fmt.Errorf("unknown variable %q", varName)
-		}
-
-		node = node.next
-		for node != nil {
-			assertNodeType(node, ruleIndex)
-			indexStr := e.contents(node)
-			if obj, err = obj.Index(indexStr); err != nil {
-				return nil, err
-			}
-			node = node.next
-		}
-
-		return obj, nil
-
-	case ruleSearch:
-		node = node.up
-		assertNodeType(node, ruleVariable)
-		varName := e.contents(node)
-		obj, ok := e.variables[varName]
-		if !ok {
-			return nil, fmt.Errorf("unknown variable %q", varName)
-		}
-
-		node = skipWS(node.next)
-		assertNodeType(node, ruleQuery)
-		node = node.up
-
-		var query acvp.Query
-		for node != nil {
-			assertNodeType(node, ruleConjunctions)
-			query = append(query, e.parseConjunction(node.up))
-			node = skipWS(node.next)
-		}
-
-		if len(query) == 0 {
-			return nil, errors.New("cannot have empty query")
-		}
-
-		return obj.Search(query)
-	}
-
-	panic("unhandled")
-}
-
-func (e *Env) evalAction(node *node32) error {
-	assertNodeType(node, ruleExpression)
-	obj, err := e.evalExpression(node.up)
-	if err != nil {
-		return err
-	}
-
-	node = node.next
-	assertNodeType(node, ruleCommand)
-	node = node.up
-	assertNodeType(node, ruleFunction)
-	function := e.contents(node)
-	node = node.next
-
-	var args []string
-	for node != nil {
-		assertNodeType(node, ruleArgs)
-		node = node.up
-		args = append(args, e.parseStringLiteral(node))
-
-		node = skipWS(node.next)
-	}
-
-	return obj.Action(function, args)
-}
-
-func (e *Env) parseConjunction(node *node32) (ret acvp.Conjunction) {
-	for node != nil {
-		assertNodeType(node, ruleConjunction)
-		ret = append(ret, e.parseCondition(node.up))
-
-		node = skipWS(node.next)
-		if node != nil {
-			assertNodeType(node, ruleConjunctions)
-			node = node.up
-		}
-	}
-	return ret
-}
-
-func (e *Env) parseCondition(node *node32) (ret acvp.Condition) {
-	assertNodeType(node, ruleField)
-	ret.Param = e.contents(node)
-	node = skipWS(node.next)
-
-	assertNodeType(node, ruleRelation)
-	switch e.contents(node) {
-	case "==":
-		ret.Relation = acvp.Equals
-	case "!=":
-		ret.Relation = acvp.NotEquals
-	case "contains":
-		ret.Relation = acvp.Contains
-	case "startsWith":
-		ret.Relation = acvp.StartsWith
-	case "endsWith":
-		ret.Relation = acvp.EndsWith
-	default:
-		panic("relation not handled: " + e.contents(node))
-	}
-	node = skipWS(node.next)
-
-	ret.Value = e.parseStringLiteral(node)
-
-	return ret
-}
-
-func runInteractive(server *acvp.Server, config Config) {
-	oldState, err := terminal.MakeRaw(0)
-	if err != nil {
-		panic(err)
-	}
-	defer terminal.Restore(0, oldState)
-	term := terminal.NewTerminal(os.Stdin, "> ")
-
-	resizeChan := make(chan os.Signal)
-	go func() {
-		for _ = range resizeChan {
-			updateTerminalSize(term)
-		}
-	}()
-	signal.Notify(resizeChan, syscall.SIGWINCH)
-
-	env := &Env{variables: make(map[string]Object), server: server, term: term, config: config}
-	env.variables["requests"] = ServerObjectSet{
-		env:          env,
-		name:         "requests",
-		resultType:   reflect.TypeOf(&acvp.RequestStatus{}),
-		canEnumerate: true,
-	}
-	// https://usnistgov.github.io/ACVP/artifacts/draft-fussell-acvp-spec-00.html#rfc.section.11.8
-	env.variables["vendors"] = ServerObjectSet{
-		env:  env,
-		name: "vendors",
-		searchKeys: map[string][]acvp.Relation{
-			// https://usnistgov.github.io/ACVP/artifacts/draft-fussell-acvp-spec-00.html#rfc.section.11.8.1
-			"name":        []acvp.Relation{acvp.Equals, acvp.StartsWith, acvp.EndsWith, acvp.Contains},
-			"website":     []acvp.Relation{acvp.Equals, acvp.StartsWith, acvp.EndsWith, acvp.Contains},
-			"email":       []acvp.Relation{acvp.Equals, acvp.StartsWith, acvp.EndsWith, acvp.Contains},
-			"phoneNumber": []acvp.Relation{acvp.Equals, acvp.StartsWith, acvp.EndsWith, acvp.Contains},
-		},
-		subObjects: map[string]func(*Env, string) (Object, error){
-			"contacts": func(env *Env, prefix string) (Object, error) {
-				return ServerObjectSet{
-					env:          env,
-					name:         prefix + "/contacts",
-					resultType:   reflect.TypeOf(&acvp.Person{}),
-					canEnumerate: true,
-				}, nil
-			},
-			"addresses": func(env *Env, prefix string) (Object, error) {
-				return ServerObjectSet{
-					env:          env,
-					name:         prefix + "/addresses",
-					resultType:   reflect.TypeOf(&acvp.Address{}),
-					canEnumerate: true,
-				}, nil
-			},
-		},
-		resultType: reflect.TypeOf(&acvp.Vendor{}),
-	}
-	// https://usnistgov.github.io/ACVP/artifacts/draft-fussell-acvp-spec-00.html#rfc.section.11.9
-	env.variables["persons"] = ServerObjectSet{
-		env:  env,
-		name: "persons",
-		searchKeys: map[string][]acvp.Relation{
-			// https://usnistgov.github.io/ACVP/artifacts/draft-fussell-acvp-spec-00.html#rfc.section.11.10.1
-			"fullName":    []acvp.Relation{acvp.Equals, acvp.StartsWith, acvp.EndsWith, acvp.Contains},
-			"email":       []acvp.Relation{acvp.Equals, acvp.StartsWith, acvp.EndsWith, acvp.Contains},
-			"phoneNumber": []acvp.Relation{acvp.Equals, acvp.StartsWith, acvp.EndsWith, acvp.Contains},
-			"vendorId":    []acvp.Relation{acvp.Equals, acvp.NotEquals, acvp.LessThan, acvp.LessThanEqual, acvp.GreaterThan, acvp.GreaterThanEqual},
-		},
-		resultType: reflect.TypeOf(&acvp.Person{}),
-	}
-	// https://usnistgov.github.io/ACVP/artifacts/draft-fussell-acvp-spec-00.html#rfc.section.11.11
-	env.variables["modules"] = ServerObjectSet{
-		env:  env,
-		name: "modules",
-		searchKeys: map[string][]acvp.Relation{
-			// https://usnistgov.github.io/ACVP/artifacts/draft-fussell-acvp-spec-00.html#rfc.section.11.10.1
-			"name":        []acvp.Relation{acvp.Equals, acvp.StartsWith, acvp.EndsWith, acvp.Contains},
-			"version":     []acvp.Relation{acvp.Equals, acvp.StartsWith, acvp.EndsWith, acvp.Contains},
-			"website":     []acvp.Relation{acvp.Equals, acvp.StartsWith, acvp.EndsWith, acvp.Contains},
-			"description": []acvp.Relation{acvp.Equals, acvp.StartsWith, acvp.EndsWith, acvp.Contains},
-			"type":        []acvp.Relation{acvp.Equals, acvp.NotEquals},
-			"vendorId":    []acvp.Relation{acvp.Equals, acvp.NotEquals, acvp.LessThan, acvp.LessThanEqual, acvp.GreaterThan, acvp.GreaterThanEqual},
-		},
-		resultType: reflect.TypeOf(&acvp.Module{}),
-	}
-	// https://usnistgov.github.io/ACVP/artifacts/draft-fussell-acvp-spec-00.html#rfc.section.11.12
-	env.variables["oes"] = ServerObjectSet{
-		env:  env,
-		name: "oes",
-		searchKeys: map[string][]acvp.Relation{
-			// https://usnistgov.github.io/ACVP/artifacts/draft-fussell-acvp-spec-00.html#rfc.section.11.12.1
-			"name": []acvp.Relation{acvp.Equals, acvp.StartsWith, acvp.EndsWith, acvp.Contains},
-		},
-		resultType: reflect.TypeOf(&acvp.OperationalEnvironment{}),
-	}
-	// https://usnistgov.github.io/ACVP/artifacts/draft-fussell-acvp-spec-00.html#rfc.section.11.13
-	env.variables["deps"] = ServerObjectSet{
-		env:  env,
-		name: "dependencies",
-		searchKeys: map[string][]acvp.Relation{
-			// https://usnistgov.github.io/ACVP/artifacts/draft-fussell-acvp-spec-00.html#rfc.section.11.12.1
-			"name":        []acvp.Relation{acvp.Equals, acvp.StartsWith, acvp.EndsWith, acvp.Contains},
-			"type":        []acvp.Relation{acvp.Equals, acvp.StartsWith, acvp.EndsWith, acvp.Contains},
-			"description": []acvp.Relation{acvp.Equals, acvp.StartsWith, acvp.EndsWith, acvp.Contains},
-		},
-		resultType: reflect.TypeOf(&acvp.Dependency{}),
-	}
-	// https://usnistgov.github.io/ACVP/artifacts/draft-fussell-acvp-spec-00.html#rfc.section.11.14
-	env.variables["algos"] = Algorithms{
-		ServerObjectSet{
-			env:          env,
-			name:         "algorithms",
-			resultType:   reflect.TypeOf(&acvp.Algorithm{}),
-			canEnumerate: true,
-		},
-	}
-	// https://usnistgov.github.io/ACVP/artifacts/draft-fussell-acvp-spec-00.html#rfc.section.11.15
-	env.variables["sessions"] = ServerObjectSet{
-		env:          env,
-		name:         "testSessions",
-		resultType:   reflect.TypeOf(&acvp.TestSession{}),
-		canEnumerate: true,
-		subObjects: map[string]func(env *Env, prefix string) (Object, error){
-			"results": func(env *Env, prefix string) (Object, error) {
-				return results{env: env, prefix: prefix}, nil
-			},
-		},
-	}
-
-	for {
-		if env.line, err = term.ReadLine(); err != nil {
-			return
-		}
-		if len(env.line) == 0 {
-			continue
-		}
-
-		stmt := Statement{Buffer: env.line, Pretty: true}
-		stmt.Init()
-		if err := stmt.Parse(); err != nil {
-			io.WriteString(term, err.Error())
-			continue
-		}
-
-		node := skipWS(stmt.AST().up)
-		switch node.pegRule {
-		case ruleExpression:
-			obj, err := env.evalExpression(node.up)
-			var repr string
-			if err == nil {
-				repr, err = obj.String()
-			}
-
-			if err != nil {
-				fmt.Fprintf(term, "error while evaluating expression: %s\n", err)
-			} else {
-				io.WriteString(term, repr)
-				io.WriteString(term, "\n")
-			}
-
-		case ruleAction:
-			if err := env.evalAction(node.up); err != nil {
-				io.WriteString(term, err.Error())
-				io.WriteString(term, "\n")
-			}
-
-		default:
-			fmt.Fprintf(term, "internal error parsing input.\n")
-		}
-	}
-}
diff --git a/src/util/fipstools/acvp/acvptool/parser.peg b/src/util/fipstools/acvp/acvptool/parser.peg
deleted file mode 100644
index ca759c8..0000000
--- a/src/util/fipstools/acvp/acvptool/parser.peg
+++ /dev/null
@@ -1,25 +0,0 @@
-package main
-
-type Statement Peg {}
-
-Statement <- WS? (Assignment / Action / Expression) WS? !.
-Assignment <- Variable WS? '=' WS? Expression
-Variable <- [a-zA-Z_][a-zA-Z0-9_]*
-Expression <- (StringLiteral / Indexing / Search / Variable)
-StringLiteral <- '"' QuotedText '"'
-QuotedText <- (EscapedChar / [^\\"])*
-EscapedChar <- '\\' [\\n"]
-Indexing <- Variable ('[' Index ']')+
-Index <- [0-9a-z]+
-Search <- Variable '[' WS? 'where' WS Query ']'
-Action <- Expression '.' Command
-Command <- Function '(' Args? ')'
-Function <- [a-zA-Z]+
-Args <- StringLiteral (WS? ',' WS? Args)
-Query <- Conjunctions (WS? '||' WS? Conjunctions)?
-Conjunctions <- Conjunction (WS? '&&' WS? Conjunctions)?
-Conjunction <- Field WS? Relation WS? StringLiteral
-Field <- [a-z][a-zA-Z0-9]*
-Relation <- ('==' / '!=' / 'contains' / 'startsWith' / 'endsWith')
-
-WS <- [ \t]+
diff --git a/src/util/fipstools/acvp/acvptool/parser.peg.go b/src/util/fipstools/acvp/acvptool/parser.peg.go
deleted file mode 100644
index c80a7dc..0000000
--- a/src/util/fipstools/acvp/acvptool/parser.peg.go
+++ /dev/null
@@ -1,1334 +0,0 @@
-package main
-
-import (
-	"fmt"
-	"math"
-	"sort"
-	"strconv"
-)
-
-const endSymbol rune = 1114112
-
-/* The rule types inferred from the grammar are below. */
-type pegRule uint8
-
-const (
-	ruleUnknown pegRule = iota
-	ruleStatement
-	ruleAssignment
-	ruleVariable
-	ruleExpression
-	ruleStringLiteral
-	ruleQuotedText
-	ruleEscapedChar
-	ruleIndexing
-	ruleIndex
-	ruleSearch
-	ruleAction
-	ruleCommand
-	ruleFunction
-	ruleArgs
-	ruleQuery
-	ruleConjunctions
-	ruleConjunction
-	ruleField
-	ruleRelation
-	ruleWS
-)
-
-var rul3s = [...]string{
-	"Unknown",
-	"Statement",
-	"Assignment",
-	"Variable",
-	"Expression",
-	"StringLiteral",
-	"QuotedText",
-	"EscapedChar",
-	"Indexing",
-	"Index",
-	"Search",
-	"Action",
-	"Command",
-	"Function",
-	"Args",
-	"Query",
-	"Conjunctions",
-	"Conjunction",
-	"Field",
-	"Relation",
-	"WS",
-}
-
-type token32 struct {
-	pegRule
-	begin, end uint32
-}
-
-func (t *token32) String() string {
-	return fmt.Sprintf("\x1B[34m%v\x1B[m %v %v", rul3s[t.pegRule], t.begin, t.end)
-}
-
-type node32 struct {
-	token32
-	up, next *node32
-}
-
-func (node *node32) print(pretty bool, buffer string) {
-	var print func(node *node32, depth int)
-	print = func(node *node32, depth int) {
-		for node != nil {
-			for c := 0; c < depth; c++ {
-				fmt.Printf(" ")
-			}
-			rule := rul3s[node.pegRule]
-			quote := strconv.Quote(string(([]rune(buffer)[node.begin:node.end])))
-			if !pretty {
-				fmt.Printf("%v %v\n", rule, quote)
-			} else {
-				fmt.Printf("\x1B[34m%v\x1B[m %v\n", rule, quote)
-			}
-			if node.up != nil {
-				print(node.up, depth+1)
-			}
-			node = node.next
-		}
-	}
-	print(node, 0)
-}
-
-func (node *node32) Print(buffer string) {
-	node.print(false, buffer)
-}
-
-func (node *node32) PrettyPrint(buffer string) {
-	node.print(true, buffer)
-}
-
-type tokens32 struct {
-	tree []token32
-}
-
-func (t *tokens32) Trim(length uint32) {
-	t.tree = t.tree[:length]
-}
-
-func (t *tokens32) Print() {
-	for _, token := range t.tree {
-		fmt.Println(token.String())
-	}
-}
-
-func (t *tokens32) AST() *node32 {
-	type element struct {
-		node *node32
-		down *element
-	}
-	tokens := t.Tokens()
-	var stack *element
-	for _, token := range tokens {
-		if token.begin == token.end {
-			continue
-		}
-		node := &node32{token32: token}
-		for stack != nil && stack.node.begin >= token.begin && stack.node.end <= token.end {
-			stack.node.next = node.up
-			node.up = stack.node
-			stack = stack.down
-		}
-		stack = &element{node: node, down: stack}
-	}
-	if stack != nil {
-		return stack.node
-	}
-	return nil
-}
-
-func (t *tokens32) PrintSyntaxTree(buffer string) {
-	t.AST().Print(buffer)
-}
-
-func (t *tokens32) PrettyPrintSyntaxTree(buffer string) {
-	t.AST().PrettyPrint(buffer)
-}
-
-func (t *tokens32) Add(rule pegRule, begin, end, index uint32) {
-	if tree := t.tree; int(index) >= len(tree) {
-		expanded := make([]token32, 2*len(tree))
-		copy(expanded, tree)
-		t.tree = expanded
-	}
-	t.tree[index] = token32{
-		pegRule: rule,
-		begin:   begin,
-		end:     end,
-	}
-}
-
-func (t *tokens32) Tokens() []token32 {
-	return t.tree
-}
-
-type Statement struct {
-	Buffer string
-	buffer []rune
-	rules  [21]func() bool
-	parse  func(rule ...int) error
-	reset  func()
-	Pretty bool
-	tokens32
-}
-
-func (p *Statement) Parse(rule ...int) error {
-	return p.parse(rule...)
-}
-
-func (p *Statement) Reset() {
-	p.reset()
-}
-
-type textPosition struct {
-	line, symbol int
-}
-
-type textPositionMap map[int]textPosition
-
-func translatePositions(buffer []rune, positions []int) textPositionMap {
-	length, translations, j, line, symbol := len(positions), make(textPositionMap, len(positions)), 0, 1, 0
-	sort.Ints(positions)
-
-search:
-	for i, c := range buffer {
-		if c == '\n' {
-			line, symbol = line+1, 0
-		} else {
-			symbol++
-		}
-		if i == positions[j] {
-			translations[positions[j]] = textPosition{line, symbol}
-			for j++; j < length; j++ {
-				if i != positions[j] {
-					continue search
-				}
-			}
-			break search
-		}
-	}
-
-	return translations
-}
-
-type parseError struct {
-	p   *Statement
-	max token32
-}
-
-func (e *parseError) Error() string {
-	tokens, error := []token32{e.max}, "\n"
-	positions, p := make([]int, 2*len(tokens)), 0
-	for _, token := range tokens {
-		positions[p], p = int(token.begin), p+1
-		positions[p], p = int(token.end), p+1
-	}
-	translations := translatePositions(e.p.buffer, positions)
-	format := "parse error near %v (line %v symbol %v - line %v symbol %v):\n%v\n"
-	if e.p.Pretty {
-		format = "parse error near \x1B[34m%v\x1B[m (line %v symbol %v - line %v symbol %v):\n%v\n"
-	}
-	for _, token := range tokens {
-		begin, end := int(token.begin), int(token.end)
-		error += fmt.Sprintf(format,
-			rul3s[token.pegRule],
-			translations[begin].line, translations[begin].symbol,
-			translations[end].line, translations[end].symbol,
-			strconv.Quote(string(e.p.buffer[begin:end])))
-	}
-
-	return error
-}
-
-func (p *Statement) PrintSyntaxTree() {
-	if p.Pretty {
-		p.tokens32.PrettyPrintSyntaxTree(p.Buffer)
-	} else {
-		p.tokens32.PrintSyntaxTree(p.Buffer)
-	}
-}
-
-func (p *Statement) Init() {
-	var (
-		max                  token32
-		position, tokenIndex uint32
-		buffer               []rune
-	)
-	p.reset = func() {
-		max = token32{}
-		position, tokenIndex = 0, 0
-
-		p.buffer = []rune(p.Buffer)
-		if len(p.buffer) == 0 || p.buffer[len(p.buffer)-1] != endSymbol {
-			p.buffer = append(p.buffer, endSymbol)
-		}
-		buffer = p.buffer
-	}
-	p.reset()
-
-	_rules := p.rules
-	tree := tokens32{tree: make([]token32, math.MaxInt16)}
-	p.parse = func(rule ...int) error {
-		r := 1
-		if len(rule) > 0 {
-			r = rule[0]
-		}
-		matches := p.rules[r]()
-		p.tokens32 = tree
-		if matches {
-			p.Trim(tokenIndex)
-			return nil
-		}
-		return &parseError{p, max}
-	}
-
-	add := func(rule pegRule, begin uint32) {
-		tree.Add(rule, begin, position, tokenIndex)
-		tokenIndex++
-		if begin != position && position > max.end {
-			max = token32{rule, begin, position}
-		}
-	}
-
-	matchDot := func() bool {
-		if buffer[position] != endSymbol {
-			position++
-			return true
-		}
-		return false
-	}
-
-	/*matchChar := func(c byte) bool {
-		if buffer[position] == c {
-			position++
-			return true
-		}
-		return false
-	}*/
-
-	/*matchRange := func(lower byte, upper byte) bool {
-		if c := buffer[position]; c >= lower && c <= upper {
-			position++
-			return true
-		}
-		return false
-	}*/
-
-	_rules = [...]func() bool{
-		nil,
-		/* 0 Statement <- <(WS? (Assignment / Action / Expression) WS? !.)> */
-		func() bool {
-			position0, tokenIndex0 := position, tokenIndex
-			{
-				position1 := position
-				{
-					position2, tokenIndex2 := position, tokenIndex
-					if !_rules[ruleWS]() {
-						goto l2
-					}
-					goto l3
-				l2:
-					position, tokenIndex = position2, tokenIndex2
-				}
-			l3:
-				{
-					position4, tokenIndex4 := position, tokenIndex
-					if !_rules[ruleAssignment]() {
-						goto l5
-					}
-					goto l4
-				l5:
-					position, tokenIndex = position4, tokenIndex4
-					if !_rules[ruleAction]() {
-						goto l6
-					}
-					goto l4
-				l6:
-					position, tokenIndex = position4, tokenIndex4
-					if !_rules[ruleExpression]() {
-						goto l0
-					}
-				}
-			l4:
-				{
-					position7, tokenIndex7 := position, tokenIndex
-					if !_rules[ruleWS]() {
-						goto l7
-					}
-					goto l8
-				l7:
-					position, tokenIndex = position7, tokenIndex7
-				}
-			l8:
-				{
-					position9, tokenIndex9 := position, tokenIndex
-					if !matchDot() {
-						goto l9
-					}
-					goto l0
-				l9:
-					position, tokenIndex = position9, tokenIndex9
-				}
-				add(ruleStatement, position1)
-			}
-			return true
-		l0:
-			position, tokenIndex = position0, tokenIndex0
-			return false
-		},
-		/* 1 Assignment <- <(Variable WS? '=' WS? Expression)> */
-		func() bool {
-			position10, tokenIndex10 := position, tokenIndex
-			{
-				position11 := position
-				if !_rules[ruleVariable]() {
-					goto l10
-				}
-				{
-					position12, tokenIndex12 := position, tokenIndex
-					if !_rules[ruleWS]() {
-						goto l12
-					}
-					goto l13
-				l12:
-					position, tokenIndex = position12, tokenIndex12
-				}
-			l13:
-				if buffer[position] != rune('=') {
-					goto l10
-				}
-				position++
-				{
-					position14, tokenIndex14 := position, tokenIndex
-					if !_rules[ruleWS]() {
-						goto l14
-					}
-					goto l15
-				l14:
-					position, tokenIndex = position14, tokenIndex14
-				}
-			l15:
-				if !_rules[ruleExpression]() {
-					goto l10
-				}
-				add(ruleAssignment, position11)
-			}
-			return true
-		l10:
-			position, tokenIndex = position10, tokenIndex10
-			return false
-		},
-		/* 2 Variable <- <(([a-z] / [A-Z] / '_') ([a-z] / [A-Z] / [0-9] / '_')*)> */
-		func() bool {
-			position16, tokenIndex16 := position, tokenIndex
-			{
-				position17 := position
-				{
-					position18, tokenIndex18 := position, tokenIndex
-					if c := buffer[position]; c < rune('a') || c > rune('z') {
-						goto l19
-					}
-					position++
-					goto l18
-				l19:
-					position, tokenIndex = position18, tokenIndex18
-					if c := buffer[position]; c < rune('A') || c > rune('Z') {
-						goto l20
-					}
-					position++
-					goto l18
-				l20:
-					position, tokenIndex = position18, tokenIndex18
-					if buffer[position] != rune('_') {
-						goto l16
-					}
-					position++
-				}
-			l18:
-			l21:
-				{
-					position22, tokenIndex22 := position, tokenIndex
-					{
-						position23, tokenIndex23 := position, tokenIndex
-						if c := buffer[position]; c < rune('a') || c > rune('z') {
-							goto l24
-						}
-						position++
-						goto l23
-					l24:
-						position, tokenIndex = position23, tokenIndex23
-						if c := buffer[position]; c < rune('A') || c > rune('Z') {
-							goto l25
-						}
-						position++
-						goto l23
-					l25:
-						position, tokenIndex = position23, tokenIndex23
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l26
-						}
-						position++
-						goto l23
-					l26:
-						position, tokenIndex = position23, tokenIndex23
-						if buffer[position] != rune('_') {
-							goto l22
-						}
-						position++
-					}
-				l23:
-					goto l21
-				l22:
-					position, tokenIndex = position22, tokenIndex22
-				}
-				add(ruleVariable, position17)
-			}
-			return true
-		l16:
-			position, tokenIndex = position16, tokenIndex16
-			return false
-		},
-		/* 3 Expression <- <(StringLiteral / Indexing / Search / Variable)> */
-		func() bool {
-			position27, tokenIndex27 := position, tokenIndex
-			{
-				position28 := position
-				{
-					position29, tokenIndex29 := position, tokenIndex
-					if !_rules[ruleStringLiteral]() {
-						goto l30
-					}
-					goto l29
-				l30:
-					position, tokenIndex = position29, tokenIndex29
-					if !_rules[ruleIndexing]() {
-						goto l31
-					}
-					goto l29
-				l31:
-					position, tokenIndex = position29, tokenIndex29
-					if !_rules[ruleSearch]() {
-						goto l32
-					}
-					goto l29
-				l32:
-					position, tokenIndex = position29, tokenIndex29
-					if !_rules[ruleVariable]() {
-						goto l27
-					}
-				}
-			l29:
-				add(ruleExpression, position28)
-			}
-			return true
-		l27:
-			position, tokenIndex = position27, tokenIndex27
-			return false
-		},
-		/* 4 StringLiteral <- <('"' QuotedText '"')> */
-		func() bool {
-			position33, tokenIndex33 := position, tokenIndex
-			{
-				position34 := position
-				if buffer[position] != rune('"') {
-					goto l33
-				}
-				position++
-				if !_rules[ruleQuotedText]() {
-					goto l33
-				}
-				if buffer[position] != rune('"') {
-					goto l33
-				}
-				position++
-				add(ruleStringLiteral, position34)
-			}
-			return true
-		l33:
-			position, tokenIndex = position33, tokenIndex33
-			return false
-		},
-		/* 5 QuotedText <- <(EscapedChar / (!('\\' / '"') .))*> */
-		func() bool {
-			{
-				position36 := position
-			l37:
-				{
-					position38, tokenIndex38 := position, tokenIndex
-					{
-						position39, tokenIndex39 := position, tokenIndex
-						if !_rules[ruleEscapedChar]() {
-							goto l40
-						}
-						goto l39
-					l40:
-						position, tokenIndex = position39, tokenIndex39
-						{
-							position41, tokenIndex41 := position, tokenIndex
-							{
-								position42, tokenIndex42 := position, tokenIndex
-								if buffer[position] != rune('\\') {
-									goto l43
-								}
-								position++
-								goto l42
-							l43:
-								position, tokenIndex = position42, tokenIndex42
-								if buffer[position] != rune('"') {
-									goto l41
-								}
-								position++
-							}
-						l42:
-							goto l38
-						l41:
-							position, tokenIndex = position41, tokenIndex41
-						}
-						if !matchDot() {
-							goto l38
-						}
-					}
-				l39:
-					goto l37
-				l38:
-					position, tokenIndex = position38, tokenIndex38
-				}
-				add(ruleQuotedText, position36)
-			}
-			return true
-		},
-		/* 6 EscapedChar <- <('\\' ('\\' / 'n' / '"'))> */
-		func() bool {
-			position44, tokenIndex44 := position, tokenIndex
-			{
-				position45 := position
-				if buffer[position] != rune('\\') {
-					goto l44
-				}
-				position++
-				{
-					position46, tokenIndex46 := position, tokenIndex
-					if buffer[position] != rune('\\') {
-						goto l47
-					}
-					position++
-					goto l46
-				l47:
-					position, tokenIndex = position46, tokenIndex46
-					if buffer[position] != rune('n') {
-						goto l48
-					}
-					position++
-					goto l46
-				l48:
-					position, tokenIndex = position46, tokenIndex46
-					if buffer[position] != rune('"') {
-						goto l44
-					}
-					position++
-				}
-			l46:
-				add(ruleEscapedChar, position45)
-			}
-			return true
-		l44:
-			position, tokenIndex = position44, tokenIndex44
-			return false
-		},
-		/* 7 Indexing <- <(Variable ('[' Index ']')+)> */
-		func() bool {
-			position49, tokenIndex49 := position, tokenIndex
-			{
-				position50 := position
-				if !_rules[ruleVariable]() {
-					goto l49
-				}
-				if buffer[position] != rune('[') {
-					goto l49
-				}
-				position++
-				if !_rules[ruleIndex]() {
-					goto l49
-				}
-				if buffer[position] != rune(']') {
-					goto l49
-				}
-				position++
-			l51:
-				{
-					position52, tokenIndex52 := position, tokenIndex
-					if buffer[position] != rune('[') {
-						goto l52
-					}
-					position++
-					if !_rules[ruleIndex]() {
-						goto l52
-					}
-					if buffer[position] != rune(']') {
-						goto l52
-					}
-					position++
-					goto l51
-				l52:
-					position, tokenIndex = position52, tokenIndex52
-				}
-				add(ruleIndexing, position50)
-			}
-			return true
-		l49:
-			position, tokenIndex = position49, tokenIndex49
-			return false
-		},
-		/* 8 Index <- <([0-9] / [a-z])+> */
-		func() bool {
-			position53, tokenIndex53 := position, tokenIndex
-			{
-				position54 := position
-				{
-					position57, tokenIndex57 := position, tokenIndex
-					if c := buffer[position]; c < rune('0') || c > rune('9') {
-						goto l58
-					}
-					position++
-					goto l57
-				l58:
-					position, tokenIndex = position57, tokenIndex57
-					if c := buffer[position]; c < rune('a') || c > rune('z') {
-						goto l53
-					}
-					position++
-				}
-			l57:
-			l55:
-				{
-					position56, tokenIndex56 := position, tokenIndex
-					{
-						position59, tokenIndex59 := position, tokenIndex
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l60
-						}
-						position++
-						goto l59
-					l60:
-						position, tokenIndex = position59, tokenIndex59
-						if c := buffer[position]; c < rune('a') || c > rune('z') {
-							goto l56
-						}
-						position++
-					}
-				l59:
-					goto l55
-				l56:
-					position, tokenIndex = position56, tokenIndex56
-				}
-				add(ruleIndex, position54)
-			}
-			return true
-		l53:
-			position, tokenIndex = position53, tokenIndex53
-			return false
-		},
-		/* 9 Search <- <(Variable '[' WS? ('w' 'h' 'e' 'r' 'e') WS Query ']')> */
-		func() bool {
-			position61, tokenIndex61 := position, tokenIndex
-			{
-				position62 := position
-				if !_rules[ruleVariable]() {
-					goto l61
-				}
-				if buffer[position] != rune('[') {
-					goto l61
-				}
-				position++
-				{
-					position63, tokenIndex63 := position, tokenIndex
-					if !_rules[ruleWS]() {
-						goto l63
-					}
-					goto l64
-				l63:
-					position, tokenIndex = position63, tokenIndex63
-				}
-			l64:
-				if buffer[position] != rune('w') {
-					goto l61
-				}
-				position++
-				if buffer[position] != rune('h') {
-					goto l61
-				}
-				position++
-				if buffer[position] != rune('e') {
-					goto l61
-				}
-				position++
-				if buffer[position] != rune('r') {
-					goto l61
-				}
-				position++
-				if buffer[position] != rune('e') {
-					goto l61
-				}
-				position++
-				if !_rules[ruleWS]() {
-					goto l61
-				}
-				if !_rules[ruleQuery]() {
-					goto l61
-				}
-				if buffer[position] != rune(']') {
-					goto l61
-				}
-				position++
-				add(ruleSearch, position62)
-			}
-			return true
-		l61:
-			position, tokenIndex = position61, tokenIndex61
-			return false
-		},
-		/* 10 Action <- <(Expression '.' Command)> */
-		func() bool {
-			position65, tokenIndex65 := position, tokenIndex
-			{
-				position66 := position
-				if !_rules[ruleExpression]() {
-					goto l65
-				}
-				if buffer[position] != rune('.') {
-					goto l65
-				}
-				position++
-				if !_rules[ruleCommand]() {
-					goto l65
-				}
-				add(ruleAction, position66)
-			}
-			return true
-		l65:
-			position, tokenIndex = position65, tokenIndex65
-			return false
-		},
-		/* 11 Command <- <(Function '(' Args? ')')> */
-		func() bool {
-			position67, tokenIndex67 := position, tokenIndex
-			{
-				position68 := position
-				if !_rules[ruleFunction]() {
-					goto l67
-				}
-				if buffer[position] != rune('(') {
-					goto l67
-				}
-				position++
-				{
-					position69, tokenIndex69 := position, tokenIndex
-					if !_rules[ruleArgs]() {
-						goto l69
-					}
-					goto l70
-				l69:
-					position, tokenIndex = position69, tokenIndex69
-				}
-			l70:
-				if buffer[position] != rune(')') {
-					goto l67
-				}
-				position++
-				add(ruleCommand, position68)
-			}
-			return true
-		l67:
-			position, tokenIndex = position67, tokenIndex67
-			return false
-		},
-		/* 12 Function <- <([a-z] / [A-Z])+> */
-		func() bool {
-			position71, tokenIndex71 := position, tokenIndex
-			{
-				position72 := position
-				{
-					position75, tokenIndex75 := position, tokenIndex
-					if c := buffer[position]; c < rune('a') || c > rune('z') {
-						goto l76
-					}
-					position++
-					goto l75
-				l76:
-					position, tokenIndex = position75, tokenIndex75
-					if c := buffer[position]; c < rune('A') || c > rune('Z') {
-						goto l71
-					}
-					position++
-				}
-			l75:
-			l73:
-				{
-					position74, tokenIndex74 := position, tokenIndex
-					{
-						position77, tokenIndex77 := position, tokenIndex
-						if c := buffer[position]; c < rune('a') || c > rune('z') {
-							goto l78
-						}
-						position++
-						goto l77
-					l78:
-						position, tokenIndex = position77, tokenIndex77
-						if c := buffer[position]; c < rune('A') || c > rune('Z') {
-							goto l74
-						}
-						position++
-					}
-				l77:
-					goto l73
-				l74:
-					position, tokenIndex = position74, tokenIndex74
-				}
-				add(ruleFunction, position72)
-			}
-			return true
-		l71:
-			position, tokenIndex = position71, tokenIndex71
-			return false
-		},
-		/* 13 Args <- <(StringLiteral (WS? ',' WS? Args))> */
-		func() bool {
-			position79, tokenIndex79 := position, tokenIndex
-			{
-				position80 := position
-				if !_rules[ruleStringLiteral]() {
-					goto l79
-				}
-				{
-					position81, tokenIndex81 := position, tokenIndex
-					if !_rules[ruleWS]() {
-						goto l81
-					}
-					goto l82
-				l81:
-					position, tokenIndex = position81, tokenIndex81
-				}
-			l82:
-				if buffer[position] != rune(',') {
-					goto l79
-				}
-				position++
-				{
-					position83, tokenIndex83 := position, tokenIndex
-					if !_rules[ruleWS]() {
-						goto l83
-					}
-					goto l84
-				l83:
-					position, tokenIndex = position83, tokenIndex83
-				}
-			l84:
-				if !_rules[ruleArgs]() {
-					goto l79
-				}
-				add(ruleArgs, position80)
-			}
-			return true
-		l79:
-			position, tokenIndex = position79, tokenIndex79
-			return false
-		},
-		/* 14 Query <- <(Conjunctions (WS? ('|' '|') WS? Conjunctions)?)> */
-		func() bool {
-			position85, tokenIndex85 := position, tokenIndex
-			{
-				position86 := position
-				if !_rules[ruleConjunctions]() {
-					goto l85
-				}
-				{
-					position87, tokenIndex87 := position, tokenIndex
-					{
-						position89, tokenIndex89 := position, tokenIndex
-						if !_rules[ruleWS]() {
-							goto l89
-						}
-						goto l90
-					l89:
-						position, tokenIndex = position89, tokenIndex89
-					}
-				l90:
-					if buffer[position] != rune('|') {
-						goto l87
-					}
-					position++
-					if buffer[position] != rune('|') {
-						goto l87
-					}
-					position++
-					{
-						position91, tokenIndex91 := position, tokenIndex
-						if !_rules[ruleWS]() {
-							goto l91
-						}
-						goto l92
-					l91:
-						position, tokenIndex = position91, tokenIndex91
-					}
-				l92:
-					if !_rules[ruleConjunctions]() {
-						goto l87
-					}
-					goto l88
-				l87:
-					position, tokenIndex = position87, tokenIndex87
-				}
-			l88:
-				add(ruleQuery, position86)
-			}
-			return true
-		l85:
-			position, tokenIndex = position85, tokenIndex85
-			return false
-		},
-		/* 15 Conjunctions <- <(Conjunction (WS? ('&' '&') WS? Conjunctions)?)> */
-		func() bool {
-			position93, tokenIndex93 := position, tokenIndex
-			{
-				position94 := position
-				if !_rules[ruleConjunction]() {
-					goto l93
-				}
-				{
-					position95, tokenIndex95 := position, tokenIndex
-					{
-						position97, tokenIndex97 := position, tokenIndex
-						if !_rules[ruleWS]() {
-							goto l97
-						}
-						goto l98
-					l97:
-						position, tokenIndex = position97, tokenIndex97
-					}
-				l98:
-					if buffer[position] != rune('&') {
-						goto l95
-					}
-					position++
-					if buffer[position] != rune('&') {
-						goto l95
-					}
-					position++
-					{
-						position99, tokenIndex99 := position, tokenIndex
-						if !_rules[ruleWS]() {
-							goto l99
-						}
-						goto l100
-					l99:
-						position, tokenIndex = position99, tokenIndex99
-					}
-				l100:
-					if !_rules[ruleConjunctions]() {
-						goto l95
-					}
-					goto l96
-				l95:
-					position, tokenIndex = position95, tokenIndex95
-				}
-			l96:
-				add(ruleConjunctions, position94)
-			}
-			return true
-		l93:
-			position, tokenIndex = position93, tokenIndex93
-			return false
-		},
-		/* 16 Conjunction <- <(Field WS? Relation WS? StringLiteral)> */
-		func() bool {
-			position101, tokenIndex101 := position, tokenIndex
-			{
-				position102 := position
-				if !_rules[ruleField]() {
-					goto l101
-				}
-				{
-					position103, tokenIndex103 := position, tokenIndex
-					if !_rules[ruleWS]() {
-						goto l103
-					}
-					goto l104
-				l103:
-					position, tokenIndex = position103, tokenIndex103
-				}
-			l104:
-				if !_rules[ruleRelation]() {
-					goto l101
-				}
-				{
-					position105, tokenIndex105 := position, tokenIndex
-					if !_rules[ruleWS]() {
-						goto l105
-					}
-					goto l106
-				l105:
-					position, tokenIndex = position105, tokenIndex105
-				}
-			l106:
-				if !_rules[ruleStringLiteral]() {
-					goto l101
-				}
-				add(ruleConjunction, position102)
-			}
-			return true
-		l101:
-			position, tokenIndex = position101, tokenIndex101
-			return false
-		},
-		/* 17 Field <- <([a-z] ([a-z] / [A-Z] / [0-9])*)> */
-		func() bool {
-			position107, tokenIndex107 := position, tokenIndex
-			{
-				position108 := position
-				if c := buffer[position]; c < rune('a') || c > rune('z') {
-					goto l107
-				}
-				position++
-			l109:
-				{
-					position110, tokenIndex110 := position, tokenIndex
-					{
-						position111, tokenIndex111 := position, tokenIndex
-						if c := buffer[position]; c < rune('a') || c > rune('z') {
-							goto l112
-						}
-						position++
-						goto l111
-					l112:
-						position, tokenIndex = position111, tokenIndex111
-						if c := buffer[position]; c < rune('A') || c > rune('Z') {
-							goto l113
-						}
-						position++
-						goto l111
-					l113:
-						position, tokenIndex = position111, tokenIndex111
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l110
-						}
-						position++
-					}
-				l111:
-					goto l109
-				l110:
-					position, tokenIndex = position110, tokenIndex110
-				}
-				add(ruleField, position108)
-			}
-			return true
-		l107:
-			position, tokenIndex = position107, tokenIndex107
-			return false
-		},
-		/* 18 Relation <- <(('=' '=') / ('!' '=') / ('c' 'o' 'n' 't' 'a' 'i' 'n' 's') / ('s' 't' 'a' 'r' 't' 's' 'W' 'i' 't' 'h') / ('e' 'n' 'd' 's' 'W' 'i' 't' 'h'))> */
-		func() bool {
-			position114, tokenIndex114 := position, tokenIndex
-			{
-				position115 := position
-				{
-					position116, tokenIndex116 := position, tokenIndex
-					if buffer[position] != rune('=') {
-						goto l117
-					}
-					position++
-					if buffer[position] != rune('=') {
-						goto l117
-					}
-					position++
-					goto l116
-				l117:
-					position, tokenIndex = position116, tokenIndex116
-					if buffer[position] != rune('!') {
-						goto l118
-					}
-					position++
-					if buffer[position] != rune('=') {
-						goto l118
-					}
-					position++
-					goto l116
-				l118:
-					position, tokenIndex = position116, tokenIndex116
-					if buffer[position] != rune('c') {
-						goto l119
-					}
-					position++
-					if buffer[position] != rune('o') {
-						goto l119
-					}
-					position++
-					if buffer[position] != rune('n') {
-						goto l119
-					}
-					position++
-					if buffer[position] != rune('t') {
-						goto l119
-					}
-					position++
-					if buffer[position] != rune('a') {
-						goto l119
-					}
-					position++
-					if buffer[position] != rune('i') {
-						goto l119
-					}
-					position++
-					if buffer[position] != rune('n') {
-						goto l119
-					}
-					position++
-					if buffer[position] != rune('s') {
-						goto l119
-					}
-					position++
-					goto l116
-				l119:
-					position, tokenIndex = position116, tokenIndex116
-					if buffer[position] != rune('s') {
-						goto l120
-					}
-					position++
-					if buffer[position] != rune('t') {
-						goto l120
-					}
-					position++
-					if buffer[position] != rune('a') {
-						goto l120
-					}
-					position++
-					if buffer[position] != rune('r') {
-						goto l120
-					}
-					position++
-					if buffer[position] != rune('t') {
-						goto l120
-					}
-					position++
-					if buffer[position] != rune('s') {
-						goto l120
-					}
-					position++
-					if buffer[position] != rune('W') {
-						goto l120
-					}
-					position++
-					if buffer[position] != rune('i') {
-						goto l120
-					}
-					position++
-					if buffer[position] != rune('t') {
-						goto l120
-					}
-					position++
-					if buffer[position] != rune('h') {
-						goto l120
-					}
-					position++
-					goto l116
-				l120:
-					position, tokenIndex = position116, tokenIndex116
-					if buffer[position] != rune('e') {
-						goto l114
-					}
-					position++
-					if buffer[position] != rune('n') {
-						goto l114
-					}
-					position++
-					if buffer[position] != rune('d') {
-						goto l114
-					}
-					position++
-					if buffer[position] != rune('s') {
-						goto l114
-					}
-					position++
-					if buffer[position] != rune('W') {
-						goto l114
-					}
-					position++
-					if buffer[position] != rune('i') {
-						goto l114
-					}
-					position++
-					if buffer[position] != rune('t') {
-						goto l114
-					}
-					position++
-					if buffer[position] != rune('h') {
-						goto l114
-					}
-					position++
-				}
-			l116:
-				add(ruleRelation, position115)
-			}
-			return true
-		l114:
-			position, tokenIndex = position114, tokenIndex114
-			return false
-		},
-		/* 19 WS <- <(' ' / '\t')+> */
-		func() bool {
-			position121, tokenIndex121 := position, tokenIndex
-			{
-				position122 := position
-				{
-					position125, tokenIndex125 := position, tokenIndex
-					if buffer[position] != rune(' ') {
-						goto l126
-					}
-					position++
-					goto l125
-				l126:
-					position, tokenIndex = position125, tokenIndex125
-					if buffer[position] != rune('\t') {
-						goto l121
-					}
-					position++
-				}
-			l125:
-			l123:
-				{
-					position124, tokenIndex124 := position, tokenIndex
-					{
-						position127, tokenIndex127 := position, tokenIndex
-						if buffer[position] != rune(' ') {
-							goto l128
-						}
-						position++
-						goto l127
-					l128:
-						position, tokenIndex = position127, tokenIndex127
-						if buffer[position] != rune('\t') {
-							goto l124
-						}
-						position++
-					}
-				l127:
-					goto l123
-				l124:
-					position, tokenIndex = position124, tokenIndex124
-				}
-				add(ruleWS, position122)
-			}
-			return true
-		l121:
-			position, tokenIndex = position121, tokenIndex121
-			return false
-		},
-	}
-	p.rules = _rules
-}
diff --git a/src/util/fipstools/acvp/acvptool/subprocess/block.go b/src/util/fipstools/acvp/acvptool/subprocess/block.go
deleted file mode 100644
index a5ed2cb..0000000
--- a/src/util/fipstools/acvp/acvptool/subprocess/block.go
+++ /dev/null
@@ -1,252 +0,0 @@
-package subprocess
-
-import (
-	"encoding/hex"
-	"encoding/json"
-	"fmt"
-)
-
-// blockCipher implements an ACVP algorithm by making requests to the subprocess
-// to encrypt and decrypt with a block cipher.
-type blockCipher struct {
-	algo      string
-	blockSize int
-	hasIV     bool
-	m         *Subprocess
-}
-
-type blockCipherVectorSet struct {
-	Groups []blockCipherTestGroup `json:"testGroups"`
-}
-
-type blockCipherTestGroup struct {
-	ID        uint64 `json:"tgId"`
-	Type      string `json:"testType"`
-	Direction string `json:"direction"`
-	KeyBits   int    `json:"keylen"`
-	Tests     []struct {
-		ID            uint64 `json:"tcId"`
-		PlaintextHex  string `json:"pt"`
-		CiphertextHex string `json:"ct"`
-		IVHex         string `json:"iv"`
-		KeyHex        string `json:"key"`
-	} `json:"tests"`
-}
-
-type blockCipherTestGroupResponse struct {
-	ID    uint64                    `json:"tgId"`
-	Tests []blockCipherTestResponse `json:"tests"`
-}
-
-type blockCipherTestResponse struct {
-	ID            uint64                 `json:"tcId"`
-	CiphertextHex string                 `json:"ct,omitempty"`
-	PlaintextHex  string                 `json:"pt,omitempty"`
-	MCTResults    []blockCipherMCTResult `json:"resultsArray,omitempty"`
-}
-
-type blockCipherMCTResult struct {
-	KeyHex        string `json:"key"`
-	PlaintextHex  string `json:"pt"`
-	CiphertextHex string `json:"ct"`
-	IVHex         string `json:"iv,omitempty"`
-}
-
-func (b *blockCipher) Process(vectorSet []byte) (interface{}, error) {
-	var parsed blockCipherVectorSet
-	if err := json.Unmarshal(vectorSet, &parsed); err != nil {
-		return nil, err
-	}
-
-	var ret []blockCipherTestGroupResponse
-	// See
-	// http://usnistgov.github.io/ACVP/artifacts/draft-celi-acvp-block-ciph-00.html#rfc.section.5.2
-	// for details about the tests.
-	for _, group := range parsed.Groups {
-		response := blockCipherTestGroupResponse{
-			ID: group.ID,
-		}
-
-		var encrypt bool
-		switch group.Direction {
-		case "encrypt":
-			encrypt = true
-		case "decrypt":
-			encrypt = false
-		default:
-			return nil, fmt.Errorf("test group %d has unknown direction %q", group.ID, group.Direction)
-		}
-
-		op := b.algo + "/encrypt"
-		if !encrypt {
-			op = b.algo + "/decrypt"
-		}
-
-		var mct bool
-		switch group.Type {
-		case "AFT":
-			mct = false
-		case "MCT":
-			mct = true
-		default:
-			return nil, fmt.Errorf("test group %d has unknown type %q", group.ID, group.Type)
-		}
-
-		if group.KeyBits%8 != 0 {
-			return nil, fmt.Errorf("test group %d contains non-byte-multiple key length %d", group.ID, group.KeyBits)
-		}
-		keyBytes := group.KeyBits / 8
-
-		for _, test := range group.Tests {
-			if len(test.KeyHex) != keyBytes*2 {
-				return nil, fmt.Errorf("test case %d/%d contains key %q of length %d, but expected %d-bit key", group.ID, test.ID, test.KeyHex, len(test.KeyHex), group.KeyBits)
-			}
-
-			key, err := hex.DecodeString(test.KeyHex)
-			if err != nil {
-				return nil, fmt.Errorf("failed to decode hex in test case %d/%d: %s", group.ID, test.ID, err)
-			}
-
-			var inputHex string
-			if encrypt {
-				inputHex = test.PlaintextHex
-			} else {
-				inputHex = test.CiphertextHex
-			}
-
-			input, err := hex.DecodeString(inputHex)
-			if err != nil {
-				return nil, fmt.Errorf("failed to decode hex in test case %d/%d: %s", group.ID, test.ID, err)
-			}
-
-			if len(input)%b.blockSize != 0 {
-				return nil, fmt.Errorf("test case %d/%d has input of length %d, but expected multiple of %d", group.ID, test.ID, len(input), b.blockSize)
-			}
-
-			var iv []byte
-			if b.hasIV {
-				if iv, err = hex.DecodeString(test.IVHex); err != nil {
-					return nil, fmt.Errorf("failed to decode hex in test case %d/%d: %s", group.ID, test.ID, err)
-				}
-				if len(iv) != b.blockSize {
-					return nil, fmt.Errorf("test case %d/%d has IV of length %d, but expected %d", group.ID, test.ID, len(iv), b.blockSize)
-				}
-			}
-
-			testResp := blockCipherTestResponse{ID: test.ID}
-			if !mct {
-				var result [][]byte
-				var err error
-
-				if b.hasIV {
-					result, err = b.m.transact(op, 1, key, input, iv)
-				} else {
-					result, err = b.m.transact(op, 1, key, input)
-				}
-				if err != nil {
-					panic("block operation failed: " + err.Error())
-				}
-
-				if encrypt {
-					testResp.CiphertextHex = hex.EncodeToString(result[0])
-				} else {
-					testResp.PlaintextHex = hex.EncodeToString(result[0])
-				}
-			} else {
-				for i := 0; i < 100; i++ {
-					var iteration blockCipherMCTResult
-					iteration.KeyHex = hex.EncodeToString(key)
-					if encrypt {
-						iteration.PlaintextHex = hex.EncodeToString(input)
-					} else {
-						iteration.CiphertextHex = hex.EncodeToString(input)
-					}
-
-					var result, prevResult []byte
-					if !b.hasIV {
-						for j := 0; j < 1000; j++ {
-							prevResult = input
-							result, err := b.m.transact(op, 1, key, input)
-							if err != nil {
-								panic("block operation failed")
-							}
-							input = result[0]
-						}
-						result = input
-					} else {
-						iteration.IVHex = hex.EncodeToString(iv)
-
-						var prevInput []byte
-						for j := 0; j < 1000; j++ {
-							prevResult = result
-							if j > 0 {
-								if encrypt {
-									iv = result
-								} else {
-									iv = prevInput
-								}
-							}
-
-							results, err := b.m.transact(op, 1, key, input, iv)
-							if err != nil {
-								panic("block operation failed")
-							}
-							result = results[0]
-
-							prevInput = input
-							if j == 0 {
-								input = iv
-							} else {
-								input = prevResult
-							}
-						}
-					}
-
-					if encrypt {
-						iteration.CiphertextHex = hex.EncodeToString(result)
-					} else {
-						iteration.PlaintextHex = hex.EncodeToString(result)
-					}
-
-					switch keyBytes {
-					case 16:
-						for i := range key {
-							key[i] ^= result[i]
-						}
-					case 24:
-						for i := 0; i < 8; i++ {
-							key[i] ^= prevResult[i+8]
-						}
-						for i := range result {
-							key[i+8] ^= result[i]
-						}
-					case 32:
-						for i, b := range prevResult {
-							key[i] ^= b
-						}
-						for i, b := range result {
-							key[i+16] ^= b
-						}
-					default:
-						panic("unhandled key length")
-					}
-
-					if !b.hasIV {
-						input = result
-					} else {
-						iv = result
-						input = prevResult
-					}
-
-					testResp.MCTResults = append(testResp.MCTResults, iteration)
-				}
-			}
-
-			response.Tests = append(response.Tests, testResp)
-		}
-
-		ret = append(ret, response)
-	}
-
-	return ret, nil
-}
diff --git a/src/util/fipstools/acvp/acvptool/subprocess/hash.go b/src/util/fipstools/acvp/acvptool/subprocess/hash.go
deleted file mode 100644
index 7be3162..0000000
--- a/src/util/fipstools/acvp/acvptool/subprocess/hash.go
+++ /dev/null
@@ -1,127 +0,0 @@
-package subprocess
-
-import (
-	"encoding/hex"
-	"encoding/json"
-	"fmt"
-)
-
-// The following structures reflect the JSON of ACVP hash tests. See
-// https://usnistgov.github.io/ACVP/artifacts/draft-celi-acvp-sha-00.html#test_vectors
-
-type hashTestVectorSet struct {
-	Groups []hashTestGroup `json:"testGroups"`
-}
-
-type hashTestGroup struct {
-	ID    uint64 `json:"tgId"`
-	Type  string `json:"testType"`
-	Tests []struct {
-		ID        uint64 `json:"tcId"`
-		BitLength uint64 `json:"len"`
-		MsgHex    string `json:"msg"`
-	} `json:"tests"`
-}
-
-type hashTestGroupResponse struct {
-	ID    uint64             `json:"tgId"`
-	Tests []hashTestResponse `json:"tests"`
-}
-
-type hashTestResponse struct {
-	ID         uint64          `json:"tcId"`
-	DigestHex  string          `json:"md,omitempty"`
-	MCTResults []hashMCTResult `json:"resultsArray,omitempty"`
-}
-
-type hashMCTResult struct {
-	DigestHex string `json:"md"`
-}
-
-// hashPrimitive implements an ACVP algorithm by making requests to the
-// subprocess to hash strings.
-type hashPrimitive struct {
-	// algo is the ACVP name for this algorithm and also the command name
-	// given to the subprocess to hash with this hash function.
-	algo string
-	// size is the number of bytes of digest that the hash produces.
-	size int
-	m    *Subprocess
-}
-
-// hash uses the subprocess to hash msg and returns the digest.
-func (h *hashPrimitive) hash(msg []byte) []byte {
-	result, err := h.m.transact(h.algo, 1, msg)
-	if err != nil {
-		panic("hash operation failed: " + err.Error())
-	}
-	return result[0]
-}
-
-func (h *hashPrimitive) Process(vectorSet []byte) (interface{}, error) {
-	var parsed hashTestVectorSet
-	if err := json.Unmarshal(vectorSet, &parsed); err != nil {
-		return nil, err
-	}
-
-	var ret []hashTestGroupResponse
-	// See
-	// https://usnistgov.github.io/ACVP/artifacts/draft-celi-acvp-sha-00.html#rfc.section.3
-	// for details about the tests.
-	for _, group := range parsed.Groups {
-		response := hashTestGroupResponse{
-			ID: group.ID,
-		}
-
-		for _, test := range group.Tests {
-			if uint64(len(test.MsgHex))*4 != test.BitLength {
-				return nil, fmt.Errorf("test case %d/%d contains hex message of length %d but specifies a bit length of %d", group.ID, test.ID, len(test.MsgHex), test.BitLength)
-			}
-			msg, err := hex.DecodeString(test.MsgHex)
-			if err != nil {
-				return nil, fmt.Errorf("failed to decode hex in test case %d/%d: %s", group.ID, test.ID, err)
-			}
-
-			// http://usnistgov.github.io/ACVP/artifacts/draft-celi-acvp-sha-00.html#rfc.section.3
-			switch group.Type {
-			case "AFT":
-				response.Tests = append(response.Tests, hashTestResponse{
-					ID:        test.ID,
-					DigestHex: hex.EncodeToString(h.hash(msg)),
-				})
-
-			case "MCT":
-				if len(msg) != h.size {
-					return nil, fmt.Errorf("MCT test case %d/%d contains message of length %d but the digest length is %d", group.ID, test.ID, len(msg), h.size)
-				}
-
-				testResponse := hashTestResponse{ID: test.ID}
-
-				buf := make([]byte, 3*h.size)
-				var digest []byte
-				for i := 0; i < 100; i++ {
-					copy(buf, msg)
-					copy(buf[h.size:], msg)
-					copy(buf[2*h.size:], msg)
-					for j := 0; j < 1000; j++ {
-						digest = h.hash(buf)
-						copy(buf, buf[h.size:])
-						copy(buf[2*h.size:], digest)
-					}
-
-					testResponse.MCTResults = append(testResponse.MCTResults, hashMCTResult{hex.EncodeToString(digest)})
-					msg = digest
-				}
-
-				response.Tests = append(response.Tests, testResponse)
-
-			default:
-				return nil, fmt.Errorf("test group %d has unknown type %q", group.ID, group.Type)
-			}
-		}
-
-		ret = append(ret, response)
-	}
-
-	return ret, nil
-}
diff --git a/src/util/fipstools/acvp/acvptool/subprocess/subprocess.go b/src/util/fipstools/acvp/acvptool/subprocess/subprocess.go
deleted file mode 100644
index 404569f..0000000
--- a/src/util/fipstools/acvp/acvptool/subprocess/subprocess.go
+++ /dev/null
@@ -1,164 +0,0 @@
-package subprocess
-
-import (
-	"encoding/binary"
-	"encoding/json"
-	"errors"
-	"fmt"
-	"io"
-	"os"
-	"os/exec"
-)
-
-// Subprocess is a "middle" layer that interacts with a FIPS module via running
-// a command and speaking a simple protocol over stdin/stdout.
-type Subprocess struct {
-	cmd        *exec.Cmd
-	stdin      io.WriteCloser
-	stdout     io.ReadCloser
-	primitives map[string]primitive
-}
-
-// New returns a new Subprocess middle layer that runs the given binary.
-func New(path string) (*Subprocess, error) {
-	cmd := exec.Command(path)
-	cmd.Stderr = os.Stderr
-	stdin, err := cmd.StdinPipe()
-	if err != nil {
-		return nil, err
-	}
-	stdout, err := cmd.StdoutPipe()
-	if err != nil {
-		return nil, err
-	}
-
-	if err := cmd.Start(); err != nil {
-		return nil, err
-	}
-
-	m := &Subprocess{
-		cmd:    cmd,
-		stdin:  stdin,
-		stdout: stdout,
-	}
-
-	m.primitives = map[string]primitive{
-		"SHA-1":        &hashPrimitive{"SHA-1", 20, m},
-		"SHA2-224":     &hashPrimitive{"SHA2-224", 28, m},
-		"SHA2-256":     &hashPrimitive{"SHA2-256", 32, m},
-		"SHA2-384":     &hashPrimitive{"SHA2-384", 48, m},
-		"SHA2-512":     &hashPrimitive{"SHA2-512", 64, m},
-		"ACVP-AES-ECB": &blockCipher{"AES", 16, false, m},
-		"ACVP-AES-CBC": &blockCipher{"AES-CBC", 16, true, m},
-	}
-
-	return m, nil
-}
-
-// Close signals the child process to exit and waits for it to complete.
-func (m *Subprocess) Close() {
-	m.stdout.Close()
-	m.stdin.Close()
-	m.cmd.Wait()
-}
-
-// transact performs a single request--response pair with the subprocess.
-func (m *Subprocess) transact(cmd string, expectedResults int, args ...[]byte) ([][]byte, error) {
-	argLength := len(cmd)
-	for _, arg := range args {
-		argLength += len(arg)
-	}
-
-	buf := make([]byte, 4*(2+len(args)), 4*(2+len(args))+argLength)
-	binary.LittleEndian.PutUint32(buf, uint32(1+len(args)))
-	binary.LittleEndian.PutUint32(buf[4:], uint32(len(cmd)))
-	for i, arg := range args {
-		binary.LittleEndian.PutUint32(buf[4*(i+2):], uint32(len(arg)))
-	}
-	buf = append(buf, []byte(cmd)...)
-	for _, arg := range args {
-		buf = append(buf, arg...)
-	}
-
-	if _, err := m.stdin.Write(buf); err != nil {
-		return nil, err
-	}
-
-	buf = buf[:4]
-	if _, err := io.ReadFull(m.stdout, buf); err != nil {
-		return nil, err
-	}
-
-	numResults := binary.LittleEndian.Uint32(buf)
-	if int(numResults) != expectedResults {
-		return nil, fmt.Errorf("expected %d results from %q but got %d", expectedResults, cmd, numResults)
-	}
-
-	buf = make([]byte, 4*numResults)
-	if _, err := io.ReadFull(m.stdout, buf); err != nil {
-		return nil, err
-	}
-
-	var resultsLength uint64
-	for i := uint32(0); i < numResults; i++ {
-		resultsLength += uint64(binary.LittleEndian.Uint32(buf[4*i:]))
-	}
-
-	if resultsLength > (1 << 30) {
-		return nil, fmt.Errorf("results too large (%d bytes)", resultsLength)
-	}
-
-	results := make([]byte, resultsLength)
-	if _, err := io.ReadFull(m.stdout, results); err != nil {
-		return nil, err
-	}
-
-	ret := make([][]byte, 0, numResults)
-	var offset int
-	for i := uint32(0); i < numResults; i++ {
-		length := binary.LittleEndian.Uint32(buf[4*i:])
-		ret = append(ret, results[offset:offset+int(length)])
-		offset += int(length)
-	}
-
-	return ret, nil
-}
-
-// Config returns a JSON blob that describes the supported primitives. The
-// format of the blob is defined by ACVP. See
-// http://usnistgov.github.io/ACVP/artifacts/draft-fussell-acvp-spec-00.html#rfc.section.11.15.2.1
-func (m *Subprocess) Config() ([]byte, error) {
-	results, err := m.transact("getConfig", 1)
-	if err != nil {
-		return nil, err
-	}
-	var config []struct {
-		Algorithm string `json:"algorithm"`
-	}
-	if err := json.Unmarshal(results[0], &config); err != nil {
-		return nil, errors.New("failed to parse config response from wrapper: " + err.Error())
-	}
-	for _, algo := range config {
-		if _, ok := m.primitives[algo.Algorithm]; !ok {
-			return nil, fmt.Errorf("wrapper config advertises support for unknown algorithm %q", algo.Algorithm)
-		}
-	}
-	return results[0], nil
-}
-
-// Process runs a set of test vectors and returns the result.
-func (m *Subprocess) Process(algorithm string, vectorSet []byte) ([]byte, error) {
-	prim, ok := m.primitives[algorithm]
-	if !ok {
-		return nil, fmt.Errorf("unknown algorithm %q", algorithm)
-	}
-	ret, err := prim.Process(vectorSet)
-	if err != nil {
-		return nil, err
-	}
-	return json.Marshal(ret)
-}
-
-type primitive interface {
-	Process(vectorSet []byte) (interface{}, error)
-}
diff --git a/src/util/fipstools/acvp/modulewrapper/CMakeLists.txt b/src/util/fipstools/acvp/modulewrapper/CMakeLists.txt
deleted file mode 100644
index 8bee5cd..0000000
--- a/src/util/fipstools/acvp/modulewrapper/CMakeLists.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-include_directories(../../../../include)
-
-if(FIPS)
-  add_executable(
-    modulewrapper
-
-    modulewrapper.cc
-  )
-
-  add_dependencies(modulewrapper global_target)
-
-  target_link_libraries(modulewrapper crypto)
-endif()
diff --git a/src/util/fipstools/acvp/modulewrapper/modulewrapper.cc b/src/util/fipstools/acvp/modulewrapper/modulewrapper.cc
deleted file mode 100644
index f877c75..0000000
--- a/src/util/fipstools/acvp/modulewrapper/modulewrapper.cc
+++ /dev/null
@@ -1,331 +0,0 @@
-/* Copyright (c) 2019, Google Inc.
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
- * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
- * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
- * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
-
-#include <vector>
-
-#include <assert.h>
-#include <string.h>
-#include <sys/uio.h>
-#include <unistd.h>
-#include <cstdarg>
-
-#include <openssl/aes.h>
-#include <openssl/sha.h>
-#include <openssl/span.h>
-
-static constexpr size_t kMaxArgs = 8;
-static constexpr size_t kMaxArgLength = (1 << 20);
-static constexpr size_t kMaxNameLength = 30;
-
-static_assert((kMaxArgs - 1 * kMaxArgLength) + kMaxNameLength > (1 << 30),
-              "Argument limits permit excessive messages");
-
-using namespace bssl;
-
-static bool ReadAll(int fd, void *in_data, size_t data_len) {
-  uint8_t *data = reinterpret_cast<uint8_t *>(in_data);
-  size_t done = 0;
-
-  while (done < data_len) {
-    ssize_t r;
-    do {
-      r = read(fd, &data[done], data_len - done);
-    } while (r == -1 && errno == EINTR);
-
-    if (r <= 0) {
-      return false;
-    }
-
-    done += r;
-  }
-
-  return true;
-}
-
-template <typename... Args>
-static bool WriteReply(int fd, Args... args) {
-  std::vector<Span<const uint8_t>> spans = {args...};
-  if (spans.empty() || spans.size() > kMaxArgs) {
-    abort();
-  }
-
-  uint32_t nums[1 + kMaxArgs];
-  iovec iovs[kMaxArgs + 1];
-  nums[0] = spans.size();
-  iovs[0].iov_base = nums;
-  iovs[0].iov_len = sizeof(uint32_t) * (1 + spans.size());
-
-  for (size_t i = 0; i < spans.size(); i++) {
-    const auto &span = spans[i];
-    nums[i + 1] = span.size();
-    iovs[i + 1].iov_base = const_cast<uint8_t *>(span.data());
-    iovs[i + 1].iov_len = span.size();
-  }
-
-  const size_t num_iov = spans.size() + 1;
-  size_t iov_done = 0;
-  while (iov_done < num_iov) {
-    ssize_t r;
-    do {
-      r = writev(fd, &iovs[iov_done], num_iov - iov_done);
-    } while (r == -1 && errno == EINTR);
-
-    if (r <= 0) {
-      return false;
-    }
-
-    size_t written = r;
-    for (size_t i = iov_done; written > 0 && i < num_iov; i++) {
-      iovec &iov = iovs[i];
-
-      size_t done = written;
-      if (done > iov.iov_len) {
-        done = iov.iov_len;
-      }
-
-      iov.iov_base = reinterpret_cast<uint8_t *>(iov.iov_base) + done;
-      iov.iov_len -= done;
-      written -= done;
-
-      if (iov.iov_len == 0) {
-        iov_done++;
-      }
-    }
-
-    assert(written == 0);
-  }
-
-  return true;
-}
-
-static bool GetConfig(const Span<const uint8_t> args[]) {
-  static constexpr char kConfig[] =
-      "["
-      "{"
-      "  \"algorithm\": \"SHA2-224\","
-      "  \"revision\": \"1.0\","
-      "  \"messageLength\": [{"
-      "    \"min\": 0, \"max\": 65528, \"increment\": 8"
-      "  }]"
-      "},"
-      "{"
-      "  \"algorithm\": \"SHA2-256\","
-      "  \"revision\": \"1.0\","
-      "  \"messageLength\": [{"
-      "    \"min\": 0, \"max\": 65528, \"increment\": 8"
-      "  }]"
-      "},"
-      "{"
-      "  \"algorithm\": \"SHA2-384\","
-      "  \"revision\": \"1.0\","
-      "  \"messageLength\": [{"
-      "    \"min\": 0, \"max\": 65528, \"increment\": 8"
-      "  }]"
-      "},"
-      "{"
-      "  \"algorithm\": \"SHA2-512\","
-      "  \"revision\": \"1.0\","
-      "  \"messageLength\": [{"
-      "    \"min\": 0, \"max\": 65528, \"increment\": 8"
-      "  }]"
-      "},"
-      "{"
-      "  \"algorithm\": \"SHA-1\","
-      "  \"revision\": \"1.0\","
-      "  \"messageLength\": [{"
-      "    \"min\": 0, \"max\": 65528, \"increment\": 8"
-      "  }]"
-      "},"
-      "{"
-      "  \"algorithm\": \"ACVP-AES-ECB\","
-      "  \"revision\": \"1.0\","
-      "  \"direction\": [\"encrypt\", \"decrypt\"],"
-      "  \"keyLen\": [128, 192, 256]"
-      "},"
-      "{"
-      "  \"algorithm\": \"ACVP-AES-CBC\","
-      "  \"revision\": \"1.0\","
-      "  \"direction\": [\"encrypt\", \"decrypt\"],"
-      "  \"keyLen\": [128, 192, 256]"
-      "}"
-      "]";
-  return WriteReply(
-      STDOUT_FILENO,
-      Span<const uint8_t>(reinterpret_cast<const uint8_t *>(kConfig),
-                          sizeof(kConfig) - 1));
-}
-
-template <uint8_t *(*OneShotHash)(const uint8_t *, size_t, uint8_t *),
-          size_t DigestLength>
-static bool Hash(const Span<const uint8_t> args[]) {
-  uint8_t digest[DigestLength];
-  OneShotHash(args[0].data(), args[0].size(), digest);
-  return WriteReply(STDOUT_FILENO, Span<const uint8_t>(digest));
-}
-
-template <int (*SetKey)(const uint8_t *key, unsigned bits, AES_KEY *out),
-          void (*Block)(const uint8_t *in, uint8_t *out, const AES_KEY *key)>
-static bool AES(const Span<const uint8_t> args[]) {
-  AES_KEY key;
-  if (SetKey(args[0].data(), args[0].size() * 8, &key) != 0) {
-    return false;
-  }
-  if (args[1].size() % AES_BLOCK_SIZE != 0) {
-    return false;
-  }
-
-  std::vector<uint8_t> out;
-  out.resize(args[1].size());
-  for (size_t i = 0; i < args[1].size(); i += AES_BLOCK_SIZE) {
-    Block(args[1].data() + i, &out[i], &key);
-  }
-  return WriteReply(STDOUT_FILENO, Span<const uint8_t>(out));
-}
-
-template <int (*SetKey)(const uint8_t *key, unsigned bits, AES_KEY *out),
-          int Direction>
-static bool AES_CBC(const Span<const uint8_t> args[]) {
-  AES_KEY key;
-  if (SetKey(args[0].data(), args[0].size() * 8, &key) != 0) {
-    return false;
-  }
-  if (args[1].size() % AES_BLOCK_SIZE != 0 ||
-      args[2].size() != AES_BLOCK_SIZE) {
-    return false;
-  }
-  uint8_t iv[AES_BLOCK_SIZE];
-  memcpy(iv, args[2].data(), AES_BLOCK_SIZE);
-
-  std::vector<uint8_t> out;
-  out.resize(args[1].size());
-  AES_cbc_encrypt(args[1].data(), out.data(), args[1].size(), &key, iv,
-                  Direction);
-  return WriteReply(STDOUT_FILENO, Span<const uint8_t>(out));
-}
-
-static constexpr struct {
-  const char name[kMaxNameLength + 1];
-  uint8_t expected_args;
-  bool (*handler)(const Span<const uint8_t>[]);
-} kFunctions[] = {
-    {"getConfig", 0, GetConfig},
-    {"SHA-1", 1, Hash<SHA1, SHA_DIGEST_LENGTH>},
-    {"SHA2-224", 1, Hash<SHA224, SHA224_DIGEST_LENGTH>},
-    {"SHA2-256", 1, Hash<SHA256, SHA256_DIGEST_LENGTH>},
-    {"SHA2-384", 1, Hash<SHA384, SHA256_DIGEST_LENGTH>},
-    {"SHA2-512", 1, Hash<SHA512, SHA512_DIGEST_LENGTH>},
-    {"AES/encrypt", 2, AES<AES_set_encrypt_key, AES_encrypt>},
-    {"AES/decrypt", 2, AES<AES_set_decrypt_key, AES_decrypt>},
-    {"AES-CBC/encrypt", 3, AES_CBC<AES_set_encrypt_key, AES_ENCRYPT>},
-    {"AES-CBC/decrypt", 3, AES_CBC<AES_set_decrypt_key, AES_DECRYPT>},
-};
-
-int main() {
-  uint32_t nums[1 + kMaxArgs];
-  uint8_t *buf = nullptr;
-  size_t buf_len = 0;
-  Span<const uint8_t> args[kMaxArgs];
-
-  for (;;) {
-    if (!ReadAll(STDIN_FILENO, nums, sizeof(uint32_t) * 2)) {
-      return 1;
-    }
-
-    const size_t num_args = nums[0];
-    if (num_args == 0) {
-      fprintf(stderr, "Invalid, zero-argument operation requested.\n");
-      return 2;
-    } else if (num_args > kMaxArgs) {
-      fprintf(stderr,
-              "Operation requested with %zu args, but %zu is the limit.\n",
-              num_args, kMaxArgs);
-      return 2;
-    }
-
-    if (num_args > 1 &&
-        !ReadAll(STDIN_FILENO, &nums[2], sizeof(uint32_t) * (num_args - 1))) {
-      return 1;
-    }
-
-    size_t need = 0;
-    for (size_t i = 0; i < num_args; i++) {
-      const size_t arg_length = nums[i + 1];
-      if (i == 0 && arg_length > kMaxNameLength) {
-        fprintf(stderr,
-                "Operation with name of length %zu exceeded limit of %zu.\n",
-                arg_length, kMaxNameLength);
-        return 2;
-      } else if (arg_length > kMaxArgLength) {
-        fprintf(
-            stderr,
-            "Operation with argument of length %zu exceeded limit of %zu.\n",
-            arg_length, kMaxArgLength);
-        return 2;
-      }
-
-      // static_assert around kMaxArgs etc enforces that this doesn't overflow.
-      need += arg_length;
-    }
-
-    if (need > buf_len) {
-      free(buf);
-      size_t alloced = need + (need >> 1);
-      if (alloced < need) {
-        abort();
-      }
-      buf = reinterpret_cast<uint8_t *>(malloc(alloced));
-      if (buf == nullptr) {
-        abort();
-      }
-      buf_len = alloced;
-    }
-
-    if (!ReadAll(STDIN_FILENO, buf, need)) {
-      return 1;
-    }
-
-    size_t offset = 0;
-    for (size_t i = 0; i < num_args; i++) {
-      args[i] = Span<const uint8_t>(&buf[offset], nums[i + 1]);
-      offset += nums[i + 1];
-    }
-
-    bool found = true;
-    for (const auto &func : kFunctions) {
-      if (args[0].size() == strlen(func.name) &&
-          memcmp(args[0].data(), func.name, args[0].size()) == 0) {
-        if (num_args - 1 != func.expected_args) {
-          fprintf(stderr,
-                  "\'%s\' operation received %zu arguments but expected %u.\n",
-                  func.name, num_args - 1, func.expected_args);
-          return 2;
-        }
-
-        if (!func.handler(&args[1])) {
-          return 4;
-        }
-
-        found = true;
-        break;
-      }
-    }
-
-    if (!found) {
-      const std::string name(reinterpret_cast<const char *>(args[0].data()),
-                             args[0].size());
-      fprintf(stderr, "Unknown operation: %s\n", name.c_str());
-      return 3;
-    }
-  }
-}
diff --git a/src/util/fipstools/break-tests.sh b/src/util/fipstools/break-tests.sh
index 719461e..5b1cd21 100644
--- a/src/util/fipstools/break-tests.sh
+++ b/src/util/fipstools/break-tests.sh
@@ -40,7 +40,7 @@
 for test in $TESTS; do
 	pushd build-$test
 	printf "\n\n\\x1b[1m$test\\x1b[0m\n"
-	./util/fipstools/test_fips
+	./fipstools/test_fips
 	echo "Waiting for keypress..."
 	read
 	popd
@@ -48,6 +48,6 @@
 
 pushd build-NONE
 printf "\\x1b[1mIntegrity\\x1b[0m\n"
-go run ../util/fipstools/break-hash.go ./util/fipstools/test_fips ./util/fipstools/test_fips_broken
-./util/fipstools/test_fips_broken
+go run ../util/fipstools/break-hash.go ./fipstools/test_fips ./fipstools/test_fips_broken
+./fipstools/test_fips_broken
 popd
diff --git a/src/util/fipstools/delocate/delocate.go b/src/util/fipstools/delocate/delocate.go
index a43b428..593abec 100644
--- a/src/util/fipstools/delocate/delocate.go
+++ b/src/util/fipstools/delocate/delocate.go
@@ -1269,10 +1269,6 @@
 	// maxObservedFileNumber contains the largest seen file number in a
 	// .file directive. Zero is not a valid number.
 	maxObservedFileNumber := 0
-	// fileDirectivesContainMD5 is true if the compiler is outputting MD5
-	// checksums in .file directives. If it does so, then this script needs
-	// to match that behaviour otherwise warnings result.
-	fileDirectivesContainMD5 := false
 
 	// OPENSSL_ia32cap_get will be synthesized by this script.
 	symbols["OPENSSL_ia32cap_get"] = struct{}{}
@@ -1332,12 +1328,6 @@
 			if fileNo > maxObservedFileNumber {
 				maxObservedFileNumber = fileNo
 			}
-
-			for _, token := range parts[2:] {
-				if token == "md5" {
-					fileDirectivesContainMD5 = true
-				}
-			}
 		}, ruleStatement, ruleLocationDirective)
 	}
 
@@ -1358,11 +1348,7 @@
 	}
 
 	w.WriteString(".text\n")
-	var fileTrailing string
-	if fileDirectivesContainMD5 {
-		fileTrailing = " md5 0x00000000000000000000000000000000"
-	}
-	w.WriteString(fmt.Sprintf(".file %d \"inserted_by_delocate.c\"%s\n", maxObservedFileNumber+1, fileTrailing))
+	w.WriteString(fmt.Sprintf(".file %d \"inserted_by_delocate.c\"\n", maxObservedFileNumber+1))
 	w.WriteString(fmt.Sprintf(".loc %d 1 0\n", maxObservedFileNumber+1))
 	w.WriteString("BORINGSSL_bcm_text_start:\n")
 
diff --git a/src/util/fipstools/delocate/delocate.peg b/src/util/fipstools/delocate/delocate.peg
index b24a47a..82a3cb5 100644
--- a/src/util/fipstools/delocate/delocate.peg
+++ b/src/util/fipstools/delocate/delocate.peg
@@ -36,7 +36,7 @@
 QuotedArg <- '"' QuotedText '"'
 QuotedText <- (EscapedChar / [^"])*
 LabelContainingDirective <- LabelContainingDirectiveName WS SymbolArgs
-LabelContainingDirectiveName <- ".long" / ".set" / ".8byte" / ".4byte" / ".quad" / ".tc" / ".localentry" / ".size" / ".type" / ".uleb128" / ".sleb128"
+LabelContainingDirectiveName <- ".long" / ".set" / ".8byte" / ".4byte" / ".quad" / ".tc" / ".localentry" / ".size" / ".type"
 SymbolArgs <- SymbolArg ((WS? ',' WS?) SymbolArg)*
 SymbolArg <- Offset /
              SymbolType /
diff --git a/src/util/fipstools/delocate/delocate.peg.go b/src/util/fipstools/delocate/delocate.peg.go
index 298f55c..e147943 100644
--- a/src/util/fipstools/delocate/delocate.peg.go
+++ b/src/util/fipstools/delocate/delocate.peg.go
@@ -1260,7 +1260,7 @@
 			position, tokenIndex = position131, tokenIndex131
 			return false
 		},
-		/* 11 LabelContainingDirectiveName <- <(('.' ('l' / 'L') ('o' / 'O') ('n' / 'N') ('g' / 'G')) / ('.' ('s' / 'S') ('e' / 'E') ('t' / 'T')) / ('.' '8' ('b' / 'B') ('y' / 'Y') ('t' / 'T') ('e' / 'E')) / ('.' '4' ('b' / 'B') ('y' / 'Y') ('t' / 'T') ('e' / 'E')) / ('.' ('q' / 'Q') ('u' / 'U') ('a' / 'A') ('d' / 'D')) / ('.' ('t' / 'T') ('c' / 'C')) / ('.' ('l' / 'L') ('o' / 'O') ('c' / 'C') ('a' / 'A') ('l' / 'L') ('e' / 'E') ('n' / 'N') ('t' / 'T') ('r' / 'R') ('y' / 'Y')) / ('.' ('s' / 'S') ('i' / 'I') ('z' / 'Z') ('e' / 'E')) / ('.' ('t' / 'T') ('y' / 'Y') ('p' / 'P') ('e' / 'E')) / ('.' ('u' / 'U') ('l' / 'L') ('e' / 'E') ('b' / 'B') '1' '2' '8') / ('.' ('s' / 'S') ('l' / 'L') ('e' / 'E') ('b' / 'B') '1' '2' '8'))> */
+		/* 11 LabelContainingDirectiveName <- <(('.' ('l' / 'L') ('o' / 'O') ('n' / 'N') ('g' / 'G')) / ('.' ('s' / 'S') ('e' / 'E') ('t' / 'T')) / ('.' '8' ('b' / 'B') ('y' / 'Y') ('t' / 'T') ('e' / 'E')) / ('.' '4' ('b' / 'B') ('y' / 'Y') ('t' / 'T') ('e' / 'E')) / ('.' ('q' / 'Q') ('u' / 'U') ('a' / 'A') ('d' / 'D')) / ('.' ('t' / 'T') ('c' / 'C')) / ('.' ('l' / 'L') ('o' / 'O') ('c' / 'C') ('a' / 'A') ('l' / 'L') ('e' / 'E') ('n' / 'N') ('t' / 'T') ('r' / 'R') ('y' / 'Y')) / ('.' ('s' / 'S') ('i' / 'I') ('z' / 'Z') ('e' / 'E')) / ('.' ('t' / 'T') ('y' / 'Y') ('p' / 'P') ('e' / 'E')))> */
 		func() bool {
 			position133, tokenIndex133 := position, tokenIndex
 			{
@@ -1857,227 +1857,69 @@
 				l205:
 					position, tokenIndex = position135, tokenIndex135
 					if buffer[position] != rune('.') {
-						goto l214
+						goto l133
 					}
 					position++
 					{
-						position215, tokenIndex215 := position, tokenIndex
+						position214, tokenIndex214 := position, tokenIndex
 						if buffer[position] != rune('t') {
-							goto l216
+							goto l215
 						}
 						position++
-						goto l215
-					l216:
-						position, tokenIndex = position215, tokenIndex215
+						goto l214
+					l215:
+						position, tokenIndex = position214, tokenIndex214
 						if buffer[position] != rune('T') {
-							goto l214
+							goto l133
 						}
 						position++
 					}
-				l215:
-					{
-						position217, tokenIndex217 := position, tokenIndex
-						if buffer[position] != rune('y') {
-							goto l218
-						}
-						position++
-						goto l217
-					l218:
-						position, tokenIndex = position217, tokenIndex217
-						if buffer[position] != rune('Y') {
-							goto l214
-						}
-						position++
-					}
-				l217:
-					{
-						position219, tokenIndex219 := position, tokenIndex
-						if buffer[position] != rune('p') {
-							goto l220
-						}
-						position++
-						goto l219
-					l220:
-						position, tokenIndex = position219, tokenIndex219
-						if buffer[position] != rune('P') {
-							goto l214
-						}
-						position++
-					}
-				l219:
-					{
-						position221, tokenIndex221 := position, tokenIndex
-						if buffer[position] != rune('e') {
-							goto l222
-						}
-						position++
-						goto l221
-					l222:
-						position, tokenIndex = position221, tokenIndex221
-						if buffer[position] != rune('E') {
-							goto l214
-						}
-						position++
-					}
-				l221:
-					goto l135
 				l214:
-					position, tokenIndex = position135, tokenIndex135
-					if buffer[position] != rune('.') {
-						goto l223
-					}
-					position++
 					{
-						position224, tokenIndex224 := position, tokenIndex
-						if buffer[position] != rune('u') {
-							goto l225
+						position216, tokenIndex216 := position, tokenIndex
+						if buffer[position] != rune('y') {
+							goto l217
 						}
 						position++
-						goto l224
-					l225:
-						position, tokenIndex = position224, tokenIndex224
-						if buffer[position] != rune('U') {
-							goto l223
-						}
-						position++
-					}
-				l224:
-					{
-						position226, tokenIndex226 := position, tokenIndex
-						if buffer[position] != rune('l') {
-							goto l227
-						}
-						position++
-						goto l226
-					l227:
-						position, tokenIndex = position226, tokenIndex226
-						if buffer[position] != rune('L') {
-							goto l223
-						}
-						position++
-					}
-				l226:
-					{
-						position228, tokenIndex228 := position, tokenIndex
-						if buffer[position] != rune('e') {
-							goto l229
-						}
-						position++
-						goto l228
-					l229:
-						position, tokenIndex = position228, tokenIndex228
-						if buffer[position] != rune('E') {
-							goto l223
-						}
-						position++
-					}
-				l228:
-					{
-						position230, tokenIndex230 := position, tokenIndex
-						if buffer[position] != rune('b') {
-							goto l231
-						}
-						position++
-						goto l230
-					l231:
-						position, tokenIndex = position230, tokenIndex230
-						if buffer[position] != rune('B') {
-							goto l223
-						}
-						position++
-					}
-				l230:
-					if buffer[position] != rune('1') {
-						goto l223
-					}
-					position++
-					if buffer[position] != rune('2') {
-						goto l223
-					}
-					position++
-					if buffer[position] != rune('8') {
-						goto l223
-					}
-					position++
-					goto l135
-				l223:
-					position, tokenIndex = position135, tokenIndex135
-					if buffer[position] != rune('.') {
-						goto l133
-					}
-					position++
-					{
-						position232, tokenIndex232 := position, tokenIndex
-						if buffer[position] != rune('s') {
-							goto l233
-						}
-						position++
-						goto l232
-					l233:
-						position, tokenIndex = position232, tokenIndex232
-						if buffer[position] != rune('S') {
+						goto l216
+					l217:
+						position, tokenIndex = position216, tokenIndex216
+						if buffer[position] != rune('Y') {
 							goto l133
 						}
 						position++
 					}
-				l232:
+				l216:
 					{
-						position234, tokenIndex234 := position, tokenIndex
-						if buffer[position] != rune('l') {
-							goto l235
+						position218, tokenIndex218 := position, tokenIndex
+						if buffer[position] != rune('p') {
+							goto l219
 						}
 						position++
-						goto l234
-					l235:
-						position, tokenIndex = position234, tokenIndex234
-						if buffer[position] != rune('L') {
+						goto l218
+					l219:
+						position, tokenIndex = position218, tokenIndex218
+						if buffer[position] != rune('P') {
 							goto l133
 						}
 						position++
 					}
-				l234:
+				l218:
 					{
-						position236, tokenIndex236 := position, tokenIndex
+						position220, tokenIndex220 := position, tokenIndex
 						if buffer[position] != rune('e') {
-							goto l237
+							goto l221
 						}
 						position++
-						goto l236
-					l237:
-						position, tokenIndex = position236, tokenIndex236
+						goto l220
+					l221:
+						position, tokenIndex = position220, tokenIndex220
 						if buffer[position] != rune('E') {
 							goto l133
 						}
 						position++
 					}
-				l236:
-					{
-						position238, tokenIndex238 := position, tokenIndex
-						if buffer[position] != rune('b') {
-							goto l239
-						}
-						position++
-						goto l238
-					l239:
-						position, tokenIndex = position238, tokenIndex238
-						if buffer[position] != rune('B') {
-							goto l133
-						}
-						position++
-					}
-				l238:
-					if buffer[position] != rune('1') {
-						goto l133
-					}
-					position++
-					if buffer[position] != rune('2') {
-						goto l133
-					}
-					position++
-					if buffer[position] != rune('8') {
-						goto l133
-					}
-					position++
+				l220:
 				}
 			l135:
 				add(ruleLabelContainingDirectiveName, position134)
@@ -2089,460 +1931,570 @@
 		},
 		/* 12 SymbolArgs <- <(SymbolArg (WS? ',' WS? SymbolArg)*)> */
 		func() bool {
-			position240, tokenIndex240 := position, tokenIndex
+			position222, tokenIndex222 := position, tokenIndex
 			{
-				position241 := position
+				position223 := position
 				if !_rules[ruleSymbolArg]() {
-					goto l240
+					goto l222
 				}
-			l242:
+			l224:
 				{
-					position243, tokenIndex243 := position, tokenIndex
+					position225, tokenIndex225 := position, tokenIndex
 					{
-						position244, tokenIndex244 := position, tokenIndex
+						position226, tokenIndex226 := position, tokenIndex
 						if !_rules[ruleWS]() {
-							goto l244
+							goto l226
 						}
-						goto l245
-					l244:
-						position, tokenIndex = position244, tokenIndex244
+						goto l227
+					l226:
+						position, tokenIndex = position226, tokenIndex226
 					}
-				l245:
+				l227:
 					if buffer[position] != rune(',') {
-						goto l243
+						goto l225
 					}
 					position++
 					{
-						position246, tokenIndex246 := position, tokenIndex
+						position228, tokenIndex228 := position, tokenIndex
 						if !_rules[ruleWS]() {
-							goto l246
+							goto l228
 						}
-						goto l247
-					l246:
-						position, tokenIndex = position246, tokenIndex246
+						goto l229
+					l228:
+						position, tokenIndex = position228, tokenIndex228
 					}
-				l247:
+				l229:
 					if !_rules[ruleSymbolArg]() {
-						goto l243
+						goto l225
 					}
-					goto l242
-				l243:
-					position, tokenIndex = position243, tokenIndex243
+					goto l224
+				l225:
+					position, tokenIndex = position225, tokenIndex225
 				}
-				add(ruleSymbolArgs, position241)
+				add(ruleSymbolArgs, position223)
 			}
 			return true
-		l240:
-			position, tokenIndex = position240, tokenIndex240
+		l222:
+			position, tokenIndex = position222, tokenIndex222
 			return false
 		},
 		/* 13 SymbolArg <- <(Offset / SymbolType / ((Offset / LocalSymbol / SymbolName / Dot) WS? Operator WS? (Offset / LocalSymbol / SymbolName)) / (LocalSymbol TCMarker?) / (SymbolName Offset) / (SymbolName TCMarker?))> */
 		func() bool {
-			position248, tokenIndex248 := position, tokenIndex
+			position230, tokenIndex230 := position, tokenIndex
 			{
-				position249 := position
+				position231 := position
 				{
-					position250, tokenIndex250 := position, tokenIndex
+					position232, tokenIndex232 := position, tokenIndex
 					if !_rules[ruleOffset]() {
-						goto l251
+						goto l233
 					}
-					goto l250
-				l251:
-					position, tokenIndex = position250, tokenIndex250
+					goto l232
+				l233:
+					position, tokenIndex = position232, tokenIndex232
 					if !_rules[ruleSymbolType]() {
-						goto l252
+						goto l234
 					}
-					goto l250
-				l252:
-					position, tokenIndex = position250, tokenIndex250
+					goto l232
+				l234:
+					position, tokenIndex = position232, tokenIndex232
 					{
-						position254, tokenIndex254 := position, tokenIndex
+						position236, tokenIndex236 := position, tokenIndex
 						if !_rules[ruleOffset]() {
-							goto l255
+							goto l237
 						}
-						goto l254
-					l255:
-						position, tokenIndex = position254, tokenIndex254
+						goto l236
+					l237:
+						position, tokenIndex = position236, tokenIndex236
 						if !_rules[ruleLocalSymbol]() {
-							goto l256
+							goto l238
 						}
-						goto l254
-					l256:
-						position, tokenIndex = position254, tokenIndex254
+						goto l236
+					l238:
+						position, tokenIndex = position236, tokenIndex236
 						if !_rules[ruleSymbolName]() {
-							goto l257
+							goto l239
 						}
-						goto l254
-					l257:
-						position, tokenIndex = position254, tokenIndex254
+						goto l236
+					l239:
+						position, tokenIndex = position236, tokenIndex236
 						if !_rules[ruleDot]() {
-							goto l253
+							goto l235
 						}
 					}
-				l254:
+				l236:
 					{
-						position258, tokenIndex258 := position, tokenIndex
+						position240, tokenIndex240 := position, tokenIndex
 						if !_rules[ruleWS]() {
-							goto l258
+							goto l240
 						}
-						goto l259
-					l258:
-						position, tokenIndex = position258, tokenIndex258
+						goto l241
+					l240:
+						position, tokenIndex = position240, tokenIndex240
 					}
-				l259:
+				l241:
 					if !_rules[ruleOperator]() {
-						goto l253
+						goto l235
 					}
 					{
-						position260, tokenIndex260 := position, tokenIndex
+						position242, tokenIndex242 := position, tokenIndex
 						if !_rules[ruleWS]() {
-							goto l260
+							goto l242
 						}
-						goto l261
-					l260:
-						position, tokenIndex = position260, tokenIndex260
+						goto l243
+					l242:
+						position, tokenIndex = position242, tokenIndex242
 					}
-				l261:
+				l243:
 					{
-						position262, tokenIndex262 := position, tokenIndex
+						position244, tokenIndex244 := position, tokenIndex
 						if !_rules[ruleOffset]() {
-							goto l263
+							goto l245
 						}
-						goto l262
-					l263:
-						position, tokenIndex = position262, tokenIndex262
+						goto l244
+					l245:
+						position, tokenIndex = position244, tokenIndex244
 						if !_rules[ruleLocalSymbol]() {
-							goto l264
+							goto l246
 						}
-						goto l262
-					l264:
-						position, tokenIndex = position262, tokenIndex262
+						goto l244
+					l246:
+						position, tokenIndex = position244, tokenIndex244
 						if !_rules[ruleSymbolName]() {
-							goto l253
+							goto l235
 						}
 					}
-				l262:
-					goto l250
-				l253:
-					position, tokenIndex = position250, tokenIndex250
+				l244:
+					goto l232
+				l235:
+					position, tokenIndex = position232, tokenIndex232
 					if !_rules[ruleLocalSymbol]() {
-						goto l265
+						goto l247
 					}
 					{
-						position266, tokenIndex266 := position, tokenIndex
+						position248, tokenIndex248 := position, tokenIndex
 						if !_rules[ruleTCMarker]() {
-							goto l266
+							goto l248
 						}
-						goto l267
-					l266:
-						position, tokenIndex = position266, tokenIndex266
+						goto l249
+					l248:
+						position, tokenIndex = position248, tokenIndex248
 					}
-				l267:
-					goto l250
-				l265:
-					position, tokenIndex = position250, tokenIndex250
+				l249:
+					goto l232
+				l247:
+					position, tokenIndex = position232, tokenIndex232
 					if !_rules[ruleSymbolName]() {
-						goto l268
+						goto l250
 					}
 					if !_rules[ruleOffset]() {
-						goto l268
+						goto l250
 					}
-					goto l250
-				l268:
-					position, tokenIndex = position250, tokenIndex250
+					goto l232
+				l250:
+					position, tokenIndex = position232, tokenIndex232
 					if !_rules[ruleSymbolName]() {
-						goto l248
+						goto l230
 					}
 					{
-						position269, tokenIndex269 := position, tokenIndex
+						position251, tokenIndex251 := position, tokenIndex
 						if !_rules[ruleTCMarker]() {
-							goto l269
+							goto l251
 						}
-						goto l270
-					l269:
-						position, tokenIndex = position269, tokenIndex269
+						goto l252
+					l251:
+						position, tokenIndex = position251, tokenIndex251
 					}
-				l270:
+				l252:
 				}
-			l250:
-				add(ruleSymbolArg, position249)
+			l232:
+				add(ruleSymbolArg, position231)
 			}
 			return true
-		l248:
-			position, tokenIndex = position248, tokenIndex248
+		l230:
+			position, tokenIndex = position230, tokenIndex230
 			return false
 		},
 		/* 14 SymbolType <- <(('@' 'f' 'u' 'n' 'c' 't' 'i' 'o' 'n') / ('@' 'o' 'b' 'j' 'e' 'c' 't'))> */
 		func() bool {
-			position271, tokenIndex271 := position, tokenIndex
+			position253, tokenIndex253 := position, tokenIndex
 			{
-				position272 := position
+				position254 := position
 				{
-					position273, tokenIndex273 := position, tokenIndex
+					position255, tokenIndex255 := position, tokenIndex
 					if buffer[position] != rune('@') {
-						goto l274
+						goto l256
 					}
 					position++
 					if buffer[position] != rune('f') {
-						goto l274
+						goto l256
 					}
 					position++
 					if buffer[position] != rune('u') {
-						goto l274
+						goto l256
 					}
 					position++
 					if buffer[position] != rune('n') {
-						goto l274
+						goto l256
 					}
 					position++
 					if buffer[position] != rune('c') {
-						goto l274
+						goto l256
 					}
 					position++
 					if buffer[position] != rune('t') {
-						goto l274
+						goto l256
 					}
 					position++
 					if buffer[position] != rune('i') {
-						goto l274
+						goto l256
 					}
 					position++
 					if buffer[position] != rune('o') {
-						goto l274
+						goto l256
 					}
 					position++
 					if buffer[position] != rune('n') {
-						goto l274
+						goto l256
 					}
 					position++
-					goto l273
-				l274:
-					position, tokenIndex = position273, tokenIndex273
+					goto l255
+				l256:
+					position, tokenIndex = position255, tokenIndex255
 					if buffer[position] != rune('@') {
-						goto l271
+						goto l253
 					}
 					position++
 					if buffer[position] != rune('o') {
-						goto l271
+						goto l253
 					}
 					position++
 					if buffer[position] != rune('b') {
-						goto l271
+						goto l253
 					}
 					position++
 					if buffer[position] != rune('j') {
-						goto l271
+						goto l253
 					}
 					position++
 					if buffer[position] != rune('e') {
-						goto l271
+						goto l253
 					}
 					position++
 					if buffer[position] != rune('c') {
-						goto l271
+						goto l253
 					}
 					position++
 					if buffer[position] != rune('t') {
-						goto l271
+						goto l253
 					}
 					position++
 				}
+			l255:
+				add(ruleSymbolType, position254)
+			}
+			return true
+		l253:
+			position, tokenIndex = position253, tokenIndex253
+			return false
+		},
+		/* 15 Dot <- <'.'> */
+		func() bool {
+			position257, tokenIndex257 := position, tokenIndex
+			{
+				position258 := position
+				if buffer[position] != rune('.') {
+					goto l257
+				}
+				position++
+				add(ruleDot, position258)
+			}
+			return true
+		l257:
+			position, tokenIndex = position257, tokenIndex257
+			return false
+		},
+		/* 16 TCMarker <- <('[' 'T' 'C' ']')> */
+		func() bool {
+			position259, tokenIndex259 := position, tokenIndex
+			{
+				position260 := position
+				if buffer[position] != rune('[') {
+					goto l259
+				}
+				position++
+				if buffer[position] != rune('T') {
+					goto l259
+				}
+				position++
+				if buffer[position] != rune('C') {
+					goto l259
+				}
+				position++
+				if buffer[position] != rune(']') {
+					goto l259
+				}
+				position++
+				add(ruleTCMarker, position260)
+			}
+			return true
+		l259:
+			position, tokenIndex = position259, tokenIndex259
+			return false
+		},
+		/* 17 EscapedChar <- <('\\' .)> */
+		func() bool {
+			position261, tokenIndex261 := position, tokenIndex
+			{
+				position262 := position
+				if buffer[position] != rune('\\') {
+					goto l261
+				}
+				position++
+				if !matchDot() {
+					goto l261
+				}
+				add(ruleEscapedChar, position262)
+			}
+			return true
+		l261:
+			position, tokenIndex = position261, tokenIndex261
+			return false
+		},
+		/* 18 WS <- <(' ' / '\t')+> */
+		func() bool {
+			position263, tokenIndex263 := position, tokenIndex
+			{
+				position264 := position
+				{
+					position267, tokenIndex267 := position, tokenIndex
+					if buffer[position] != rune(' ') {
+						goto l268
+					}
+					position++
+					goto l267
+				l268:
+					position, tokenIndex = position267, tokenIndex267
+					if buffer[position] != rune('\t') {
+						goto l263
+					}
+					position++
+				}
+			l267:
+			l265:
+				{
+					position266, tokenIndex266 := position, tokenIndex
+					{
+						position269, tokenIndex269 := position, tokenIndex
+						if buffer[position] != rune(' ') {
+							goto l270
+						}
+						position++
+						goto l269
+					l270:
+						position, tokenIndex = position269, tokenIndex269
+						if buffer[position] != rune('\t') {
+							goto l266
+						}
+						position++
+					}
+				l269:
+					goto l265
+				l266:
+					position, tokenIndex = position266, tokenIndex266
+				}
+				add(ruleWS, position264)
+			}
+			return true
+		l263:
+			position, tokenIndex = position263, tokenIndex263
+			return false
+		},
+		/* 19 Comment <- <('#' (!'\n' .)*)> */
+		func() bool {
+			position271, tokenIndex271 := position, tokenIndex
+			{
+				position272 := position
+				if buffer[position] != rune('#') {
+					goto l271
+				}
+				position++
 			l273:
-				add(ruleSymbolType, position272)
+				{
+					position274, tokenIndex274 := position, tokenIndex
+					{
+						position275, tokenIndex275 := position, tokenIndex
+						if buffer[position] != rune('\n') {
+							goto l275
+						}
+						position++
+						goto l274
+					l275:
+						position, tokenIndex = position275, tokenIndex275
+					}
+					if !matchDot() {
+						goto l274
+					}
+					goto l273
+				l274:
+					position, tokenIndex = position274, tokenIndex274
+				}
+				add(ruleComment, position272)
 			}
 			return true
 		l271:
 			position, tokenIndex = position271, tokenIndex271
 			return false
 		},
-		/* 15 Dot <- <'.'> */
+		/* 20 Label <- <((LocalSymbol / LocalLabel / SymbolName) ':')> */
 		func() bool {
-			position275, tokenIndex275 := position, tokenIndex
+			position276, tokenIndex276 := position, tokenIndex
 			{
-				position276 := position
-				if buffer[position] != rune('.') {
-					goto l275
+				position277 := position
+				{
+					position278, tokenIndex278 := position, tokenIndex
+					if !_rules[ruleLocalSymbol]() {
+						goto l279
+					}
+					goto l278
+				l279:
+					position, tokenIndex = position278, tokenIndex278
+					if !_rules[ruleLocalLabel]() {
+						goto l280
+					}
+					goto l278
+				l280:
+					position, tokenIndex = position278, tokenIndex278
+					if !_rules[ruleSymbolName]() {
+						goto l276
+					}
+				}
+			l278:
+				if buffer[position] != rune(':') {
+					goto l276
 				}
 				position++
-				add(ruleDot, position276)
+				add(ruleLabel, position277)
 			}
 			return true
-		l275:
-			position, tokenIndex = position275, tokenIndex275
+		l276:
+			position, tokenIndex = position276, tokenIndex276
 			return false
 		},
-		/* 16 TCMarker <- <('[' 'T' 'C' ']')> */
-		func() bool {
-			position277, tokenIndex277 := position, tokenIndex
-			{
-				position278 := position
-				if buffer[position] != rune('[') {
-					goto l277
-				}
-				position++
-				if buffer[position] != rune('T') {
-					goto l277
-				}
-				position++
-				if buffer[position] != rune('C') {
-					goto l277
-				}
-				position++
-				if buffer[position] != rune(']') {
-					goto l277
-				}
-				position++
-				add(ruleTCMarker, position278)
-			}
-			return true
-		l277:
-			position, tokenIndex = position277, tokenIndex277
-			return false
-		},
-		/* 17 EscapedChar <- <('\\' .)> */
-		func() bool {
-			position279, tokenIndex279 := position, tokenIndex
-			{
-				position280 := position
-				if buffer[position] != rune('\\') {
-					goto l279
-				}
-				position++
-				if !matchDot() {
-					goto l279
-				}
-				add(ruleEscapedChar, position280)
-			}
-			return true
-		l279:
-			position, tokenIndex = position279, tokenIndex279
-			return false
-		},
-		/* 18 WS <- <(' ' / '\t')+> */
+		/* 21 SymbolName <- <(([a-z] / [A-Z] / '.' / '_') ([a-z] / [A-Z] / '.' / ([0-9] / [0-9]) / '$' / '_')*)> */
 		func() bool {
 			position281, tokenIndex281 := position, tokenIndex
 			{
 				position282 := position
 				{
-					position285, tokenIndex285 := position, tokenIndex
-					if buffer[position] != rune(' ') {
+					position283, tokenIndex283 := position, tokenIndex
+					if c := buffer[position]; c < rune('a') || c > rune('z') {
+						goto l284
+					}
+					position++
+					goto l283
+				l284:
+					position, tokenIndex = position283, tokenIndex283
+					if c := buffer[position]; c < rune('A') || c > rune('Z') {
+						goto l285
+					}
+					position++
+					goto l283
+				l285:
+					position, tokenIndex = position283, tokenIndex283
+					if buffer[position] != rune('.') {
 						goto l286
 					}
 					position++
-					goto l285
+					goto l283
 				l286:
-					position, tokenIndex = position285, tokenIndex285
-					if buffer[position] != rune('\t') {
+					position, tokenIndex = position283, tokenIndex283
+					if buffer[position] != rune('_') {
 						goto l281
 					}
 					position++
 				}
-			l285:
 			l283:
+			l287:
 				{
-					position284, tokenIndex284 := position, tokenIndex
+					position288, tokenIndex288 := position, tokenIndex
 					{
-						position287, tokenIndex287 := position, tokenIndex
-						if buffer[position] != rune(' ') {
+						position289, tokenIndex289 := position, tokenIndex
+						if c := buffer[position]; c < rune('a') || c > rune('z') {
+							goto l290
+						}
+						position++
+						goto l289
+					l290:
+						position, tokenIndex = position289, tokenIndex289
+						if c := buffer[position]; c < rune('A') || c > rune('Z') {
+							goto l291
+						}
+						position++
+						goto l289
+					l291:
+						position, tokenIndex = position289, tokenIndex289
+						if buffer[position] != rune('.') {
+							goto l292
+						}
+						position++
+						goto l289
+					l292:
+						position, tokenIndex = position289, tokenIndex289
+						{
+							position294, tokenIndex294 := position, tokenIndex
+							if c := buffer[position]; c < rune('0') || c > rune('9') {
+								goto l295
+							}
+							position++
+							goto l294
+						l295:
+							position, tokenIndex = position294, tokenIndex294
+							if c := buffer[position]; c < rune('0') || c > rune('9') {
+								goto l293
+							}
+							position++
+						}
+					l294:
+						goto l289
+					l293:
+						position, tokenIndex = position289, tokenIndex289
+						if buffer[position] != rune('$') {
+							goto l296
+						}
+						position++
+						goto l289
+					l296:
+						position, tokenIndex = position289, tokenIndex289
+						if buffer[position] != rune('_') {
 							goto l288
 						}
 						position++
-						goto l287
-					l288:
-						position, tokenIndex = position287, tokenIndex287
-						if buffer[position] != rune('\t') {
-							goto l284
-						}
-						position++
 					}
-				l287:
-					goto l283
-				l284:
-					position, tokenIndex = position284, tokenIndex284
+				l289:
+					goto l287
+				l288:
+					position, tokenIndex = position288, tokenIndex288
 				}
-				add(ruleWS, position282)
+				add(ruleSymbolName, position282)
 			}
 			return true
 		l281:
 			position, tokenIndex = position281, tokenIndex281
 			return false
 		},
-		/* 19 Comment <- <('#' (!'\n' .)*)> */
+		/* 22 LocalSymbol <- <('.' 'L' ([a-z] / [A-Z] / '.' / ([0-9] / [0-9]) / '$' / '_')+)> */
 		func() bool {
-			position289, tokenIndex289 := position, tokenIndex
+			position297, tokenIndex297 := position, tokenIndex
 			{
-				position290 := position
-				if buffer[position] != rune('#') {
-					goto l289
+				position298 := position
+				if buffer[position] != rune('.') {
+					goto l297
 				}
 				position++
-			l291:
-				{
-					position292, tokenIndex292 := position, tokenIndex
-					{
-						position293, tokenIndex293 := position, tokenIndex
-						if buffer[position] != rune('\n') {
-							goto l293
-						}
-						position++
-						goto l292
-					l293:
-						position, tokenIndex = position293, tokenIndex293
-					}
-					if !matchDot() {
-						goto l292
-					}
-					goto l291
-				l292:
-					position, tokenIndex = position292, tokenIndex292
-				}
-				add(ruleComment, position290)
-			}
-			return true
-		l289:
-			position, tokenIndex = position289, tokenIndex289
-			return false
-		},
-		/* 20 Label <- <((LocalSymbol / LocalLabel / SymbolName) ':')> */
-		func() bool {
-			position294, tokenIndex294 := position, tokenIndex
-			{
-				position295 := position
-				{
-					position296, tokenIndex296 := position, tokenIndex
-					if !_rules[ruleLocalSymbol]() {
-						goto l297
-					}
-					goto l296
-				l297:
-					position, tokenIndex = position296, tokenIndex296
-					if !_rules[ruleLocalLabel]() {
-						goto l298
-					}
-					goto l296
-				l298:
-					position, tokenIndex = position296, tokenIndex296
-					if !_rules[ruleSymbolName]() {
-						goto l294
-					}
-				}
-			l296:
-				if buffer[position] != rune(':') {
-					goto l294
+				if buffer[position] != rune('L') {
+					goto l297
 				}
 				position++
-				add(ruleLabel, position295)
-			}
-			return true
-		l294:
-			position, tokenIndex = position294, tokenIndex294
-			return false
-		},
-		/* 21 SymbolName <- <(([a-z] / [A-Z] / '.' / '_') ([a-z] / [A-Z] / '.' / ([0-9] / [0-9]) / '$' / '_')*)> */
-		func() bool {
-			position299, tokenIndex299 := position, tokenIndex
-			{
-				position300 := position
 				{
 					position301, tokenIndex301 := position, tokenIndex
 					if c := buffer[position]; c < rune('a') || c > rune('z') {
@@ -2566,592 +2518,640 @@
 					goto l301
 				l304:
 					position, tokenIndex = position301, tokenIndex301
+					{
+						position306, tokenIndex306 := position, tokenIndex
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l307
+						}
+						position++
+						goto l306
+					l307:
+						position, tokenIndex = position306, tokenIndex306
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l305
+						}
+						position++
+					}
+				l306:
+					goto l301
+				l305:
+					position, tokenIndex = position301, tokenIndex301
+					if buffer[position] != rune('$') {
+						goto l308
+					}
+					position++
+					goto l301
+				l308:
+					position, tokenIndex = position301, tokenIndex301
 					if buffer[position] != rune('_') {
-						goto l299
+						goto l297
 					}
 					position++
 				}
 			l301:
-			l305:
+			l299:
 				{
-					position306, tokenIndex306 := position, tokenIndex
+					position300, tokenIndex300 := position, tokenIndex
 					{
-						position307, tokenIndex307 := position, tokenIndex
+						position309, tokenIndex309 := position, tokenIndex
 						if c := buffer[position]; c < rune('a') || c > rune('z') {
-							goto l308
-						}
-						position++
-						goto l307
-					l308:
-						position, tokenIndex = position307, tokenIndex307
-						if c := buffer[position]; c < rune('A') || c > rune('Z') {
-							goto l309
-						}
-						position++
-						goto l307
-					l309:
-						position, tokenIndex = position307, tokenIndex307
-						if buffer[position] != rune('.') {
 							goto l310
 						}
 						position++
-						goto l307
+						goto l309
 					l310:
-						position, tokenIndex = position307, tokenIndex307
+						position, tokenIndex = position309, tokenIndex309
+						if c := buffer[position]; c < rune('A') || c > rune('Z') {
+							goto l311
+						}
+						position++
+						goto l309
+					l311:
+						position, tokenIndex = position309, tokenIndex309
+						if buffer[position] != rune('.') {
+							goto l312
+						}
+						position++
+						goto l309
+					l312:
+						position, tokenIndex = position309, tokenIndex309
 						{
-							position312, tokenIndex312 := position, tokenIndex
+							position314, tokenIndex314 := position, tokenIndex
+							if c := buffer[position]; c < rune('0') || c > rune('9') {
+								goto l315
+							}
+							position++
+							goto l314
+						l315:
+							position, tokenIndex = position314, tokenIndex314
 							if c := buffer[position]; c < rune('0') || c > rune('9') {
 								goto l313
 							}
 							position++
-							goto l312
-						l313:
-							position, tokenIndex = position312, tokenIndex312
-							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l311
-							}
-							position++
 						}
-					l312:
-						goto l307
-					l311:
-						position, tokenIndex = position307, tokenIndex307
+					l314:
+						goto l309
+					l313:
+						position, tokenIndex = position309, tokenIndex309
 						if buffer[position] != rune('$') {
-							goto l314
+							goto l316
 						}
 						position++
-						goto l307
-					l314:
-						position, tokenIndex = position307, tokenIndex307
+						goto l309
+					l316:
+						position, tokenIndex = position309, tokenIndex309
 						if buffer[position] != rune('_') {
-							goto l306
+							goto l300
 						}
 						position++
 					}
-				l307:
-					goto l305
-				l306:
-					position, tokenIndex = position306, tokenIndex306
+				l309:
+					goto l299
+				l300:
+					position, tokenIndex = position300, tokenIndex300
 				}
-				add(ruleSymbolName, position300)
+				add(ruleLocalSymbol, position298)
 			}
 			return true
-		l299:
-			position, tokenIndex = position299, tokenIndex299
+		l297:
+			position, tokenIndex = position297, tokenIndex297
 			return false
 		},
-		/* 22 LocalSymbol <- <('.' 'L' ([a-z] / [A-Z] / '.' / ([0-9] / [0-9]) / '$' / '_')+)> */
+		/* 23 LocalLabel <- <([0-9] ([0-9] / '$')*)> */
 		func() bool {
-			position315, tokenIndex315 := position, tokenIndex
+			position317, tokenIndex317 := position, tokenIndex
 			{
-				position316 := position
-				if buffer[position] != rune('.') {
-					goto l315
+				position318 := position
+				if c := buffer[position]; c < rune('0') || c > rune('9') {
+					goto l317
 				}
 				position++
-				if buffer[position] != rune('L') {
-					goto l315
-				}
-				position++
+			l319:
 				{
-					position319, tokenIndex319 := position, tokenIndex
-					if c := buffer[position]; c < rune('a') || c > rune('z') {
-						goto l320
+					position320, tokenIndex320 := position, tokenIndex
+					{
+						position321, tokenIndex321 := position, tokenIndex
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l322
+						}
+						position++
+						goto l321
+					l322:
+						position, tokenIndex = position321, tokenIndex321
+						if buffer[position] != rune('$') {
+							goto l320
+						}
+						position++
 					}
-					position++
+				l321:
 					goto l319
 				l320:
-					position, tokenIndex = position319, tokenIndex319
-					if c := buffer[position]; c < rune('A') || c > rune('Z') {
-						goto l321
-					}
-					position++
-					goto l319
-				l321:
-					position, tokenIndex = position319, tokenIndex319
-					if buffer[position] != rune('.') {
-						goto l322
-					}
-					position++
-					goto l319
-				l322:
-					position, tokenIndex = position319, tokenIndex319
-					{
-						position324, tokenIndex324 := position, tokenIndex
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l325
-						}
-						position++
-						goto l324
-					l325:
-						position, tokenIndex = position324, tokenIndex324
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l323
-						}
-						position++
-					}
-				l324:
-					goto l319
-				l323:
-					position, tokenIndex = position319, tokenIndex319
-					if buffer[position] != rune('$') {
-						goto l326
-					}
-					position++
-					goto l319
-				l326:
-					position, tokenIndex = position319, tokenIndex319
-					if buffer[position] != rune('_') {
-						goto l315
-					}
-					position++
+					position, tokenIndex = position320, tokenIndex320
 				}
-			l319:
-			l317:
+				add(ruleLocalLabel, position318)
+			}
+			return true
+		l317:
+			position, tokenIndex = position317, tokenIndex317
+			return false
+		},
+		/* 24 LocalLabelRef <- <([0-9] ([0-9] / '$')* ('b' / 'f'))> */
+		func() bool {
+			position323, tokenIndex323 := position, tokenIndex
+			{
+				position324 := position
+				if c := buffer[position]; c < rune('0') || c > rune('9') {
+					goto l323
+				}
+				position++
+			l325:
 				{
-					position318, tokenIndex318 := position, tokenIndex
+					position326, tokenIndex326 := position, tokenIndex
 					{
 						position327, tokenIndex327 := position, tokenIndex
-						if c := buffer[position]; c < rune('a') || c > rune('z') {
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
 							goto l328
 						}
 						position++
 						goto l327
 					l328:
 						position, tokenIndex = position327, tokenIndex327
-						if c := buffer[position]; c < rune('A') || c > rune('Z') {
-							goto l329
-						}
-						position++
-						goto l327
-					l329:
-						position, tokenIndex = position327, tokenIndex327
-						if buffer[position] != rune('.') {
-							goto l330
-						}
-						position++
-						goto l327
-					l330:
-						position, tokenIndex = position327, tokenIndex327
-						{
-							position332, tokenIndex332 := position, tokenIndex
-							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l333
-							}
-							position++
-							goto l332
-						l333:
-							position, tokenIndex = position332, tokenIndex332
-							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l331
-							}
-							position++
-						}
-					l332:
-						goto l327
-					l331:
-						position, tokenIndex = position327, tokenIndex327
 						if buffer[position] != rune('$') {
-							goto l334
-						}
-						position++
-						goto l327
-					l334:
-						position, tokenIndex = position327, tokenIndex327
-						if buffer[position] != rune('_') {
-							goto l318
+							goto l326
 						}
 						position++
 					}
 				l327:
-					goto l317
-				l318:
-					position, tokenIndex = position318, tokenIndex318
+					goto l325
+				l326:
+					position, tokenIndex = position326, tokenIndex326
 				}
-				add(ruleLocalSymbol, position316)
-			}
-			return true
-		l315:
-			position, tokenIndex = position315, tokenIndex315
-			return false
-		},
-		/* 23 LocalLabel <- <([0-9] ([0-9] / '$')*)> */
-		func() bool {
-			position335, tokenIndex335 := position, tokenIndex
-			{
-				position336 := position
-				if c := buffer[position]; c < rune('0') || c > rune('9') {
-					goto l335
-				}
-				position++
-			l337:
 				{
-					position338, tokenIndex338 := position, tokenIndex
-					{
-						position339, tokenIndex339 := position, tokenIndex
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l340
-						}
-						position++
-						goto l339
-					l340:
-						position, tokenIndex = position339, tokenIndex339
-						if buffer[position] != rune('$') {
-							goto l338
-						}
-						position++
+					position329, tokenIndex329 := position, tokenIndex
+					if buffer[position] != rune('b') {
+						goto l330
 					}
-				l339:
-					goto l337
-				l338:
-					position, tokenIndex = position338, tokenIndex338
+					position++
+					goto l329
+				l330:
+					position, tokenIndex = position329, tokenIndex329
+					if buffer[position] != rune('f') {
+						goto l323
+					}
+					position++
 				}
-				add(ruleLocalLabel, position336)
+			l329:
+				add(ruleLocalLabelRef, position324)
 			}
 			return true
-		l335:
-			position, tokenIndex = position335, tokenIndex335
+		l323:
+			position, tokenIndex = position323, tokenIndex323
 			return false
 		},
-		/* 24 LocalLabelRef <- <([0-9] ([0-9] / '$')* ('b' / 'f'))> */
+		/* 25 Instruction <- <(InstructionName (WS InstructionArg (WS? ',' WS? InstructionArg)*)?)> */
+		func() bool {
+			position331, tokenIndex331 := position, tokenIndex
+			{
+				position332 := position
+				if !_rules[ruleInstructionName]() {
+					goto l331
+				}
+				{
+					position333, tokenIndex333 := position, tokenIndex
+					if !_rules[ruleWS]() {
+						goto l333
+					}
+					if !_rules[ruleInstructionArg]() {
+						goto l333
+					}
+				l335:
+					{
+						position336, tokenIndex336 := position, tokenIndex
+						{
+							position337, tokenIndex337 := position, tokenIndex
+							if !_rules[ruleWS]() {
+								goto l337
+							}
+							goto l338
+						l337:
+							position, tokenIndex = position337, tokenIndex337
+						}
+					l338:
+						if buffer[position] != rune(',') {
+							goto l336
+						}
+						position++
+						{
+							position339, tokenIndex339 := position, tokenIndex
+							if !_rules[ruleWS]() {
+								goto l339
+							}
+							goto l340
+						l339:
+							position, tokenIndex = position339, tokenIndex339
+						}
+					l340:
+						if !_rules[ruleInstructionArg]() {
+							goto l336
+						}
+						goto l335
+					l336:
+						position, tokenIndex = position336, tokenIndex336
+					}
+					goto l334
+				l333:
+					position, tokenIndex = position333, tokenIndex333
+				}
+			l334:
+				add(ruleInstruction, position332)
+			}
+			return true
+		l331:
+			position, tokenIndex = position331, tokenIndex331
+			return false
+		},
+		/* 26 InstructionName <- <(([a-z] / [A-Z]) ([a-z] / [A-Z] / ([0-9] / [0-9]))* ('.' / '+' / '-')?)> */
 		func() bool {
 			position341, tokenIndex341 := position, tokenIndex
 			{
 				position342 := position
-				if c := buffer[position]; c < rune('0') || c > rune('9') {
-					goto l341
-				}
-				position++
-			l343:
 				{
-					position344, tokenIndex344 := position, tokenIndex
-					{
-						position345, tokenIndex345 := position, tokenIndex
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l346
-						}
-						position++
-						goto l345
-					l346:
-						position, tokenIndex = position345, tokenIndex345
-						if buffer[position] != rune('$') {
-							goto l344
-						}
-						position++
-					}
-				l345:
-					goto l343
-				l344:
-					position, tokenIndex = position344, tokenIndex344
-				}
-				{
-					position347, tokenIndex347 := position, tokenIndex
-					if buffer[position] != rune('b') {
-						goto l348
+					position343, tokenIndex343 := position, tokenIndex
+					if c := buffer[position]; c < rune('a') || c > rune('z') {
+						goto l344
 					}
 					position++
-					goto l347
-				l348:
-					position, tokenIndex = position347, tokenIndex347
-					if buffer[position] != rune('f') {
+					goto l343
+				l344:
+					position, tokenIndex = position343, tokenIndex343
+					if c := buffer[position]; c < rune('A') || c > rune('Z') {
 						goto l341
 					}
 					position++
 				}
-			l347:
-				add(ruleLocalLabelRef, position342)
+			l343:
+			l345:
+				{
+					position346, tokenIndex346 := position, tokenIndex
+					{
+						position347, tokenIndex347 := position, tokenIndex
+						if c := buffer[position]; c < rune('a') || c > rune('z') {
+							goto l348
+						}
+						position++
+						goto l347
+					l348:
+						position, tokenIndex = position347, tokenIndex347
+						if c := buffer[position]; c < rune('A') || c > rune('Z') {
+							goto l349
+						}
+						position++
+						goto l347
+					l349:
+						position, tokenIndex = position347, tokenIndex347
+						{
+							position350, tokenIndex350 := position, tokenIndex
+							if c := buffer[position]; c < rune('0') || c > rune('9') {
+								goto l351
+							}
+							position++
+							goto l350
+						l351:
+							position, tokenIndex = position350, tokenIndex350
+							if c := buffer[position]; c < rune('0') || c > rune('9') {
+								goto l346
+							}
+							position++
+						}
+					l350:
+					}
+				l347:
+					goto l345
+				l346:
+					position, tokenIndex = position346, tokenIndex346
+				}
+				{
+					position352, tokenIndex352 := position, tokenIndex
+					{
+						position354, tokenIndex354 := position, tokenIndex
+						if buffer[position] != rune('.') {
+							goto l355
+						}
+						position++
+						goto l354
+					l355:
+						position, tokenIndex = position354, tokenIndex354
+						if buffer[position] != rune('+') {
+							goto l356
+						}
+						position++
+						goto l354
+					l356:
+						position, tokenIndex = position354, tokenIndex354
+						if buffer[position] != rune('-') {
+							goto l352
+						}
+						position++
+					}
+				l354:
+					goto l353
+				l352:
+					position, tokenIndex = position352, tokenIndex352
+				}
+			l353:
+				add(ruleInstructionName, position342)
 			}
 			return true
 		l341:
 			position, tokenIndex = position341, tokenIndex341
 			return false
 		},
-		/* 25 Instruction <- <(InstructionName (WS InstructionArg (WS? ',' WS? InstructionArg)*)?)> */
+		/* 27 InstructionArg <- <(IndirectionIndicator? (RegisterOrConstant / LocalLabelRef / TOCRefHigh / TOCRefLow / MemoryRef) AVX512Token*)> */
 		func() bool {
-			position349, tokenIndex349 := position, tokenIndex
+			position357, tokenIndex357 := position, tokenIndex
 			{
-				position350 := position
-				if !_rules[ruleInstructionName]() {
-					goto l349
-				}
+				position358 := position
 				{
-					position351, tokenIndex351 := position, tokenIndex
-					if !_rules[ruleWS]() {
-						goto l351
+					position359, tokenIndex359 := position, tokenIndex
+					if !_rules[ruleIndirectionIndicator]() {
+						goto l359
 					}
-					if !_rules[ruleInstructionArg]() {
-						goto l351
-					}
-				l353:
-					{
-						position354, tokenIndex354 := position, tokenIndex
-						{
-							position355, tokenIndex355 := position, tokenIndex
-							if !_rules[ruleWS]() {
-								goto l355
-							}
-							goto l356
-						l355:
-							position, tokenIndex = position355, tokenIndex355
-						}
-					l356:
-						if buffer[position] != rune(',') {
-							goto l354
-						}
-						position++
-						{
-							position357, tokenIndex357 := position, tokenIndex
-							if !_rules[ruleWS]() {
-								goto l357
-							}
-							goto l358
-						l357:
-							position, tokenIndex = position357, tokenIndex357
-						}
-					l358:
-						if !_rules[ruleInstructionArg]() {
-							goto l354
-						}
-						goto l353
-					l354:
-						position, tokenIndex = position354, tokenIndex354
-					}
-					goto l352
-				l351:
-					position, tokenIndex = position351, tokenIndex351
+					goto l360
+				l359:
+					position, tokenIndex = position359, tokenIndex359
 				}
-			l352:
-				add(ruleInstruction, position350)
-			}
-			return true
-		l349:
-			position, tokenIndex = position349, tokenIndex349
-			return false
-		},
-		/* 26 InstructionName <- <(([a-z] / [A-Z]) ([a-z] / [A-Z] / ([0-9] / [0-9]))* ('.' / '+' / '-')?)> */
-		func() bool {
-			position359, tokenIndex359 := position, tokenIndex
-			{
-				position360 := position
+			l360:
 				{
 					position361, tokenIndex361 := position, tokenIndex
-					if c := buffer[position]; c < rune('a') || c > rune('z') {
+					if !_rules[ruleRegisterOrConstant]() {
 						goto l362
 					}
-					position++
 					goto l361
 				l362:
 					position, tokenIndex = position361, tokenIndex361
-					if c := buffer[position]; c < rune('A') || c > rune('Z') {
-						goto l359
+					if !_rules[ruleLocalLabelRef]() {
+						goto l363
 					}
-					position++
+					goto l361
+				l363:
+					position, tokenIndex = position361, tokenIndex361
+					if !_rules[ruleTOCRefHigh]() {
+						goto l364
+					}
+					goto l361
+				l364:
+					position, tokenIndex = position361, tokenIndex361
+					if !_rules[ruleTOCRefLow]() {
+						goto l365
+					}
+					goto l361
+				l365:
+					position, tokenIndex = position361, tokenIndex361
+					if !_rules[ruleMemoryRef]() {
+						goto l357
+					}
 				}
 			l361:
-			l363:
+			l366:
 				{
-					position364, tokenIndex364 := position, tokenIndex
-					{
-						position365, tokenIndex365 := position, tokenIndex
-						if c := buffer[position]; c < rune('a') || c > rune('z') {
-							goto l366
-						}
-						position++
-						goto l365
-					l366:
-						position, tokenIndex = position365, tokenIndex365
-						if c := buffer[position]; c < rune('A') || c > rune('Z') {
-							goto l367
-						}
-						position++
-						goto l365
-					l367:
-						position, tokenIndex = position365, tokenIndex365
-						{
-							position368, tokenIndex368 := position, tokenIndex
-							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l369
-							}
-							position++
-							goto l368
-						l369:
-							position, tokenIndex = position368, tokenIndex368
-							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l364
-							}
-							position++
-						}
-					l368:
+					position367, tokenIndex367 := position, tokenIndex
+					if !_rules[ruleAVX512Token]() {
+						goto l367
 					}
-				l365:
-					goto l363
-				l364:
-					position, tokenIndex = position364, tokenIndex364
+					goto l366
+				l367:
+					position, tokenIndex = position367, tokenIndex367
 				}
+				add(ruleInstructionArg, position358)
+			}
+			return true
+		l357:
+			position, tokenIndex = position357, tokenIndex357
+			return false
+		},
+		/* 28 AVX512Token <- <(WS? '{' '%'? ([0-9] / [a-z])* '}')> */
+		func() bool {
+			position368, tokenIndex368 := position, tokenIndex
+			{
+				position369 := position
 				{
 					position370, tokenIndex370 := position, tokenIndex
-					{
-						position372, tokenIndex372 := position, tokenIndex
-						if buffer[position] != rune('.') {
-							goto l373
-						}
-						position++
-						goto l372
-					l373:
-						position, tokenIndex = position372, tokenIndex372
-						if buffer[position] != rune('+') {
-							goto l374
-						}
-						position++
-						goto l372
-					l374:
-						position, tokenIndex = position372, tokenIndex372
-						if buffer[position] != rune('-') {
-							goto l370
-						}
-						position++
+					if !_rules[ruleWS]() {
+						goto l370
 					}
-				l372:
 					goto l371
 				l370:
 					position, tokenIndex = position370, tokenIndex370
 				}
 			l371:
-				add(ruleInstructionName, position360)
-			}
-			return true
-		l359:
-			position, tokenIndex = position359, tokenIndex359
-			return false
-		},
-		/* 27 InstructionArg <- <(IndirectionIndicator? (RegisterOrConstant / LocalLabelRef / TOCRefHigh / TOCRefLow / MemoryRef) AVX512Token*)> */
-		func() bool {
-			position375, tokenIndex375 := position, tokenIndex
-			{
-				position376 := position
-				{
-					position377, tokenIndex377 := position, tokenIndex
-					if !_rules[ruleIndirectionIndicator]() {
-						goto l377
-					}
-					goto l378
-				l377:
-					position, tokenIndex = position377, tokenIndex377
-				}
-			l378:
-				{
-					position379, tokenIndex379 := position, tokenIndex
-					if !_rules[ruleRegisterOrConstant]() {
-						goto l380
-					}
-					goto l379
-				l380:
-					position, tokenIndex = position379, tokenIndex379
-					if !_rules[ruleLocalLabelRef]() {
-						goto l381
-					}
-					goto l379
-				l381:
-					position, tokenIndex = position379, tokenIndex379
-					if !_rules[ruleTOCRefHigh]() {
-						goto l382
-					}
-					goto l379
-				l382:
-					position, tokenIndex = position379, tokenIndex379
-					if !_rules[ruleTOCRefLow]() {
-						goto l383
-					}
-					goto l379
-				l383:
-					position, tokenIndex = position379, tokenIndex379
-					if !_rules[ruleMemoryRef]() {
-						goto l375
-					}
-				}
-			l379:
-			l384:
-				{
-					position385, tokenIndex385 := position, tokenIndex
-					if !_rules[ruleAVX512Token]() {
-						goto l385
-					}
-					goto l384
-				l385:
-					position, tokenIndex = position385, tokenIndex385
-				}
-				add(ruleInstructionArg, position376)
-			}
-			return true
-		l375:
-			position, tokenIndex = position375, tokenIndex375
-			return false
-		},
-		/* 28 AVX512Token <- <(WS? '{' '%'? ([0-9] / [a-z])* '}')> */
-		func() bool {
-			position386, tokenIndex386 := position, tokenIndex
-			{
-				position387 := position
-				{
-					position388, tokenIndex388 := position, tokenIndex
-					if !_rules[ruleWS]() {
-						goto l388
-					}
-					goto l389
-				l388:
-					position, tokenIndex = position388, tokenIndex388
-				}
-			l389:
 				if buffer[position] != rune('{') {
-					goto l386
+					goto l368
 				}
 				position++
 				{
-					position390, tokenIndex390 := position, tokenIndex
+					position372, tokenIndex372 := position, tokenIndex
 					if buffer[position] != rune('%') {
-						goto l390
+						goto l372
 					}
 					position++
-					goto l391
-				l390:
-					position, tokenIndex = position390, tokenIndex390
+					goto l373
+				l372:
+					position, tokenIndex = position372, tokenIndex372
 				}
-			l391:
-			l392:
+			l373:
+			l374:
 				{
-					position393, tokenIndex393 := position, tokenIndex
+					position375, tokenIndex375 := position, tokenIndex
 					{
-						position394, tokenIndex394 := position, tokenIndex
+						position376, tokenIndex376 := position, tokenIndex
 						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l395
+							goto l377
 						}
 						position++
-						goto l394
-					l395:
-						position, tokenIndex = position394, tokenIndex394
+						goto l376
+					l377:
+						position, tokenIndex = position376, tokenIndex376
 						if c := buffer[position]; c < rune('a') || c > rune('z') {
-							goto l393
+							goto l375
 						}
 						position++
 					}
-				l394:
-					goto l392
-				l393:
-					position, tokenIndex = position393, tokenIndex393
+				l376:
+					goto l374
+				l375:
+					position, tokenIndex = position375, tokenIndex375
 				}
 				if buffer[position] != rune('}') {
-					goto l386
+					goto l368
 				}
 				position++
-				add(ruleAVX512Token, position387)
+				add(ruleAVX512Token, position369)
 			}
 			return true
-		l386:
-			position, tokenIndex = position386, tokenIndex386
+		l368:
+			position, tokenIndex = position368, tokenIndex368
 			return false
 		},
 		/* 29 TOCRefHigh <- <('.' 'T' 'O' 'C' '.' '-' (('0' 'b') / ('.' 'L' ([a-z] / [A-Z] / '_' / [0-9])+)) ('@' ('h' / 'H') ('a' / 'A')))> */
 		func() bool {
+			position378, tokenIndex378 := position, tokenIndex
+			{
+				position379 := position
+				if buffer[position] != rune('.') {
+					goto l378
+				}
+				position++
+				if buffer[position] != rune('T') {
+					goto l378
+				}
+				position++
+				if buffer[position] != rune('O') {
+					goto l378
+				}
+				position++
+				if buffer[position] != rune('C') {
+					goto l378
+				}
+				position++
+				if buffer[position] != rune('.') {
+					goto l378
+				}
+				position++
+				if buffer[position] != rune('-') {
+					goto l378
+				}
+				position++
+				{
+					position380, tokenIndex380 := position, tokenIndex
+					if buffer[position] != rune('0') {
+						goto l381
+					}
+					position++
+					if buffer[position] != rune('b') {
+						goto l381
+					}
+					position++
+					goto l380
+				l381:
+					position, tokenIndex = position380, tokenIndex380
+					if buffer[position] != rune('.') {
+						goto l378
+					}
+					position++
+					if buffer[position] != rune('L') {
+						goto l378
+					}
+					position++
+					{
+						position384, tokenIndex384 := position, tokenIndex
+						if c := buffer[position]; c < rune('a') || c > rune('z') {
+							goto l385
+						}
+						position++
+						goto l384
+					l385:
+						position, tokenIndex = position384, tokenIndex384
+						if c := buffer[position]; c < rune('A') || c > rune('Z') {
+							goto l386
+						}
+						position++
+						goto l384
+					l386:
+						position, tokenIndex = position384, tokenIndex384
+						if buffer[position] != rune('_') {
+							goto l387
+						}
+						position++
+						goto l384
+					l387:
+						position, tokenIndex = position384, tokenIndex384
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l378
+						}
+						position++
+					}
+				l384:
+				l382:
+					{
+						position383, tokenIndex383 := position, tokenIndex
+						{
+							position388, tokenIndex388 := position, tokenIndex
+							if c := buffer[position]; c < rune('a') || c > rune('z') {
+								goto l389
+							}
+							position++
+							goto l388
+						l389:
+							position, tokenIndex = position388, tokenIndex388
+							if c := buffer[position]; c < rune('A') || c > rune('Z') {
+								goto l390
+							}
+							position++
+							goto l388
+						l390:
+							position, tokenIndex = position388, tokenIndex388
+							if buffer[position] != rune('_') {
+								goto l391
+							}
+							position++
+							goto l388
+						l391:
+							position, tokenIndex = position388, tokenIndex388
+							if c := buffer[position]; c < rune('0') || c > rune('9') {
+								goto l383
+							}
+							position++
+						}
+					l388:
+						goto l382
+					l383:
+						position, tokenIndex = position383, tokenIndex383
+					}
+				}
+			l380:
+				if buffer[position] != rune('@') {
+					goto l378
+				}
+				position++
+				{
+					position392, tokenIndex392 := position, tokenIndex
+					if buffer[position] != rune('h') {
+						goto l393
+					}
+					position++
+					goto l392
+				l393:
+					position, tokenIndex = position392, tokenIndex392
+					if buffer[position] != rune('H') {
+						goto l378
+					}
+					position++
+				}
+			l392:
+				{
+					position394, tokenIndex394 := position, tokenIndex
+					if buffer[position] != rune('a') {
+						goto l395
+					}
+					position++
+					goto l394
+				l395:
+					position, tokenIndex = position394, tokenIndex394
+					if buffer[position] != rune('A') {
+						goto l378
+					}
+					position++
+				}
+			l394:
+				add(ruleTOCRefHigh, position379)
+			}
+			return true
+		l378:
+			position, tokenIndex = position378, tokenIndex378
+			return false
+		},
+		/* 30 TOCRefLow <- <('.' 'T' 'O' 'C' '.' '-' (('0' 'b') / ('.' 'L' ([a-z] / [A-Z] / '_' / [0-9])+)) ('@' ('l' / 'L')))> */
+		func() bool {
 			position396, tokenIndex396 := position, tokenIndex
 			{
 				position397 := position
@@ -3273,538 +3273,494 @@
 				position++
 				{
 					position410, tokenIndex410 := position, tokenIndex
-					if buffer[position] != rune('h') {
+					if buffer[position] != rune('l') {
 						goto l411
 					}
 					position++
 					goto l410
 				l411:
 					position, tokenIndex = position410, tokenIndex410
-					if buffer[position] != rune('H') {
+					if buffer[position] != rune('L') {
 						goto l396
 					}
 					position++
 				}
 			l410:
-				{
-					position412, tokenIndex412 := position, tokenIndex
-					if buffer[position] != rune('a') {
-						goto l413
-					}
-					position++
-					goto l412
-				l413:
-					position, tokenIndex = position412, tokenIndex412
-					if buffer[position] != rune('A') {
-						goto l396
-					}
-					position++
-				}
-			l412:
-				add(ruleTOCRefHigh, position397)
+				add(ruleTOCRefLow, position397)
 			}
 			return true
 		l396:
 			position, tokenIndex = position396, tokenIndex396
 			return false
 		},
-		/* 30 TOCRefLow <- <('.' 'T' 'O' 'C' '.' '-' (('0' 'b') / ('.' 'L' ([a-z] / [A-Z] / '_' / [0-9])+)) ('@' ('l' / 'L')))> */
+		/* 31 IndirectionIndicator <- <'*'> */
+		func() bool {
+			position412, tokenIndex412 := position, tokenIndex
+			{
+				position413 := position
+				if buffer[position] != rune('*') {
+					goto l412
+				}
+				position++
+				add(ruleIndirectionIndicator, position413)
+			}
+			return true
+		l412:
+			position, tokenIndex = position412, tokenIndex412
+			return false
+		},
+		/* 32 RegisterOrConstant <- <((('%' ([a-z] / [A-Z]) ([a-z] / [A-Z] / ([0-9] / [0-9]))*) / ('$'? ((Offset Offset) / Offset))) !('f' / 'b' / ':' / '(' / '+' / '-'))> */
 		func() bool {
 			position414, tokenIndex414 := position, tokenIndex
 			{
 				position415 := position
-				if buffer[position] != rune('.') {
-					goto l414
-				}
-				position++
-				if buffer[position] != rune('T') {
-					goto l414
-				}
-				position++
-				if buffer[position] != rune('O') {
-					goto l414
-				}
-				position++
-				if buffer[position] != rune('C') {
-					goto l414
-				}
-				position++
-				if buffer[position] != rune('.') {
-					goto l414
-				}
-				position++
-				if buffer[position] != rune('-') {
-					goto l414
-				}
-				position++
 				{
 					position416, tokenIndex416 := position, tokenIndex
-					if buffer[position] != rune('0') {
+					if buffer[position] != rune('%') {
 						goto l417
 					}
 					position++
-					if buffer[position] != rune('b') {
-						goto l417
+					{
+						position418, tokenIndex418 := position, tokenIndex
+						if c := buffer[position]; c < rune('a') || c > rune('z') {
+							goto l419
+						}
+						position++
+						goto l418
+					l419:
+						position, tokenIndex = position418, tokenIndex418
+						if c := buffer[position]; c < rune('A') || c > rune('Z') {
+							goto l417
+						}
+						position++
 					}
-					position++
+				l418:
+				l420:
+					{
+						position421, tokenIndex421 := position, tokenIndex
+						{
+							position422, tokenIndex422 := position, tokenIndex
+							if c := buffer[position]; c < rune('a') || c > rune('z') {
+								goto l423
+							}
+							position++
+							goto l422
+						l423:
+							position, tokenIndex = position422, tokenIndex422
+							if c := buffer[position]; c < rune('A') || c > rune('Z') {
+								goto l424
+							}
+							position++
+							goto l422
+						l424:
+							position, tokenIndex = position422, tokenIndex422
+							{
+								position425, tokenIndex425 := position, tokenIndex
+								if c := buffer[position]; c < rune('0') || c > rune('9') {
+									goto l426
+								}
+								position++
+								goto l425
+							l426:
+								position, tokenIndex = position425, tokenIndex425
+								if c := buffer[position]; c < rune('0') || c > rune('9') {
+									goto l421
+								}
+								position++
+							}
+						l425:
+						}
+					l422:
+						goto l420
+					l421:
+						position, tokenIndex = position421, tokenIndex421
+					}
 					goto l416
 				l417:
 					position, tokenIndex = position416, tokenIndex416
-					if buffer[position] != rune('.') {
-						goto l414
-					}
-					position++
-					if buffer[position] != rune('L') {
-						goto l414
-					}
-					position++
 					{
-						position420, tokenIndex420 := position, tokenIndex
-						if c := buffer[position]; c < rune('a') || c > rune('z') {
-							goto l421
+						position427, tokenIndex427 := position, tokenIndex
+						if buffer[position] != rune('$') {
+							goto l427
 						}
 						position++
-						goto l420
-					l421:
-						position, tokenIndex = position420, tokenIndex420
-						if c := buffer[position]; c < rune('A') || c > rune('Z') {
-							goto l422
+						goto l428
+					l427:
+						position, tokenIndex = position427, tokenIndex427
+					}
+				l428:
+					{
+						position429, tokenIndex429 := position, tokenIndex
+						if !_rules[ruleOffset]() {
+							goto l430
 						}
-						position++
-						goto l420
-					l422:
-						position, tokenIndex = position420, tokenIndex420
-						if buffer[position] != rune('_') {
-							goto l423
+						if !_rules[ruleOffset]() {
+							goto l430
 						}
-						position++
-						goto l420
-					l423:
-						position, tokenIndex = position420, tokenIndex420
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
+						goto l429
+					l430:
+						position, tokenIndex = position429, tokenIndex429
+						if !_rules[ruleOffset]() {
 							goto l414
 						}
-						position++
 					}
-				l420:
-				l418:
-					{
-						position419, tokenIndex419 := position, tokenIndex
-						{
-							position424, tokenIndex424 := position, tokenIndex
-							if c := buffer[position]; c < rune('a') || c > rune('z') {
-								goto l425
-							}
-							position++
-							goto l424
-						l425:
-							position, tokenIndex = position424, tokenIndex424
-							if c := buffer[position]; c < rune('A') || c > rune('Z') {
-								goto l426
-							}
-							position++
-							goto l424
-						l426:
-							position, tokenIndex = position424, tokenIndex424
-							if buffer[position] != rune('_') {
-								goto l427
-							}
-							position++
-							goto l424
-						l427:
-							position, tokenIndex = position424, tokenIndex424
-							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l419
-							}
-							position++
-						}
-					l424:
-						goto l418
-					l419:
-						position, tokenIndex = position419, tokenIndex419
-					}
+				l429:
 				}
 			l416:
-				if buffer[position] != rune('@') {
-					goto l414
-				}
-				position++
 				{
-					position428, tokenIndex428 := position, tokenIndex
-					if buffer[position] != rune('l') {
-						goto l429
+					position431, tokenIndex431 := position, tokenIndex
+					{
+						position432, tokenIndex432 := position, tokenIndex
+						if buffer[position] != rune('f') {
+							goto l433
+						}
+						position++
+						goto l432
+					l433:
+						position, tokenIndex = position432, tokenIndex432
+						if buffer[position] != rune('b') {
+							goto l434
+						}
+						position++
+						goto l432
+					l434:
+						position, tokenIndex = position432, tokenIndex432
+						if buffer[position] != rune(':') {
+							goto l435
+						}
+						position++
+						goto l432
+					l435:
+						position, tokenIndex = position432, tokenIndex432
+						if buffer[position] != rune('(') {
+							goto l436
+						}
+						position++
+						goto l432
+					l436:
+						position, tokenIndex = position432, tokenIndex432
+						if buffer[position] != rune('+') {
+							goto l437
+						}
+						position++
+						goto l432
+					l437:
+						position, tokenIndex = position432, tokenIndex432
+						if buffer[position] != rune('-') {
+							goto l431
+						}
+						position++
 					}
-					position++
-					goto l428
-				l429:
-					position, tokenIndex = position428, tokenIndex428
-					if buffer[position] != rune('L') {
-						goto l414
-					}
-					position++
+				l432:
+					goto l414
+				l431:
+					position, tokenIndex = position431, tokenIndex431
 				}
-			l428:
-				add(ruleTOCRefLow, position415)
+				add(ruleRegisterOrConstant, position415)
 			}
 			return true
 		l414:
 			position, tokenIndex = position414, tokenIndex414
 			return false
 		},
-		/* 31 IndirectionIndicator <- <'*'> */
+		/* 33 MemoryRef <- <((SymbolRef BaseIndexScale) / SymbolRef / (Offset* BaseIndexScale) / (SegmentRegister Offset BaseIndexScale) / (SegmentRegister BaseIndexScale) / (SegmentRegister Offset) / BaseIndexScale)> */
 		func() bool {
-			position430, tokenIndex430 := position, tokenIndex
+			position438, tokenIndex438 := position, tokenIndex
 			{
-				position431 := position
-				if buffer[position] != rune('*') {
-					goto l430
-				}
-				position++
-				add(ruleIndirectionIndicator, position431)
-			}
-			return true
-		l430:
-			position, tokenIndex = position430, tokenIndex430
-			return false
-		},
-		/* 32 RegisterOrConstant <- <((('%' ([a-z] / [A-Z]) ([a-z] / [A-Z] / ([0-9] / [0-9]))*) / ('$'? ((Offset Offset) / Offset))) !('f' / 'b' / ':' / '(' / '+' / '-'))> */
-		func() bool {
-			position432, tokenIndex432 := position, tokenIndex
-			{
-				position433 := position
+				position439 := position
 				{
-					position434, tokenIndex434 := position, tokenIndex
-					if buffer[position] != rune('%') {
-						goto l435
+					position440, tokenIndex440 := position, tokenIndex
+					if !_rules[ruleSymbolRef]() {
+						goto l441
 					}
-					position++
-					{
-						position436, tokenIndex436 := position, tokenIndex
-						if c := buffer[position]; c < rune('a') || c > rune('z') {
-							goto l437
-						}
-						position++
-						goto l436
-					l437:
-						position, tokenIndex = position436, tokenIndex436
-						if c := buffer[position]; c < rune('A') || c > rune('Z') {
-							goto l435
-						}
-						position++
+					if !_rules[ruleBaseIndexScale]() {
+						goto l441
 					}
-				l436:
-				l438:
-					{
-						position439, tokenIndex439 := position, tokenIndex
-						{
-							position440, tokenIndex440 := position, tokenIndex
-							if c := buffer[position]; c < rune('a') || c > rune('z') {
-								goto l441
-							}
-							position++
-							goto l440
-						l441:
-							position, tokenIndex = position440, tokenIndex440
-							if c := buffer[position]; c < rune('A') || c > rune('Z') {
-								goto l442
-							}
-							position++
-							goto l440
-						l442:
-							position, tokenIndex = position440, tokenIndex440
-							{
-								position443, tokenIndex443 := position, tokenIndex
-								if c := buffer[position]; c < rune('0') || c > rune('9') {
-									goto l444
-								}
-								position++
-								goto l443
-							l444:
-								position, tokenIndex = position443, tokenIndex443
-								if c := buffer[position]; c < rune('0') || c > rune('9') {
-									goto l439
-								}
-								position++
-							}
-						l443:
-						}
-					l440:
-						goto l438
-					l439:
-						position, tokenIndex = position439, tokenIndex439
+					goto l440
+				l441:
+					position, tokenIndex = position440, tokenIndex440
+					if !_rules[ruleSymbolRef]() {
+						goto l442
 					}
-					goto l434
-				l435:
-					position, tokenIndex = position434, tokenIndex434
+					goto l440
+				l442:
+					position, tokenIndex = position440, tokenIndex440
+				l444:
 					{
 						position445, tokenIndex445 := position, tokenIndex
-						if buffer[position] != rune('$') {
+						if !_rules[ruleOffset]() {
 							goto l445
 						}
-						position++
-						goto l446
+						goto l444
 					l445:
 						position, tokenIndex = position445, tokenIndex445
 					}
+					if !_rules[ruleBaseIndexScale]() {
+						goto l443
+					}
+					goto l440
+				l443:
+					position, tokenIndex = position440, tokenIndex440
+					if !_rules[ruleSegmentRegister]() {
+						goto l446
+					}
+					if !_rules[ruleOffset]() {
+						goto l446
+					}
+					if !_rules[ruleBaseIndexScale]() {
+						goto l446
+					}
+					goto l440
 				l446:
-					{
-						position447, tokenIndex447 := position, tokenIndex
-						if !_rules[ruleOffset]() {
-							goto l448
-						}
-						if !_rules[ruleOffset]() {
-							goto l448
-						}
+					position, tokenIndex = position440, tokenIndex440
+					if !_rules[ruleSegmentRegister]() {
 						goto l447
-					l448:
-						position, tokenIndex = position447, tokenIndex447
-						if !_rules[ruleOffset]() {
-							goto l432
-						}
 					}
+					if !_rules[ruleBaseIndexScale]() {
+						goto l447
+					}
+					goto l440
 				l447:
-				}
-			l434:
-				{
-					position449, tokenIndex449 := position, tokenIndex
-					{
-						position450, tokenIndex450 := position, tokenIndex
-						if buffer[position] != rune('f') {
-							goto l451
-						}
-						position++
-						goto l450
-					l451:
-						position, tokenIndex = position450, tokenIndex450
-						if buffer[position] != rune('b') {
-							goto l452
-						}
-						position++
-						goto l450
-					l452:
-						position, tokenIndex = position450, tokenIndex450
-						if buffer[position] != rune(':') {
-							goto l453
-						}
-						position++
-						goto l450
-					l453:
-						position, tokenIndex = position450, tokenIndex450
-						if buffer[position] != rune('(') {
-							goto l454
-						}
-						position++
-						goto l450
-					l454:
-						position, tokenIndex = position450, tokenIndex450
-						if buffer[position] != rune('+') {
-							goto l455
-						}
-						position++
-						goto l450
-					l455:
-						position, tokenIndex = position450, tokenIndex450
-						if buffer[position] != rune('-') {
-							goto l449
-						}
-						position++
-					}
-				l450:
-					goto l432
-				l449:
-					position, tokenIndex = position449, tokenIndex449
-				}
-				add(ruleRegisterOrConstant, position433)
-			}
-			return true
-		l432:
-			position, tokenIndex = position432, tokenIndex432
-			return false
-		},
-		/* 33 MemoryRef <- <((SymbolRef BaseIndexScale) / SymbolRef / (Offset* BaseIndexScale) / (SegmentRegister Offset BaseIndexScale) / (SegmentRegister BaseIndexScale) / (SegmentRegister Offset) / BaseIndexScale)> */
-		func() bool {
-			position456, tokenIndex456 := position, tokenIndex
-			{
-				position457 := position
-				{
-					position458, tokenIndex458 := position, tokenIndex
-					if !_rules[ruleSymbolRef]() {
-						goto l459
-					}
-					if !_rules[ruleBaseIndexScale]() {
-						goto l459
-					}
-					goto l458
-				l459:
-					position, tokenIndex = position458, tokenIndex458
-					if !_rules[ruleSymbolRef]() {
-						goto l460
-					}
-					goto l458
-				l460:
-					position, tokenIndex = position458, tokenIndex458
-				l462:
-					{
-						position463, tokenIndex463 := position, tokenIndex
-						if !_rules[ruleOffset]() {
-							goto l463
-						}
-						goto l462
-					l463:
-						position, tokenIndex = position463, tokenIndex463
-					}
-					if !_rules[ruleBaseIndexScale]() {
-						goto l461
-					}
-					goto l458
-				l461:
-					position, tokenIndex = position458, tokenIndex458
+					position, tokenIndex = position440, tokenIndex440
 					if !_rules[ruleSegmentRegister]() {
-						goto l464
+						goto l448
 					}
 					if !_rules[ruleOffset]() {
-						goto l464
+						goto l448
 					}
+					goto l440
+				l448:
+					position, tokenIndex = position440, tokenIndex440
 					if !_rules[ruleBaseIndexScale]() {
-						goto l464
-					}
-					goto l458
-				l464:
-					position, tokenIndex = position458, tokenIndex458
-					if !_rules[ruleSegmentRegister]() {
-						goto l465
-					}
-					if !_rules[ruleBaseIndexScale]() {
-						goto l465
-					}
-					goto l458
-				l465:
-					position, tokenIndex = position458, tokenIndex458
-					if !_rules[ruleSegmentRegister]() {
-						goto l466
-					}
-					if !_rules[ruleOffset]() {
-						goto l466
-					}
-					goto l458
-				l466:
-					position, tokenIndex = position458, tokenIndex458
-					if !_rules[ruleBaseIndexScale]() {
-						goto l456
+						goto l438
 					}
 				}
-			l458:
-				add(ruleMemoryRef, position457)
+			l440:
+				add(ruleMemoryRef, position439)
 			}
 			return true
-		l456:
-			position, tokenIndex = position456, tokenIndex456
+		l438:
+			position, tokenIndex = position438, tokenIndex438
 			return false
 		},
 		/* 34 SymbolRef <- <((Offset* '+')? (LocalSymbol / SymbolName) Offset* ('@' Section Offset*)?)> */
 		func() bool {
-			position467, tokenIndex467 := position, tokenIndex
+			position449, tokenIndex449 := position, tokenIndex
 			{
-				position468 := position
+				position450 := position
 				{
-					position469, tokenIndex469 := position, tokenIndex
-				l471:
+					position451, tokenIndex451 := position, tokenIndex
+				l453:
 					{
-						position472, tokenIndex472 := position, tokenIndex
+						position454, tokenIndex454 := position, tokenIndex
 						if !_rules[ruleOffset]() {
-							goto l472
+							goto l454
 						}
-						goto l471
-					l472:
-						position, tokenIndex = position472, tokenIndex472
+						goto l453
+					l454:
+						position, tokenIndex = position454, tokenIndex454
 					}
 					if buffer[position] != rune('+') {
+						goto l451
+					}
+					position++
+					goto l452
+				l451:
+					position, tokenIndex = position451, tokenIndex451
+				}
+			l452:
+				{
+					position455, tokenIndex455 := position, tokenIndex
+					if !_rules[ruleLocalSymbol]() {
+						goto l456
+					}
+					goto l455
+				l456:
+					position, tokenIndex = position455, tokenIndex455
+					if !_rules[ruleSymbolName]() {
+						goto l449
+					}
+				}
+			l455:
+			l457:
+				{
+					position458, tokenIndex458 := position, tokenIndex
+					if !_rules[ruleOffset]() {
+						goto l458
+					}
+					goto l457
+				l458:
+					position, tokenIndex = position458, tokenIndex458
+				}
+				{
+					position459, tokenIndex459 := position, tokenIndex
+					if buffer[position] != rune('@') {
+						goto l459
+					}
+					position++
+					if !_rules[ruleSection]() {
+						goto l459
+					}
+				l461:
+					{
+						position462, tokenIndex462 := position, tokenIndex
+						if !_rules[ruleOffset]() {
+							goto l462
+						}
+						goto l461
+					l462:
+						position, tokenIndex = position462, tokenIndex462
+					}
+					goto l460
+				l459:
+					position, tokenIndex = position459, tokenIndex459
+				}
+			l460:
+				add(ruleSymbolRef, position450)
+			}
+			return true
+		l449:
+			position, tokenIndex = position449, tokenIndex449
+			return false
+		},
+		/* 35 BaseIndexScale <- <('(' RegisterOrConstant? WS? (',' WS? RegisterOrConstant WS? (',' [0-9]+)?)? ')')> */
+		func() bool {
+			position463, tokenIndex463 := position, tokenIndex
+			{
+				position464 := position
+				if buffer[position] != rune('(') {
+					goto l463
+				}
+				position++
+				{
+					position465, tokenIndex465 := position, tokenIndex
+					if !_rules[ruleRegisterOrConstant]() {
+						goto l465
+					}
+					goto l466
+				l465:
+					position, tokenIndex = position465, tokenIndex465
+				}
+			l466:
+				{
+					position467, tokenIndex467 := position, tokenIndex
+					if !_rules[ruleWS]() {
+						goto l467
+					}
+					goto l468
+				l467:
+					position, tokenIndex = position467, tokenIndex467
+				}
+			l468:
+				{
+					position469, tokenIndex469 := position, tokenIndex
+					if buffer[position] != rune(',') {
 						goto l469
 					}
 					position++
+					{
+						position471, tokenIndex471 := position, tokenIndex
+						if !_rules[ruleWS]() {
+							goto l471
+						}
+						goto l472
+					l471:
+						position, tokenIndex = position471, tokenIndex471
+					}
+				l472:
+					if !_rules[ruleRegisterOrConstant]() {
+						goto l469
+					}
+					{
+						position473, tokenIndex473 := position, tokenIndex
+						if !_rules[ruleWS]() {
+							goto l473
+						}
+						goto l474
+					l473:
+						position, tokenIndex = position473, tokenIndex473
+					}
+				l474:
+					{
+						position475, tokenIndex475 := position, tokenIndex
+						if buffer[position] != rune(',') {
+							goto l475
+						}
+						position++
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l475
+						}
+						position++
+					l477:
+						{
+							position478, tokenIndex478 := position, tokenIndex
+							if c := buffer[position]; c < rune('0') || c > rune('9') {
+								goto l478
+							}
+							position++
+							goto l477
+						l478:
+							position, tokenIndex = position478, tokenIndex478
+						}
+						goto l476
+					l475:
+						position, tokenIndex = position475, tokenIndex475
+					}
+				l476:
 					goto l470
 				l469:
 					position, tokenIndex = position469, tokenIndex469
 				}
 			l470:
-				{
-					position473, tokenIndex473 := position, tokenIndex
-					if !_rules[ruleLocalSymbol]() {
-						goto l474
-					}
-					goto l473
-				l474:
-					position, tokenIndex = position473, tokenIndex473
-					if !_rules[ruleSymbolName]() {
-						goto l467
-					}
-				}
-			l473:
-			l475:
-				{
-					position476, tokenIndex476 := position, tokenIndex
-					if !_rules[ruleOffset]() {
-						goto l476
-					}
-					goto l475
-				l476:
-					position, tokenIndex = position476, tokenIndex476
-				}
-				{
-					position477, tokenIndex477 := position, tokenIndex
-					if buffer[position] != rune('@') {
-						goto l477
-					}
-					position++
-					if !_rules[ruleSection]() {
-						goto l477
-					}
-				l479:
-					{
-						position480, tokenIndex480 := position, tokenIndex
-						if !_rules[ruleOffset]() {
-							goto l480
-						}
-						goto l479
-					l480:
-						position, tokenIndex = position480, tokenIndex480
-					}
-					goto l478
-				l477:
-					position, tokenIndex = position477, tokenIndex477
-				}
-			l478:
-				add(ruleSymbolRef, position468)
-			}
-			return true
-		l467:
-			position, tokenIndex = position467, tokenIndex467
-			return false
-		},
-		/* 35 BaseIndexScale <- <('(' RegisterOrConstant? WS? (',' WS? RegisterOrConstant WS? (',' [0-9]+)?)? ')')> */
-		func() bool {
-			position481, tokenIndex481 := position, tokenIndex
-			{
-				position482 := position
-				if buffer[position] != rune('(') {
-					goto l481
+				if buffer[position] != rune(')') {
+					goto l463
 				}
 				position++
+				add(ruleBaseIndexScale, position464)
+			}
+			return true
+		l463:
+			position, tokenIndex = position463, tokenIndex463
+			return false
+		},
+		/* 36 Operator <- <('+' / '-')> */
+		func() bool {
+			position479, tokenIndex479 := position, tokenIndex
+			{
+				position480 := position
 				{
-					position483, tokenIndex483 := position, tokenIndex
-					if !_rules[ruleRegisterOrConstant]() {
-						goto l483
+					position481, tokenIndex481 := position, tokenIndex
+					if buffer[position] != rune('+') {
+						goto l482
 					}
-					goto l484
-				l483:
-					position, tokenIndex = position483, tokenIndex483
+					position++
+					goto l481
+				l482:
+					position, tokenIndex = position481, tokenIndex481
+					if buffer[position] != rune('-') {
+						goto l479
+					}
+					position++
 				}
-			l484:
+			l481:
+				add(ruleOperator, position480)
+			}
+			return true
+		l479:
+			position, tokenIndex = position479, tokenIndex479
+			return false
+		},
+		/* 37 Offset <- <('+'? '-'? (('0' ('b' / 'B') ('0' / '1')+) / ('0' ('x' / 'X') ([0-9] / [0-9] / ([a-f] / [A-F]))+) / [0-9]+))> */
+		func() bool {
+			position483, tokenIndex483 := position, tokenIndex
+			{
+				position484 := position
 				{
 					position485, tokenIndex485 := position, tokenIndex
-					if !_rules[ruleWS]() {
+					if buffer[position] != rune('+') {
 						goto l485
 					}
+					position++
 					goto l486
 				l485:
 					position, tokenIndex = position485, tokenIndex485
@@ -3812,409 +3768,295 @@
 			l486:
 				{
 					position487, tokenIndex487 := position, tokenIndex
-					if buffer[position] != rune(',') {
+					if buffer[position] != rune('-') {
 						goto l487
 					}
 					position++
-					{
-						position489, tokenIndex489 := position, tokenIndex
-						if !_rules[ruleWS]() {
-							goto l489
-						}
-						goto l490
-					l489:
-						position, tokenIndex = position489, tokenIndex489
-					}
-				l490:
-					if !_rules[ruleRegisterOrConstant]() {
-						goto l487
-					}
-					{
-						position491, tokenIndex491 := position, tokenIndex
-						if !_rules[ruleWS]() {
-							goto l491
-						}
-						goto l492
-					l491:
-						position, tokenIndex = position491, tokenIndex491
-					}
-				l492:
-					{
-						position493, tokenIndex493 := position, tokenIndex
-						if buffer[position] != rune(',') {
-							goto l493
-						}
-						position++
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l493
-						}
-						position++
-					l495:
-						{
-							position496, tokenIndex496 := position, tokenIndex
-							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l496
-							}
-							position++
-							goto l495
-						l496:
-							position, tokenIndex = position496, tokenIndex496
-						}
-						goto l494
-					l493:
-						position, tokenIndex = position493, tokenIndex493
-					}
-				l494:
 					goto l488
 				l487:
 					position, tokenIndex = position487, tokenIndex487
 				}
 			l488:
-				if buffer[position] != rune(')') {
-					goto l481
-				}
-				position++
-				add(ruleBaseIndexScale, position482)
-			}
-			return true
-		l481:
-			position, tokenIndex = position481, tokenIndex481
-			return false
-		},
-		/* 36 Operator <- <('+' / '-')> */
-		func() bool {
-			position497, tokenIndex497 := position, tokenIndex
-			{
-				position498 := position
 				{
-					position499, tokenIndex499 := position, tokenIndex
-					if buffer[position] != rune('+') {
-						goto l500
-					}
-					position++
-					goto l499
-				l500:
-					position, tokenIndex = position499, tokenIndex499
-					if buffer[position] != rune('-') {
-						goto l497
-					}
-					position++
-				}
-			l499:
-				add(ruleOperator, position498)
-			}
-			return true
-		l497:
-			position, tokenIndex = position497, tokenIndex497
-			return false
-		},
-		/* 37 Offset <- <('+'? '-'? (('0' ('b' / 'B') ('0' / '1')+) / ('0' ('x' / 'X') ([0-9] / [0-9] / ([a-f] / [A-F]))+) / [0-9]+))> */
-		func() bool {
-			position501, tokenIndex501 := position, tokenIndex
-			{
-				position502 := position
-				{
-					position503, tokenIndex503 := position, tokenIndex
-					if buffer[position] != rune('+') {
-						goto l503
-					}
-					position++
-					goto l504
-				l503:
-					position, tokenIndex = position503, tokenIndex503
-				}
-			l504:
-				{
-					position505, tokenIndex505 := position, tokenIndex
-					if buffer[position] != rune('-') {
-						goto l505
-					}
-					position++
-					goto l506
-				l505:
-					position, tokenIndex = position505, tokenIndex505
-				}
-			l506:
-				{
-					position507, tokenIndex507 := position, tokenIndex
+					position489, tokenIndex489 := position, tokenIndex
 					if buffer[position] != rune('0') {
-						goto l508
+						goto l490
 					}
 					position++
 					{
-						position509, tokenIndex509 := position, tokenIndex
+						position491, tokenIndex491 := position, tokenIndex
 						if buffer[position] != rune('b') {
-							goto l510
+							goto l492
 						}
 						position++
-						goto l509
-					l510:
-						position, tokenIndex = position509, tokenIndex509
+						goto l491
+					l492:
+						position, tokenIndex = position491, tokenIndex491
 						if buffer[position] != rune('B') {
-							goto l508
+							goto l490
 						}
 						position++
 					}
-				l509:
+				l491:
 					{
-						position513, tokenIndex513 := position, tokenIndex
+						position495, tokenIndex495 := position, tokenIndex
 						if buffer[position] != rune('0') {
-							goto l514
+							goto l496
 						}
 						position++
-						goto l513
-					l514:
-						position, tokenIndex = position513, tokenIndex513
+						goto l495
+					l496:
+						position, tokenIndex = position495, tokenIndex495
 						if buffer[position] != rune('1') {
-							goto l508
+							goto l490
 						}
 						position++
 					}
-				l513:
-				l511:
+				l495:
+				l493:
 					{
-						position512, tokenIndex512 := position, tokenIndex
+						position494, tokenIndex494 := position, tokenIndex
 						{
-							position515, tokenIndex515 := position, tokenIndex
+							position497, tokenIndex497 := position, tokenIndex
 							if buffer[position] != rune('0') {
-								goto l516
+								goto l498
 							}
 							position++
-							goto l515
-						l516:
-							position, tokenIndex = position515, tokenIndex515
+							goto l497
+						l498:
+							position, tokenIndex = position497, tokenIndex497
 							if buffer[position] != rune('1') {
-								goto l512
+								goto l494
 							}
 							position++
 						}
-					l515:
-						goto l511
-					l512:
-						position, tokenIndex = position512, tokenIndex512
+					l497:
+						goto l493
+					l494:
+						position, tokenIndex = position494, tokenIndex494
 					}
-					goto l507
-				l508:
-					position, tokenIndex = position507, tokenIndex507
+					goto l489
+				l490:
+					position, tokenIndex = position489, tokenIndex489
 					if buffer[position] != rune('0') {
-						goto l517
+						goto l499
 					}
 					position++
 					{
-						position518, tokenIndex518 := position, tokenIndex
+						position500, tokenIndex500 := position, tokenIndex
 						if buffer[position] != rune('x') {
-							goto l519
+							goto l501
 						}
 						position++
-						goto l518
-					l519:
-						position, tokenIndex = position518, tokenIndex518
+						goto l500
+					l501:
+						position, tokenIndex = position500, tokenIndex500
 						if buffer[position] != rune('X') {
-							goto l517
+							goto l499
 						}
 						position++
 					}
-				l518:
+				l500:
 					{
-						position522, tokenIndex522 := position, tokenIndex
+						position504, tokenIndex504 := position, tokenIndex
 						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l523
+							goto l505
 						}
 						position++
-						goto l522
-					l523:
-						position, tokenIndex = position522, tokenIndex522
+						goto l504
+					l505:
+						position, tokenIndex = position504, tokenIndex504
 						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l524
+							goto l506
 						}
 						position++
-						goto l522
-					l524:
-						position, tokenIndex = position522, tokenIndex522
+						goto l504
+					l506:
+						position, tokenIndex = position504, tokenIndex504
 						{
-							position525, tokenIndex525 := position, tokenIndex
+							position507, tokenIndex507 := position, tokenIndex
 							if c := buffer[position]; c < rune('a') || c > rune('f') {
-								goto l526
+								goto l508
 							}
 							position++
-							goto l525
-						l526:
-							position, tokenIndex = position525, tokenIndex525
+							goto l507
+						l508:
+							position, tokenIndex = position507, tokenIndex507
 							if c := buffer[position]; c < rune('A') || c > rune('F') {
-								goto l517
+								goto l499
 							}
 							position++
 						}
-					l525:
+					l507:
 					}
-				l522:
-				l520:
+				l504:
+				l502:
 					{
-						position521, tokenIndex521 := position, tokenIndex
+						position503, tokenIndex503 := position, tokenIndex
 						{
-							position527, tokenIndex527 := position, tokenIndex
+							position509, tokenIndex509 := position, tokenIndex
 							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l528
+								goto l510
 							}
 							position++
-							goto l527
-						l528:
-							position, tokenIndex = position527, tokenIndex527
+							goto l509
+						l510:
+							position, tokenIndex = position509, tokenIndex509
 							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l529
+								goto l511
 							}
 							position++
-							goto l527
-						l529:
-							position, tokenIndex = position527, tokenIndex527
+							goto l509
+						l511:
+							position, tokenIndex = position509, tokenIndex509
 							{
-								position530, tokenIndex530 := position, tokenIndex
+								position512, tokenIndex512 := position, tokenIndex
 								if c := buffer[position]; c < rune('a') || c > rune('f') {
-									goto l531
+									goto l513
 								}
 								position++
-								goto l530
-							l531:
-								position, tokenIndex = position530, tokenIndex530
+								goto l512
+							l513:
+								position, tokenIndex = position512, tokenIndex512
 								if c := buffer[position]; c < rune('A') || c > rune('F') {
-									goto l521
+									goto l503
 								}
 								position++
 							}
-						l530:
+						l512:
 						}
-					l527:
-						goto l520
-					l521:
-						position, tokenIndex = position521, tokenIndex521
+					l509:
+						goto l502
+					l503:
+						position, tokenIndex = position503, tokenIndex503
 					}
-					goto l507
-				l517:
-					position, tokenIndex = position507, tokenIndex507
+					goto l489
+				l499:
+					position, tokenIndex = position489, tokenIndex489
 					if c := buffer[position]; c < rune('0') || c > rune('9') {
-						goto l501
+						goto l483
 					}
 					position++
-				l532:
+				l514:
 					{
-						position533, tokenIndex533 := position, tokenIndex
+						position515, tokenIndex515 := position, tokenIndex
 						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l533
+							goto l515
 						}
 						position++
-						goto l532
-					l533:
-						position, tokenIndex = position533, tokenIndex533
+						goto l514
+					l515:
+						position, tokenIndex = position515, tokenIndex515
 					}
 				}
-			l507:
-				add(ruleOffset, position502)
+			l489:
+				add(ruleOffset, position484)
 			}
 			return true
-		l501:
-			position, tokenIndex = position501, tokenIndex501
+		l483:
+			position, tokenIndex = position483, tokenIndex483
 			return false
 		},
 		/* 38 Section <- <([a-z] / [A-Z] / '@')+> */
 		func() bool {
-			position534, tokenIndex534 := position, tokenIndex
+			position516, tokenIndex516 := position, tokenIndex
 			{
-				position535 := position
+				position517 := position
 				{
-					position538, tokenIndex538 := position, tokenIndex
+					position520, tokenIndex520 := position, tokenIndex
 					if c := buffer[position]; c < rune('a') || c > rune('z') {
-						goto l539
+						goto l521
 					}
 					position++
-					goto l538
-				l539:
-					position, tokenIndex = position538, tokenIndex538
+					goto l520
+				l521:
+					position, tokenIndex = position520, tokenIndex520
 					if c := buffer[position]; c < rune('A') || c > rune('Z') {
-						goto l540
+						goto l522
 					}
 					position++
-					goto l538
-				l540:
-					position, tokenIndex = position538, tokenIndex538
+					goto l520
+				l522:
+					position, tokenIndex = position520, tokenIndex520
 					if buffer[position] != rune('@') {
-						goto l534
+						goto l516
 					}
 					position++
 				}
-			l538:
-			l536:
+			l520:
+			l518:
 				{
-					position537, tokenIndex537 := position, tokenIndex
+					position519, tokenIndex519 := position, tokenIndex
 					{
-						position541, tokenIndex541 := position, tokenIndex
+						position523, tokenIndex523 := position, tokenIndex
 						if c := buffer[position]; c < rune('a') || c > rune('z') {
-							goto l542
+							goto l524
 						}
 						position++
-						goto l541
-					l542:
-						position, tokenIndex = position541, tokenIndex541
+						goto l523
+					l524:
+						position, tokenIndex = position523, tokenIndex523
 						if c := buffer[position]; c < rune('A') || c > rune('Z') {
-							goto l543
+							goto l525
 						}
 						position++
-						goto l541
-					l543:
-						position, tokenIndex = position541, tokenIndex541
+						goto l523
+					l525:
+						position, tokenIndex = position523, tokenIndex523
 						if buffer[position] != rune('@') {
-							goto l537
+							goto l519
 						}
 						position++
 					}
-				l541:
-					goto l536
-				l537:
-					position, tokenIndex = position537, tokenIndex537
+				l523:
+					goto l518
+				l519:
+					position, tokenIndex = position519, tokenIndex519
 				}
-				add(ruleSection, position535)
+				add(ruleSection, position517)
 			}
 			return true
-		l534:
-			position, tokenIndex = position534, tokenIndex534
+		l516:
+			position, tokenIndex = position516, tokenIndex516
 			return false
 		},
 		/* 39 SegmentRegister <- <('%' ([c-g] / 's') ('s' ':'))> */
 		func() bool {
-			position544, tokenIndex544 := position, tokenIndex
+			position526, tokenIndex526 := position, tokenIndex
 			{
-				position545 := position
+				position527 := position
 				if buffer[position] != rune('%') {
-					goto l544
+					goto l526
 				}
 				position++
 				{
-					position546, tokenIndex546 := position, tokenIndex
+					position528, tokenIndex528 := position, tokenIndex
 					if c := buffer[position]; c < rune('c') || c > rune('g') {
-						goto l547
+						goto l529
 					}
 					position++
-					goto l546
-				l547:
-					position, tokenIndex = position546, tokenIndex546
+					goto l528
+				l529:
+					position, tokenIndex = position528, tokenIndex528
 					if buffer[position] != rune('s') {
-						goto l544
+						goto l526
 					}
 					position++
 				}
-			l546:
+			l528:
 				if buffer[position] != rune('s') {
-					goto l544
+					goto l526
 				}
 				position++
 				if buffer[position] != rune(':') {
-					goto l544
+					goto l526
 				}
 				position++
-				add(ruleSegmentRegister, position545)
+				add(ruleSegmentRegister, position527)
 			}
 			return true
-		l544:
-			position, tokenIndex = position544, tokenIndex544
+		l526:
+			position, tokenIndex = position526, tokenIndex526
 			return false
 		},
 	}
diff --git a/src/util/fipstools/delocate/delocate_test.go b/src/util/fipstools/delocate/delocate_test.go
index 1778fa7..269b484 100644
--- a/src/util/fipstools/delocate/delocate_test.go
+++ b/src/util/fipstools/delocate/delocate_test.go
@@ -38,7 +38,6 @@
 }
 
 var delocateTests = []delocateTest{
-	{"generic-FileDirectives", []string{"in.s"}, "out.s"},
 	{"ppc64le-GlobalEntry", []string{"in.s"}, "out.s"},
 	{"ppc64le-LoadToR0", []string{"in.s"}, "out.s"},
 	{"ppc64le-Sample2", []string{"in.s"}, "out.s"},
diff --git a/src/util/fipstools/delocate/testdata/generic-FileDirectives/in.s b/src/util/fipstools/delocate/testdata/generic-FileDirectives/in.s
deleted file mode 100644
index ca5f8c2..0000000
--- a/src/util/fipstools/delocate/testdata/generic-FileDirectives/in.s
+++ /dev/null
@@ -1,6 +0,0 @@
-.file 10 "some/path/file.c" "file.c"
-.file 1000 "some/path/file2.c" "file2.c"
-.file 1001 "some/path/file_with_md5.c" "other_name.c" md5 0x5eba7844df6449a7f2fff1556fe7ba8d239f8e2f
-
-# An instruction is needed to satisfy the architecture auto-detection.
-        movq %rax, %rbx
diff --git a/src/util/fipstools/delocate/testdata/generic-FileDirectives/out.s b/src/util/fipstools/delocate/testdata/generic-FileDirectives/out.s
deleted file mode 100644
index bb33e52..0000000
--- a/src/util/fipstools/delocate/testdata/generic-FileDirectives/out.s
+++ /dev/null
@@ -1,91 +0,0 @@
-.text
-.file 1002 "inserted_by_delocate.c" md5 0x00000000000000000000000000000000
-.loc 1002 1 0
-BORINGSSL_bcm_text_start:
-.file 10 "some/path/file.c" "file.c"
-.file 1000 "some/path/file2.c" "file2.c"
-.file 1001 "some/path/file_with_md5.c" "other_name.c" md5 0x5eba7844df6449a7f2fff1556fe7ba8d239f8e2f
-
-# An instruction is needed to satisfy the architecture auto-detection.
-        movq %rax, %rbx
-.text
-.loc 1002 2 0
-BORINGSSL_bcm_text_end:
-.type OPENSSL_ia32cap_get, @function
-.globl OPENSSL_ia32cap_get
-.LOPENSSL_ia32cap_get_local_target:
-OPENSSL_ia32cap_get:
-	leaq OPENSSL_ia32cap_P(%rip), %rax
-	ret
-.extern OPENSSL_ia32cap_P
-.type OPENSSL_ia32cap_addr_delta, @object
-.size OPENSSL_ia32cap_addr_delta, 8
-OPENSSL_ia32cap_addr_delta:
-.quad OPENSSL_ia32cap_P-OPENSSL_ia32cap_addr_delta
-.type BORINGSSL_bcm_text_hash, @object
-.size BORINGSSL_bcm_text_hash, 64
-BORINGSSL_bcm_text_hash:
-.byte 0xae
-.byte 0x2c
-.byte 0xea
-.byte 0x2a
-.byte 0xbd
-.byte 0xa6
-.byte 0xf3
-.byte 0xec
-.byte 0x97
-.byte 0x7f
-.byte 0x9b
-.byte 0xf6
-.byte 0x94
-.byte 0x9a
-.byte 0xfc
-.byte 0x83
-.byte 0x68
-.byte 0x27
-.byte 0xcb
-.byte 0xa0
-.byte 0xa0
-.byte 0x9f
-.byte 0x6b
-.byte 0x6f
-.byte 0xde
-.byte 0x52
-.byte 0xcd
-.byte 0xe2
-.byte 0xcd
-.byte 0xff
-.byte 0x31
-.byte 0x80
-.byte 0xa2
-.byte 0xd4
-.byte 0xc3
-.byte 0x66
-.byte 0xf
-.byte 0xc2
-.byte 0x6a
-.byte 0x7b
-.byte 0xf4
-.byte 0xbe
-.byte 0x39
-.byte 0xa2
-.byte 0xd7
-.byte 0x25
-.byte 0xdb
-.byte 0x21
-.byte 0x98
-.byte 0xe9
-.byte 0xd5
-.byte 0x53
-.byte 0xbf
-.byte 0x5c
-.byte 0x32
-.byte 0x6
-.byte 0x83
-.byte 0x34
-.byte 0xc
-.byte 0x65
-.byte 0x89
-.byte 0x52
-.byte 0xbd
-.byte 0x1f
diff --git a/src/util/fipstools/delocate/testdata/x86_64-LabelRewrite/in1.s b/src/util/fipstools/delocate/testdata/x86_64-LabelRewrite/in1.s
index 8ee7089..e97b280 100644
--- a/src/util/fipstools/delocate/testdata/x86_64-LabelRewrite/in1.s
+++ b/src/util/fipstools/delocate/testdata/x86_64-LabelRewrite/in1.s
@@ -35,8 +35,6 @@
 	.quad 42
 .L2:
 	.quad .L2-.L1
-	.uleb128 .L2-.L1
-	.sleb128 .L2-.L1
 
 	# Local labels and their jumps are left alone.
 	.text
diff --git a/src/util/fipstools/delocate/testdata/x86_64-LabelRewrite/in2.s b/src/util/fipstools/delocate/testdata/x86_64-LabelRewrite/in2.s
index 5027325..7a5a551 100644
--- a/src/util/fipstools/delocate/testdata/x86_64-LabelRewrite/in2.s
+++ b/src/util/fipstools/delocate/testdata/x86_64-LabelRewrite/in2.s
@@ -9,6 +9,4 @@
 	.quad 42
 .L2:
 	.quad .L2-.L1
-	.uleb128 .L2-.L1
-	.sleb128 .L2-.L1
 
diff --git a/src/util/fipstools/delocate/testdata/x86_64-LabelRewrite/out.s b/src/util/fipstools/delocate/testdata/x86_64-LabelRewrite/out.s
index 252f69c..8cc27de 100644
--- a/src/util/fipstools/delocate/testdata/x86_64-LabelRewrite/out.s
+++ b/src/util/fipstools/delocate/testdata/x86_64-LabelRewrite/out.s
@@ -56,8 +56,6 @@
 .L2:
 
 	.quad .L2-.L1
-	.uleb128 .L2-.L1
-	.sleb128 .L2-.L1
 
 	# Local labels and their jumps are left alone.
 	.text
@@ -84,10 +82,6 @@
 
 # WAS .quad .L2-.L1
 	.quad	.L2_BCM_1-.L1_BCM_1
-# WAS .uleb128 .L2-.L1
-	.uleb128	.L2_BCM_1-.L1_BCM_1
-# WAS .sleb128 .L2-.L1
-	.sleb128	.L2_BCM_1-.L1_BCM_1
 
 .text
 .loc 1 2 0
diff --git a/src/util/fipstools/inject_hash/inject_hash.go b/src/util/fipstools/inject_hash/inject_hash.go
index 6bab143..29307c0 100644
--- a/src/util/fipstools/inject_hash/inject_hash.go
+++ b/src/util/fipstools/inject_hash/inject_hash.go
@@ -22,14 +22,12 @@
 	"crypto/hmac"
 	"crypto/sha512"
 	"debug/elf"
-	"encoding/binary"
 	"errors"
 	"flag"
 	"fmt"
 	"io"
 	"io/ioutil"
 	"os"
-	"strings"
 
 	"boringssl.googlesource.com/boringssl/util/ar"
 	"boringssl.googlesource.com/boringssl/util/fipstools/fipscommon"
@@ -37,10 +35,7 @@
 
 func do(outPath, oInput string, arInput string) error {
 	var objectBytes []byte
-	var isStatic bool
 	if len(arInput) > 0 {
-		isStatic = true
-
 		if len(oInput) > 0 {
 			return fmt.Errorf("-in-archive and -in-object are mutually exclusive")
 		}
@@ -68,7 +63,6 @@
 		if objectBytes, err = ioutil.ReadFile(oInput); err != nil {
 			return err
 		}
-		isStatic = strings.HasSuffix(oInput, ".o")
 	} else {
 		return fmt.Errorf("exactly one of -in-archive or -in-object is required")
 	}
@@ -78,18 +72,15 @@
 		return errors.New("failed to parse object: " + err.Error())
 	}
 
-	// Find the .text and, optionally, .data sections.
+	// Find the .text section.
 
-	var textSection, rodataSection *elf.Section
-	var textSectionIndex, rodataSectionIndex elf.SectionIndex
+	var textSection *elf.Section
+	var textSectionIndex elf.SectionIndex
 	for i, section := range object.Sections {
-		switch section.Name {
-		case ".text":
+		if section.Name == ".text" {
 			textSectionIndex = elf.SectionIndex(i)
 			textSection = section
-		case ".rodata":
-			rodataSectionIndex = elf.SectionIndex(i)
-			rodataSection = section
+			break
 		}
 	}
 
@@ -99,7 +90,8 @@
 
 	// Find the starting and ending symbols for the module.
 
-	var textStart, textEnd, rodataStart, rodataEnd *uint64
+	var startSeen, endSeen bool
+	var start, end uint64
 
 	symbols, err := object.Symbols()
 	if err != nil {
@@ -107,115 +99,50 @@
 	}
 
 	for _, symbol := range symbols {
-		var base uint64
-		switch symbol.Section {
-		case textSectionIndex:
-			base = textSection.Addr
-		case rodataSectionIndex:
-			if rodataSection == nil {
-				continue
-			}
-			base = rodataSection.Addr
-		default:
+		if symbol.Section != textSectionIndex {
 			continue
 		}
 
-		if isStatic {
-			// Static objects appear to have different semantics about whether symbol
-			// values are relative to their section or not.
-			base = 0
-		} else if symbol.Value < base {
-			return fmt.Errorf("symbol %q at %x, which is below base of %x", symbol.Name, symbol.Value, base)
-		}
-
-		value := symbol.Value - base
 		switch symbol.Name {
 		case "BORINGSSL_bcm_text_start":
-			if textStart != nil {
+			if startSeen {
 				return errors.New("duplicate start symbol found")
 			}
-			textStart = &value
+			startSeen = true
+			start = symbol.Value
 		case "BORINGSSL_bcm_text_end":
-			if textEnd != nil {
+			if endSeen {
 				return errors.New("duplicate end symbol found")
 			}
-			textEnd = &value
-		case "BORINGSSL_bcm_rodata_start":
-			if rodataStart != nil {
-				return errors.New("duplicate rodata start symbol found")
-			}
-			rodataStart = &value
-		case "BORINGSSL_bcm_rodata_end":
-			if rodataEnd != nil {
-				return errors.New("duplicate rodata end symbol found")
-			}
-			rodataEnd = &value
+			endSeen = true
+			end = symbol.Value
 		default:
 			continue
 		}
 	}
 
-	if textStart == nil || textEnd == nil {
-		return errors.New("could not find .text module boundaries in object")
+	if !startSeen || !endSeen {
+		return errors.New("could not find module boundaries in object")
 	}
 
-	if (rodataStart == nil) != (rodataSection == nil) {
-		return errors.New("rodata start marker inconsistent with rodata section presence")
-	}
-
-	if (rodataStart != nil) != (rodataEnd != nil) {
-		return errors.New("rodata marker presence inconsistent")
-	}
-
-	if max := textSection.Size; *textStart > max || *textStart > *textEnd || *textEnd > max {
-		return fmt.Errorf("invalid module .text boundaries: start: %x, end: %x, max: %x", *textStart, *textEnd, max)
-	}
-
-	if rodataSection != nil {
-		if max := rodataSection.Size; *rodataStart > max || *rodataStart > *rodataEnd || *rodataEnd > max {
-			return fmt.Errorf("invalid module .rodata boundaries: start: %x, end: %x, max: %x", *rodataStart, *rodataEnd, max)
-		}
+	if max := textSection.Size; start > max || start > end || end > max {
+		return fmt.Errorf("invalid module boundaries: start: %x, end: %x, max: %x", start, end, max)
 	}
 
 	// Extract the module from the .text section and hash it.
 
 	text := textSection.Open()
-	if _, err := text.Seek(int64(*textStart), 0); err != nil {
+	if _, err := text.Seek(int64(start), 0); err != nil {
 		return errors.New("failed to seek to module start in .text: " + err.Error())
 	}
-	moduleText := make([]byte, *textEnd-*textStart)
+	moduleText := make([]byte, end-start)
 	if _, err := io.ReadFull(text, moduleText); err != nil {
 		return errors.New("failed to read .text: " + err.Error())
 	}
 
-	// Maybe extract the module's read-only data too
-	var moduleROData []byte
-	if rodataSection != nil {
-		rodata := rodataSection.Open()
-		if _, err := rodata.Seek(int64(*rodataStart), 0); err != nil {
-			return errors.New("failed to seek to module start in .rodata: " + err.Error())
-		}
-		moduleROData = make([]byte, *rodataEnd-*rodataStart)
-		if _, err := io.ReadFull(rodata, moduleROData); err != nil {
-			return errors.New("failed to read .rodata: " + err.Error())
-		}
-	}
-
 	var zeroKey [64]byte
 	mac := hmac.New(sha512.New, zeroKey[:])
-
-	if moduleROData != nil {
-		var lengthBytes [8]byte
-		binary.LittleEndian.PutUint64(lengthBytes[:], uint64(len(moduleText)))
-		mac.Write(lengthBytes[:])
-		mac.Write(moduleText)
-
-		binary.LittleEndian.PutUint64(lengthBytes[:], uint64(len(moduleROData)))
-		mac.Write(lengthBytes[:])
-		mac.Write(moduleROData)
-	} else {
-		mac.Write(moduleText)
-	}
+	mac.Write(moduleText)
 	calculated := mac.Sum(nil)
 
 	// Replace the default hash value in the object with the calculated
diff --git a/src/util/generate_build_files.py b/src/util/generate_build_files.py
index b59373c..1773cba 100644
--- a/src/util/generate_build_files.py
+++ b/src/util/generate_build_files.py
@@ -325,8 +325,6 @@
                                 files['test_support_headers'])
       self.PrintVariableSection(out, 'crypto_test_sources',
                                 files['crypto_test'])
-      self.PrintVariableSection(out, 'crypto_test_data',
-                                files['crypto_test_data'])
       self.PrintVariableSection(out, 'ssl_test_sources', files['ssl_test'])
 
 
@@ -592,8 +590,7 @@
 def main(platforms):
   cmake = ExtractVariablesFromCMakeFile(os.path.join('src', 'sources.cmake'))
   crypto_c_files = (FindCFiles(os.path.join('src', 'crypto'), NoTestsNorFIPSFragments) +
-                    FindCFiles(os.path.join('src', 'third_party', 'fiat'), NoTestsNorFIPSFragments) +
-                    FindCFiles(os.path.join('src', 'third_party', 'sike'), NoTestsNorFIPSFragments))
+                    FindCFiles(os.path.join('src', 'third_party', 'fiat'), NoTestsNorFIPSFragments))
   fips_fragments = FindCFiles(os.path.join('src', 'crypto', 'fipsmodule'), OnlyFIPSFragments)
   ssl_source_files = FindCFiles(os.path.join('src', 'ssl'), NoTests)
   tool_c_files = FindCFiles(os.path.join('src', 'tool'), NoTests)
@@ -658,8 +655,7 @@
   ssl_internal_h_files = FindHeaderFiles(os.path.join('src', 'ssl'), NoTests)
   crypto_internal_h_files = (
       FindHeaderFiles(os.path.join('src', 'crypto'), NoTests) +
-      FindHeaderFiles(os.path.join('src', 'third_party', 'fiat'), NoTests) +
-      FindHeaderFiles(os.path.join('src', 'third_party', 'sike'), NoTests))
+      FindHeaderFiles(os.path.join('src', 'third_party', 'fiat'), NoTests))
 
   files = {
       'crypto': crypto_c_files,
@@ -695,7 +691,7 @@
   parser.add_option(
       '--embed_test_data', type='choice', dest='embed_test_data',
       action='store', default="true", choices=["true", "false"],
-      help='For Bazel or GN, don\'t embed data files in crypto_test_data.cc')
+      help='For Bazel, don\'t embed data files in crypto_test_data.cc')
   options, args = parser.parse_args(sys.argv[1:])
   PREFIX = options.prefix
   EMBED_TEST_DATA = (options.embed_test_data == "true")
diff --git a/win-x86_64/crypto/fipsmodule/p256-x86_64-asm.asm b/win-x86_64/crypto/fipsmodule/p256-x86_64-asm.asm
index 215f5d2..cdde939 100644
--- a/win-x86_64/crypto/fipsmodule/p256-x86_64-asm.asm
+++ b/win-x86_64/crypto/fipsmodule/p256-x86_64-asm.asm
@@ -2953,22 +2953,15 @@
 	or	r12,r8
 	or	r12,r9
 
-DB	102,73,15,126,208
-DB	102,73,15,126,217
-	or	r12,r8
 DB	0x3e
 	jnz	NEAR $L$add_proceedq
-
-
-
+DB	102,73,15,126,208
+DB	102,73,15,126,217
+	test	r8,r8
+	jnz	NEAR $L$add_proceedq
 	test	r9,r9
 	jz	NEAR $L$add_doubleq
 
-
-
-
-
-
 DB	102,72,15,126,199
 	pxor	xmm0,xmm0
 	movdqu	XMMWORD[rdi],xmm0
@@ -4094,22 +4087,15 @@
 	or	r12,r8
 	or	r12,r9
 
-DB	102,73,15,126,208
-DB	102,73,15,126,217
-	or	r12,r8
 DB	0x3e
 	jnz	NEAR $L$add_proceedx
-
-
-
+DB	102,73,15,126,208
+DB	102,73,15,126,217
+	test	r8,r8
+	jnz	NEAR $L$add_proceedx
 	test	r9,r9
 	jz	NEAR $L$add_doublex
 
-
-
-
-
-
 DB	102,72,15,126,199
 	pxor	xmm0,xmm0
 	movdqu	XMMWORD[rdi],xmm0
diff --git a/win-x86_64/crypto/third_party/sike/asm/fp-x86_64.asm b/win-x86_64/crypto/third_party/sike/asm/fp-x86_64.asm
deleted file mode 100644
index fbfef1b..0000000
--- a/win-x86_64/crypto/third_party/sike/asm/fp-x86_64.asm
+++ /dev/null
@@ -1,1951 +0,0 @@
-; This file is generated from a similarly-named Perl script in the BoringSSL
-; source tree. Do not edit by hand.
-
-default	rel
-%define XMMWORD
-%define YMMWORD
-%define ZMMWORD
-
-%ifdef BORINGSSL_PREFIX
-%include "boringssl_prefix_symbols_nasm.inc"
-%endif
-section	.text code align=64
-
-
-
-$L$p434x2:
-	DQ	0xFFFFFFFFFFFFFFFE
-	DQ	0xFFFFFFFFFFFFFFFF
-	DQ	0xFB82ECF5C5FFFFFF
-	DQ	0xF78CB8F062B15D47
-	DQ	0xD9F8BFAD038A40AC
-	DQ	0x0004683E4E2EE688
-
-
-$L$p434p1:
-	DQ	0xFDC1767AE3000000
-	DQ	0x7BC65C783158AEA3
-	DQ	0x6CFC5FD681C52056
-	DQ	0x0002341F27177344
-
-EXTERN	OPENSSL_ia32cap_P
-
-global	sike_fpadd
-
-sike_fpadd:
-	mov	QWORD[8+rsp],rdi	;WIN64 prologue
-	mov	QWORD[16+rsp],rsi
-	mov	rax,rsp
-$L$SEH_begin_sike_fpadd:
-	mov	rdi,rcx
-	mov	rsi,rdx
-	mov	rdx,r8
-
-
-
-	push	r12
-
-
-	push	r13
-
-
-	push	r14
-
-
-
-	xor	rax,rax
-
-	mov	r8,QWORD[rdi]
-	add	r8,QWORD[rsi]
-	mov	r9,QWORD[8+rdi]
-	adc	r9,QWORD[8+rsi]
-	mov	r10,QWORD[16+rdi]
-	adc	r10,QWORD[16+rsi]
-	mov	r11,QWORD[24+rdi]
-	adc	r11,QWORD[24+rsi]
-	mov	r12,QWORD[32+rdi]
-	adc	r12,QWORD[32+rsi]
-	mov	r13,QWORD[40+rdi]
-	adc	r13,QWORD[40+rsi]
-	mov	r14,QWORD[48+rdi]
-	adc	r14,QWORD[48+rsi]
-
-	mov	rcx,QWORD[$L$p434x2]
-	sub	r8,rcx
-	mov	rcx,QWORD[((8+$L$p434x2))]
-	sbb	r9,rcx
-	sbb	r10,rcx
-	mov	rcx,QWORD[((16+$L$p434x2))]
-	sbb	r11,rcx
-	mov	rcx,QWORD[((24+$L$p434x2))]
-	sbb	r12,rcx
-	mov	rcx,QWORD[((32+$L$p434x2))]
-	sbb	r13,rcx
-	mov	rcx,QWORD[((40+$L$p434x2))]
-	sbb	r14,rcx
-
-	sbb	rax,0
-
-	mov	rdi,QWORD[$L$p434x2]
-	and	rdi,rax
-	mov	rsi,QWORD[((8+$L$p434x2))]
-	and	rsi,rax
-	mov	rcx,QWORD[((16+$L$p434x2))]
-	and	rcx,rax
-
-	add	r8,rdi
-	mov	QWORD[rdx],r8
-	adc	r9,rsi
-	mov	QWORD[8+rdx],r9
-	adc	r10,rsi
-	mov	QWORD[16+rdx],r10
-	adc	r11,rcx
-	mov	QWORD[24+rdx],r11
-
-	setc	cl
-	mov	r8,QWORD[((24+$L$p434x2))]
-	and	r8,rax
-	mov	r9,QWORD[((32+$L$p434x2))]
-	and	r9,rax
-	mov	r10,QWORD[((40+$L$p434x2))]
-	and	r10,rax
-	bt	rcx,0
-
-	adc	r12,r8
-	mov	QWORD[32+rdx],r12
-	adc	r13,r9
-	mov	QWORD[40+rdx],r13
-	adc	r14,r10
-	mov	QWORD[48+rdx],r14
-
-	pop	r14
-
-	pop	r13
-
-	pop	r12
-
-	mov	rdi,QWORD[8+rsp]	;WIN64 epilogue
-	mov	rsi,QWORD[16+rsp]
-	DB	0F3h,0C3h		;repret
-
-global	sike_cswap_asm
-
-sike_cswap_asm:
-	mov	QWORD[8+rsp],rdi	;WIN64 prologue
-	mov	QWORD[16+rsp],rsi
-	mov	rax,rsp
-$L$SEH_begin_sike_cswap_asm:
-	mov	rdi,rcx
-	mov	rsi,rdx
-	mov	rdx,r8
-
-
-
-
-	movq	xmm3,rdx
-
-
-
-
-
-	pshufd	xmm3,xmm3,68
-
-	movdqu	xmm0,XMMWORD[rdi]
-	movdqu	xmm1,XMMWORD[rsi]
-	movdqa	xmm2,xmm1
-	pxor	xmm2,xmm0
-	pand	xmm2,xmm3
-	pxor	xmm0,xmm2
-	pxor	xmm1,xmm2
-	movdqu	XMMWORD[rdi],xmm0
-	movdqu	XMMWORD[rsi],xmm1
-
-	movdqu	xmm0,XMMWORD[16+rdi]
-	movdqu	xmm1,XMMWORD[16+rsi]
-	movdqa	xmm2,xmm1
-	pxor	xmm2,xmm0
-	pand	xmm2,xmm3
-	pxor	xmm0,xmm2
-	pxor	xmm1,xmm2
-	movdqu	XMMWORD[16+rdi],xmm0
-	movdqu	XMMWORD[16+rsi],xmm1
-
-	movdqu	xmm0,XMMWORD[32+rdi]
-	movdqu	xmm1,XMMWORD[32+rsi]
-	movdqa	xmm2,xmm1
-	pxor	xmm2,xmm0
-	pand	xmm2,xmm3
-	pxor	xmm0,xmm2
-	pxor	xmm1,xmm2
-	movdqu	XMMWORD[32+rdi],xmm0
-	movdqu	XMMWORD[32+rsi],xmm1
-
-	movdqu	xmm0,XMMWORD[48+rdi]
-	movdqu	xmm1,XMMWORD[48+rsi]
-	movdqa	xmm2,xmm1
-	pxor	xmm2,xmm0
-	pand	xmm2,xmm3
-	pxor	xmm0,xmm2
-	pxor	xmm1,xmm2
-	movdqu	XMMWORD[48+rdi],xmm0
-	movdqu	XMMWORD[48+rsi],xmm1
-
-	movdqu	xmm0,XMMWORD[64+rdi]
-	movdqu	xmm1,XMMWORD[64+rsi]
-	movdqa	xmm2,xmm1
-	pxor	xmm2,xmm0
-	pand	xmm2,xmm3
-	pxor	xmm0,xmm2
-	pxor	xmm1,xmm2
-	movdqu	XMMWORD[64+rdi],xmm0
-	movdqu	XMMWORD[64+rsi],xmm1
-
-	movdqu	xmm0,XMMWORD[80+rdi]
-	movdqu	xmm1,XMMWORD[80+rsi]
-	movdqa	xmm2,xmm1
-	pxor	xmm2,xmm0
-	pand	xmm2,xmm3
-	pxor	xmm0,xmm2
-	pxor	xmm1,xmm2
-	movdqu	XMMWORD[80+rdi],xmm0
-	movdqu	XMMWORD[80+rsi],xmm1
-
-	movdqu	xmm0,XMMWORD[96+rdi]
-	movdqu	xmm1,XMMWORD[96+rsi]
-	movdqa	xmm2,xmm1
-	pxor	xmm2,xmm0
-	pand	xmm2,xmm3
-	pxor	xmm0,xmm2
-	pxor	xmm1,xmm2
-	movdqu	XMMWORD[96+rdi],xmm0
-	movdqu	XMMWORD[96+rsi],xmm1
-
-	movdqu	xmm0,XMMWORD[112+rdi]
-	movdqu	xmm1,XMMWORD[112+rsi]
-	movdqa	xmm2,xmm1
-	pxor	xmm2,xmm0
-	pand	xmm2,xmm3
-	pxor	xmm0,xmm2
-	pxor	xmm1,xmm2
-	movdqu	XMMWORD[112+rdi],xmm0
-	movdqu	XMMWORD[112+rsi],xmm1
-
-	movdqu	xmm0,XMMWORD[128+rdi]
-	movdqu	xmm1,XMMWORD[128+rsi]
-	movdqa	xmm2,xmm1
-	pxor	xmm2,xmm0
-	pand	xmm2,xmm3
-	pxor	xmm0,xmm2
-	pxor	xmm1,xmm2
-	movdqu	XMMWORD[128+rdi],xmm0
-	movdqu	XMMWORD[128+rsi],xmm1
-
-	movdqu	xmm0,XMMWORD[144+rdi]
-	movdqu	xmm1,XMMWORD[144+rsi]
-	movdqa	xmm2,xmm1
-	pxor	xmm2,xmm0
-	pand	xmm2,xmm3
-	pxor	xmm0,xmm2
-	pxor	xmm1,xmm2
-	movdqu	XMMWORD[144+rdi],xmm0
-	movdqu	XMMWORD[144+rsi],xmm1
-
-	movdqu	xmm0,XMMWORD[160+rdi]
-	movdqu	xmm1,XMMWORD[160+rsi]
-	movdqa	xmm2,xmm1
-	pxor	xmm2,xmm0
-	pand	xmm2,xmm3
-	pxor	xmm0,xmm2
-	pxor	xmm1,xmm2
-	movdqu	XMMWORD[160+rdi],xmm0
-	movdqu	XMMWORD[160+rsi],xmm1
-
-	movdqu	xmm0,XMMWORD[176+rdi]
-	movdqu	xmm1,XMMWORD[176+rsi]
-	movdqa	xmm2,xmm1
-	pxor	xmm2,xmm0
-	pand	xmm2,xmm3
-	pxor	xmm0,xmm2
-	pxor	xmm1,xmm2
-	movdqu	XMMWORD[176+rdi],xmm0
-	movdqu	XMMWORD[176+rsi],xmm1
-
-	movdqu	xmm0,XMMWORD[192+rdi]
-	movdqu	xmm1,XMMWORD[192+rsi]
-	movdqa	xmm2,xmm1
-	pxor	xmm2,xmm0
-	pand	xmm2,xmm3
-	pxor	xmm0,xmm2
-	pxor	xmm1,xmm2
-	movdqu	XMMWORD[192+rdi],xmm0
-	movdqu	XMMWORD[192+rsi],xmm1
-
-	movdqu	xmm0,XMMWORD[208+rdi]
-	movdqu	xmm1,XMMWORD[208+rsi]
-	movdqa	xmm2,xmm1
-	pxor	xmm2,xmm0
-	pand	xmm2,xmm3
-	pxor	xmm0,xmm2
-	pxor	xmm1,xmm2
-	movdqu	XMMWORD[208+rdi],xmm0
-	movdqu	XMMWORD[208+rsi],xmm1
-
-	mov	rdi,QWORD[8+rsp]	;WIN64 epilogue
-	mov	rsi,QWORD[16+rsp]
-	DB	0F3h,0C3h		;repret
-global	sike_fpsub
-
-sike_fpsub:
-	mov	QWORD[8+rsp],rdi	;WIN64 prologue
-	mov	QWORD[16+rsp],rsi
-	mov	rax,rsp
-$L$SEH_begin_sike_fpsub:
-	mov	rdi,rcx
-	mov	rsi,rdx
-	mov	rdx,r8
-
-
-
-	push	r12
-
-
-	push	r13
-
-
-	push	r14
-
-
-
-	xor	rax,rax
-
-	mov	r8,QWORD[rdi]
-	sub	r8,QWORD[rsi]
-	mov	r9,QWORD[8+rdi]
-	sbb	r9,QWORD[8+rsi]
-	mov	r10,QWORD[16+rdi]
-	sbb	r10,QWORD[16+rsi]
-	mov	r11,QWORD[24+rdi]
-	sbb	r11,QWORD[24+rsi]
-	mov	r12,QWORD[32+rdi]
-	sbb	r12,QWORD[32+rsi]
-	mov	r13,QWORD[40+rdi]
-	sbb	r13,QWORD[40+rsi]
-	mov	r14,QWORD[48+rdi]
-	sbb	r14,QWORD[48+rsi]
-
-	sbb	rax,0x0
-
-	mov	rdi,QWORD[$L$p434x2]
-	and	rdi,rax
-	mov	rsi,QWORD[((8+$L$p434x2))]
-	and	rsi,rax
-	mov	rcx,QWORD[((16+$L$p434x2))]
-	and	rcx,rax
-
-	add	r8,rdi
-	mov	QWORD[rdx],r8
-	adc	r9,rsi
-	mov	QWORD[8+rdx],r9
-	adc	r10,rsi
-	mov	QWORD[16+rdx],r10
-	adc	r11,rcx
-	mov	QWORD[24+rdx],r11
-
-	setc	cl
-	mov	r8,QWORD[((24+$L$p434x2))]
-	and	r8,rax
-	mov	r9,QWORD[((32+$L$p434x2))]
-	and	r9,rax
-	mov	r10,QWORD[((40+$L$p434x2))]
-	and	r10,rax
-	bt	rcx,0x0
-
-	adc	r12,r8
-	adc	r13,r9
-	adc	r14,r10
-	mov	QWORD[32+rdx],r12
-	mov	QWORD[40+rdx],r13
-	mov	QWORD[48+rdx],r14
-
-	pop	r14
-
-	pop	r13
-
-	pop	r12
-
-	mov	rdi,QWORD[8+rsp]	;WIN64 epilogue
-	mov	rsi,QWORD[16+rsp]
-	DB	0F3h,0C3h		;repret
-
-global	sike_mpadd_asm
-
-sike_mpadd_asm:
-	mov	QWORD[8+rsp],rdi	;WIN64 prologue
-	mov	QWORD[16+rsp],rsi
-	mov	rax,rsp
-$L$SEH_begin_sike_mpadd_asm:
-	mov	rdi,rcx
-	mov	rsi,rdx
-	mov	rdx,r8
-
-
-
-	mov	r8,QWORD[rdi];
-	mov	r9,QWORD[8+rdi]
-	mov	r10,QWORD[16+rdi]
-	mov	r11,QWORD[24+rdi]
-	mov	rcx,QWORD[32+rdi]
-	add	r8,QWORD[rsi]
-	adc	r9,QWORD[8+rsi]
-	adc	r10,QWORD[16+rsi]
-	adc	r11,QWORD[24+rsi]
-	adc	rcx,QWORD[32+rsi]
-	mov	QWORD[rdx],r8
-	mov	QWORD[8+rdx],r9
-	mov	QWORD[16+rdx],r10
-	mov	QWORD[24+rdx],r11
-	mov	QWORD[32+rdx],rcx
-
-	mov	r8,QWORD[40+rdi]
-	mov	r9,QWORD[48+rdi]
-	adc	r8,QWORD[40+rsi]
-	adc	r9,QWORD[48+rsi]
-	mov	QWORD[40+rdx],r8
-	mov	QWORD[48+rdx],r9
-	mov	rdi,QWORD[8+rsp]	;WIN64 epilogue
-	mov	rsi,QWORD[16+rsp]
-	DB	0F3h,0C3h		;repret
-
-global	sike_mpsubx2_asm
-
-sike_mpsubx2_asm:
-	mov	QWORD[8+rsp],rdi	;WIN64 prologue
-	mov	QWORD[16+rsp],rsi
-	mov	rax,rsp
-$L$SEH_begin_sike_mpsubx2_asm:
-	mov	rdi,rcx
-	mov	rsi,rdx
-	mov	rdx,r8
-
-
-
-	xor	rax,rax
-
-	mov	r8,QWORD[rdi]
-	mov	r9,QWORD[8+rdi]
-	mov	r10,QWORD[16+rdi]
-	mov	r11,QWORD[24+rdi]
-	mov	rcx,QWORD[32+rdi]
-	sub	r8,QWORD[rsi]
-	sbb	r9,QWORD[8+rsi]
-	sbb	r10,QWORD[16+rsi]
-	sbb	r11,QWORD[24+rsi]
-	sbb	rcx,QWORD[32+rsi]
-	mov	QWORD[rdx],r8
-	mov	QWORD[8+rdx],r9
-	mov	QWORD[16+rdx],r10
-	mov	QWORD[24+rdx],r11
-	mov	QWORD[32+rdx],rcx
-
-	mov	r8,QWORD[40+rdi]
-	mov	r9,QWORD[48+rdi]
-	mov	r10,QWORD[56+rdi]
-	mov	r11,QWORD[64+rdi]
-	mov	rcx,QWORD[72+rdi]
-	sbb	r8,QWORD[40+rsi]
-	sbb	r9,QWORD[48+rsi]
-	sbb	r10,QWORD[56+rsi]
-	sbb	r11,QWORD[64+rsi]
-	sbb	rcx,QWORD[72+rsi]
-	mov	QWORD[40+rdx],r8
-	mov	QWORD[48+rdx],r9
-	mov	QWORD[56+rdx],r10
-	mov	QWORD[64+rdx],r11
-	mov	QWORD[72+rdx],rcx
-
-	mov	r8,QWORD[80+rdi]
-	mov	r9,QWORD[88+rdi]
-	mov	r10,QWORD[96+rdi]
-	mov	r11,QWORD[104+rdi]
-	sbb	r8,QWORD[80+rsi]
-	sbb	r9,QWORD[88+rsi]
-	sbb	r10,QWORD[96+rsi]
-	sbb	r11,QWORD[104+rsi]
-	sbb	rax,0x0
-	mov	QWORD[80+rdx],r8
-	mov	QWORD[88+rdx],r9
-	mov	QWORD[96+rdx],r10
-	mov	QWORD[104+rdx],r11
-	mov	rdi,QWORD[8+rsp]	;WIN64 epilogue
-	mov	rsi,QWORD[16+rsp]
-	DB	0F3h,0C3h		;repret
-
-global	sike_mpdblsubx2_asm
-
-sike_mpdblsubx2_asm:
-	mov	QWORD[8+rsp],rdi	;WIN64 prologue
-	mov	QWORD[16+rsp],rsi
-	mov	rax,rsp
-$L$SEH_begin_sike_mpdblsubx2_asm:
-	mov	rdi,rcx
-	mov	rsi,rdx
-	mov	rdx,r8
-
-
-
-	push	r12
-
-
-	push	r13
-
-
-
-	xor	rax,rax
-
-
-	mov	r8,QWORD[rdx]
-	mov	r9,QWORD[8+rdx]
-	mov	r10,QWORD[16+rdx]
-	mov	r11,QWORD[24+rdx]
-	mov	r12,QWORD[32+rdx]
-	mov	r13,QWORD[40+rdx]
-	mov	rcx,QWORD[48+rdx]
-	sub	r8,QWORD[rdi]
-	sbb	r9,QWORD[8+rdi]
-	sbb	r10,QWORD[16+rdi]
-	sbb	r11,QWORD[24+rdi]
-	sbb	r12,QWORD[32+rdi]
-	sbb	r13,QWORD[40+rdi]
-	sbb	rcx,QWORD[48+rdi]
-	adc	rax,0x0
-
-
-	sub	r8,QWORD[rsi]
-	sbb	r9,QWORD[8+rsi]
-	sbb	r10,QWORD[16+rsi]
-	sbb	r11,QWORD[24+rsi]
-	sbb	r12,QWORD[32+rsi]
-	sbb	r13,QWORD[40+rsi]
-	sbb	rcx,QWORD[48+rsi]
-	adc	rax,0x0
-
-
-	mov	QWORD[rdx],r8
-	mov	QWORD[8+rdx],r9
-	mov	QWORD[16+rdx],r10
-	mov	QWORD[24+rdx],r11
-	mov	QWORD[32+rdx],r12
-	mov	QWORD[40+rdx],r13
-	mov	QWORD[48+rdx],rcx
-
-
-	mov	r8,QWORD[56+rdx]
-	mov	r9,QWORD[64+rdx]
-	mov	r10,QWORD[72+rdx]
-	mov	r11,QWORD[80+rdx]
-	mov	r12,QWORD[88+rdx]
-	mov	r13,QWORD[96+rdx]
-	mov	rcx,QWORD[104+rdx]
-
-	sub	r8,rax
-	sbb	r8,QWORD[56+rdi]
-	sbb	r9,QWORD[64+rdi]
-	sbb	r10,QWORD[72+rdi]
-	sbb	r11,QWORD[80+rdi]
-	sbb	r12,QWORD[88+rdi]
-	sbb	r13,QWORD[96+rdi]
-	sbb	rcx,QWORD[104+rdi]
-
-
-	sub	r8,QWORD[56+rsi]
-	sbb	r9,QWORD[64+rsi]
-	sbb	r10,QWORD[72+rsi]
-	sbb	r11,QWORD[80+rsi]
-	sbb	r12,QWORD[88+rsi]
-	sbb	r13,QWORD[96+rsi]
-	sbb	rcx,QWORD[104+rsi]
-
-
-	mov	QWORD[56+rdx],r8
-	mov	QWORD[64+rdx],r9
-	mov	QWORD[72+rdx],r10
-	mov	QWORD[80+rdx],r11
-	mov	QWORD[88+rdx],r12
-	mov	QWORD[96+rdx],r13
-	mov	QWORD[104+rdx],rcx
-
-	pop	r13
-
-	pop	r12
-
-	mov	rdi,QWORD[8+rsp]	;WIN64 epilogue
-	mov	rsi,QWORD[16+rsp]
-	DB	0F3h,0C3h		;repret
-
-
-$L$rdc_bdw:
-
-
-
-
-
-
-
-
-	xor	rax,rax
-	mov	rdx,QWORD[((0+0))+rdi]
-	mulx	r9,r8,QWORD[((0+$L$p434p1))]
-	mulx	r10,r12,QWORD[((8+$L$p434p1))]
-	mulx	r11,r13,QWORD[((16+$L$p434p1))]
-
-	adox	r9,r12
-	adox	r10,r13
-
-	mulx	r12,r13,QWORD[((24+$L$p434p1))]
-	adox	r11,r13
-	adox	r12,rax
-
-	xor	rax,rax
-	mov	rdx,QWORD[((0+8))+rdi]
-	mulx	rcx,r13,QWORD[((0+$L$p434p1))]
-	adcx	r9,r13
-	adcx	r10,rcx
-
-	mulx	r13,rcx,QWORD[((8+$L$p434p1))]
-	adcx	r11,r13
-	adox	r10,rcx
-
-	mulx	r13,rcx,QWORD[((16+$L$p434p1))]
-	adcx	r12,r13
-	adox	r11,rcx
-
-	mulx	r13,rcx,QWORD[((24+$L$p434p1))]
-	adcx	r13,rax
-	adox	r12,rcx
-	adox	r13,rax
-
-	xor	rcx,rcx
-	add	r8,QWORD[24+rdi]
-	adc	r9,QWORD[32+rdi]
-	adc	r10,QWORD[40+rdi]
-	adc	r11,QWORD[48+rdi]
-	adc	r12,QWORD[56+rdi]
-	adc	r13,QWORD[64+rdi]
-	adc	rcx,QWORD[72+rdi]
-	mov	QWORD[24+rdi],r8
-	mov	QWORD[32+rdi],r9
-	mov	QWORD[40+rdi],r10
-	mov	QWORD[48+rdi],r11
-	mov	QWORD[56+rdi],r12
-	mov	QWORD[64+rdi],r13
-	mov	QWORD[72+rdi],rcx
-	mov	r8,QWORD[80+rdi]
-	mov	r9,QWORD[88+rdi]
-	mov	r10,QWORD[96+rdi]
-	mov	r11,QWORD[104+rdi]
-	adc	r8,0x0
-	adc	r9,0x0
-	adc	r10,0x0
-	adc	r11,0x0
-	mov	QWORD[80+rdi],r8
-	mov	QWORD[88+rdi],r9
-	mov	QWORD[96+rdi],r10
-	mov	QWORD[104+rdi],r11
-
-	xor	rax,rax
-	mov	rdx,QWORD[((16+0))+rdi]
-	mulx	r9,r8,QWORD[((0+$L$p434p1))]
-	mulx	r10,r12,QWORD[((8+$L$p434p1))]
-	mulx	r11,r13,QWORD[((16+$L$p434p1))]
-
-	adox	r9,r12
-	adox	r10,r13
-
-	mulx	r12,r13,QWORD[((24+$L$p434p1))]
-	adox	r11,r13
-	adox	r12,rax
-
-	xor	rax,rax
-	mov	rdx,QWORD[((16+8))+rdi]
-	mulx	rcx,r13,QWORD[((0+$L$p434p1))]
-	adcx	r9,r13
-	adcx	r10,rcx
-
-	mulx	r13,rcx,QWORD[((8+$L$p434p1))]
-	adcx	r11,r13
-	adox	r10,rcx
-
-	mulx	r13,rcx,QWORD[((16+$L$p434p1))]
-	adcx	r12,r13
-	adox	r11,rcx
-
-	mulx	r13,rcx,QWORD[((24+$L$p434p1))]
-	adcx	r13,rax
-	adox	r12,rcx
-	adox	r13,rax
-
-	xor	rcx,rcx
-	add	r8,QWORD[40+rdi]
-	adc	r9,QWORD[48+rdi]
-	adc	r10,QWORD[56+rdi]
-	adc	r11,QWORD[64+rdi]
-	adc	r12,QWORD[72+rdi]
-	adc	r13,QWORD[80+rdi]
-	adc	rcx,QWORD[88+rdi]
-	mov	QWORD[40+rdi],r8
-	mov	QWORD[48+rdi],r9
-	mov	QWORD[56+rdi],r10
-	mov	QWORD[64+rdi],r11
-	mov	QWORD[72+rdi],r12
-	mov	QWORD[80+rdi],r13
-	mov	QWORD[88+rdi],rcx
-	mov	r8,QWORD[96+rdi]
-	mov	r9,QWORD[104+rdi]
-	adc	r8,0x0
-	adc	r9,0x0
-	mov	QWORD[96+rdi],r8
-	mov	QWORD[104+rdi],r9
-
-	xor	rax,rax
-	mov	rdx,QWORD[((32+0))+rdi]
-	mulx	r9,r8,QWORD[((0+$L$p434p1))]
-	mulx	r10,r12,QWORD[((8+$L$p434p1))]
-	mulx	r11,r13,QWORD[((16+$L$p434p1))]
-
-	adox	r9,r12
-	adox	r10,r13
-
-	mulx	r12,r13,QWORD[((24+$L$p434p1))]
-	adox	r11,r13
-	adox	r12,rax
-
-	xor	rax,rax
-	mov	rdx,QWORD[((32+8))+rdi]
-	mulx	rcx,r13,QWORD[((0+$L$p434p1))]
-	adcx	r9,r13
-	adcx	r10,rcx
-
-	mulx	r13,rcx,QWORD[((8+$L$p434p1))]
-	adcx	r11,r13
-	adox	r10,rcx
-
-	mulx	r13,rcx,QWORD[((16+$L$p434p1))]
-	adcx	r12,r13
-	adox	r11,rcx
-
-	mulx	r13,rcx,QWORD[((24+$L$p434p1))]
-	adcx	r13,rax
-	adox	r12,rcx
-	adox	r13,rax
-
-	xor	rcx,rcx
-	add	r8,QWORD[56+rdi]
-	adc	r9,QWORD[64+rdi]
-	adc	r10,QWORD[72+rdi]
-	adc	r11,QWORD[80+rdi]
-	adc	r12,QWORD[88+rdi]
-	adc	r13,QWORD[96+rdi]
-	adc	rcx,QWORD[104+rdi]
-	mov	QWORD[rsi],r8
-	mov	QWORD[8+rsi],r9
-	mov	QWORD[72+rdi],r10
-	mov	QWORD[80+rdi],r11
-	mov	QWORD[88+rdi],r12
-	mov	QWORD[96+rdi],r13
-	mov	QWORD[104+rdi],rcx
-
-	xor	rax,rax
-	mov	rdx,QWORD[48+rdi]
-	mulx	r9,r8,QWORD[((0+$L$p434p1))]
-	mulx	r10,r12,QWORD[((8+$L$p434p1))]
-	mulx	r11,r13,QWORD[((16+$L$p434p1))]
-
-	adox	r9,r12
-	adox	r10,r13
-
-	mulx	r12,r13,QWORD[((24+$L$p434p1))]
-	adox	r11,r13
-	adox	r12,rax
-
-	add	r8,QWORD[72+rdi]
-	adc	r9,QWORD[80+rdi]
-	adc	r10,QWORD[88+rdi]
-	adc	r11,QWORD[96+rdi]
-	adc	r12,QWORD[104+rdi]
-	mov	QWORD[16+rsi],r8
-	mov	QWORD[24+rsi],r9
-	mov	QWORD[32+rsi],r10
-	mov	QWORD[40+rsi],r11
-	mov	QWORD[48+rsi],r12
-
-
-	pop	r15
-
-
-	pop	r14
-
-
-	pop	r13
-
-
-	pop	r12
-
-
-	mov	rdi,QWORD[8+rsp]	;WIN64 epilogue
-	mov	rsi,QWORD[16+rsp]
-	DB	0F3h,0C3h		;repret
-
-global	sike_fprdc
-
-sike_fprdc:
-	mov	QWORD[8+rsp],rdi	;WIN64 prologue
-	mov	QWORD[16+rsp],rsi
-	mov	rax,rsp
-$L$SEH_begin_sike_fprdc:
-	mov	rdi,rcx
-	mov	rsi,rdx
-	mov	rdx,r8
-
-
-
-	push	r12
-
-
-	push	r13
-
-
-	push	r14
-
-
-	push	r15
-
-
-
-
-
-	lea	rcx,[OPENSSL_ia32cap_P]
-	mov	rcx,QWORD[8+rcx]
-	and	ecx,0x80100
-	cmp	ecx,0x80100
-	je	NEAR $L$rdc_bdw
-
-
-
-
-	mov	r14,QWORD[((0+0))+rdi]
-	mov	rax,QWORD[((0+$L$p434p1))]
-	mul	r14
-	xor	r10,r10
-	mov	r8,rax
-	mov	r9,rdx
-
-
-	mov	rax,QWORD[((8+$L$p434p1))]
-	mul	r14
-	xor	r11,r11
-	add	r9,rax
-	adc	r10,rdx
-
-
-	mov	rcx,QWORD[((0+8))+rdi]
-	mov	rax,QWORD[((0+$L$p434p1))]
-	mul	rcx
-	add	r9,rax
-	adc	r10,rdx
-	adc	r11,0x0
-
-
-	xor	r12,r12
-	mov	rax,QWORD[((16+$L$p434p1))]
-	mul	r14
-	add	r10,rax
-	adc	r11,rdx
-	adc	r12,0x0
-
-
-	mov	rax,QWORD[((8+$L$p434p1))]
-	mul	rcx
-	add	r10,rax
-	adc	r11,rdx
-	adc	r12,0x0
-
-
-	mov	rax,QWORD[((24+$L$p434p1))]
-	mul	r14
-	xor	r13,r13
-	add	r11,rax
-	adc	r12,rdx
-	adc	r13,0x0
-
-
-	mov	rax,QWORD[((16+$L$p434p1))]
-	mul	rcx
-	add	r11,rax
-	adc	r12,rdx
-	adc	r13,0x0
-
-
-	mov	rax,QWORD[((24+$L$p434p1))]
-	mul	rcx
-	add	r12,rax
-	adc	r13,rdx
-
-
-	xor	rcx,rcx
-	add	r8,QWORD[24+rdi]
-	adc	r9,QWORD[32+rdi]
-	adc	r10,QWORD[40+rdi]
-	adc	r11,QWORD[48+rdi]
-	adc	r12,QWORD[56+rdi]
-	adc	r13,QWORD[64+rdi]
-	adc	rcx,QWORD[72+rdi]
-	mov	QWORD[24+rdi],r8
-	mov	QWORD[32+rdi],r9
-	mov	QWORD[40+rdi],r10
-	mov	QWORD[48+rdi],r11
-	mov	QWORD[56+rdi],r12
-	mov	QWORD[64+rdi],r13
-	mov	QWORD[72+rdi],rcx
-	mov	r8,QWORD[80+rdi]
-	mov	r9,QWORD[88+rdi]
-	mov	r10,QWORD[96+rdi]
-	mov	r11,QWORD[104+rdi]
-	adc	r8,0x0
-	adc	r9,0x0
-	adc	r10,0x0
-	adc	r11,0x0
-	mov	QWORD[80+rdi],r8
-	mov	QWORD[88+rdi],r9
-	mov	QWORD[96+rdi],r10
-	mov	QWORD[104+rdi],r11
-
-
-	mov	r14,QWORD[((16+0))+rdi]
-	mov	rax,QWORD[((0+$L$p434p1))]
-	mul	r14
-	xor	r10,r10
-	mov	r8,rax
-	mov	r9,rdx
-
-
-	mov	rax,QWORD[((8+$L$p434p1))]
-	mul	r14
-	xor	r11,r11
-	add	r9,rax
-	adc	r10,rdx
-
-
-	mov	rcx,QWORD[((16+8))+rdi]
-	mov	rax,QWORD[((0+$L$p434p1))]
-	mul	rcx
-	add	r9,rax
-	adc	r10,rdx
-	adc	r11,0x0
-
-
-	xor	r12,r12
-	mov	rax,QWORD[((16+$L$p434p1))]
-	mul	r14
-	add	r10,rax
-	adc	r11,rdx
-	adc	r12,0x0
-
-
-	mov	rax,QWORD[((8+$L$p434p1))]
-	mul	rcx
-	add	r10,rax
-	adc	r11,rdx
-	adc	r12,0x0
-
-
-	mov	rax,QWORD[((24+$L$p434p1))]
-	mul	r14
-	xor	r13,r13
-	add	r11,rax
-	adc	r12,rdx
-	adc	r13,0x0
-
-
-	mov	rax,QWORD[((16+$L$p434p1))]
-	mul	rcx
-	add	r11,rax
-	adc	r12,rdx
-	adc	r13,0x0
-
-
-	mov	rax,QWORD[((24+$L$p434p1))]
-	mul	rcx
-	add	r12,rax
-	adc	r13,rdx
-
-
-	xor	rcx,rcx
-	add	r8,QWORD[40+rdi]
-	adc	r9,QWORD[48+rdi]
-	adc	r10,QWORD[56+rdi]
-	adc	r11,QWORD[64+rdi]
-	adc	r12,QWORD[72+rdi]
-	adc	r13,QWORD[80+rdi]
-	adc	rcx,QWORD[88+rdi]
-	mov	QWORD[40+rdi],r8
-	mov	QWORD[48+rdi],r9
-	mov	QWORD[56+rdi],r10
-	mov	QWORD[64+rdi],r11
-	mov	QWORD[72+rdi],r12
-	mov	QWORD[80+rdi],r13
-	mov	QWORD[88+rdi],rcx
-	mov	r8,QWORD[96+rdi]
-	mov	r9,QWORD[104+rdi]
-	adc	r8,0x0
-	adc	r9,0x0
-	mov	QWORD[96+rdi],r8
-	mov	QWORD[104+rdi],r9
-
-
-	mov	r14,QWORD[((32+0))+rdi]
-	mov	rax,QWORD[((0+$L$p434p1))]
-	mul	r14
-	xor	r10,r10
-	mov	r8,rax
-	mov	r9,rdx
-
-
-	mov	rax,QWORD[((8+$L$p434p1))]
-	mul	r14
-	xor	r11,r11
-	add	r9,rax
-	adc	r10,rdx
-
-
-	mov	rcx,QWORD[((32+8))+rdi]
-	mov	rax,QWORD[((0+$L$p434p1))]
-	mul	rcx
-	add	r9,rax
-	adc	r10,rdx
-	adc	r11,0x0
-
-
-	xor	r12,r12
-	mov	rax,QWORD[((16+$L$p434p1))]
-	mul	r14
-	add	r10,rax
-	adc	r11,rdx
-	adc	r12,0x0
-
-
-	mov	rax,QWORD[((8+$L$p434p1))]
-	mul	rcx
-	add	r10,rax
-	adc	r11,rdx
-	adc	r12,0x0
-
-
-	mov	rax,QWORD[((24+$L$p434p1))]
-	mul	r14
-	xor	r13,r13
-	add	r11,rax
-	adc	r12,rdx
-	adc	r13,0x0
-
-
-	mov	rax,QWORD[((16+$L$p434p1))]
-	mul	rcx
-	add	r11,rax
-	adc	r12,rdx
-	adc	r13,0x0
-
-
-	mov	rax,QWORD[((24+$L$p434p1))]
-	mul	rcx
-	add	r12,rax
-	adc	r13,rdx
-
-
-	xor	rcx,rcx
-	add	r8,QWORD[56+rdi]
-	adc	r9,QWORD[64+rdi]
-	adc	r10,QWORD[72+rdi]
-	adc	r11,QWORD[80+rdi]
-	adc	r12,QWORD[88+rdi]
-	adc	r13,QWORD[96+rdi]
-	adc	rcx,QWORD[104+rdi]
-	mov	QWORD[rsi],r8
-	mov	QWORD[8+rsi],r9
-	mov	QWORD[72+rdi],r10
-	mov	QWORD[80+rdi],r11
-	mov	QWORD[88+rdi],r12
-	mov	QWORD[96+rdi],r13
-	mov	QWORD[104+rdi],rcx
-
-	mov	r13,QWORD[48+rdi]
-
-	xor	r10,r10
-	mov	rax,QWORD[((0+$L$p434p1))]
-	mul	r13
-	mov	r8,rax
-	mov	r9,rdx
-
-	xor	r11,r11
-	mov	rax,QWORD[((8+$L$p434p1))]
-	mul	r13
-	add	r9,rax
-	adc	r10,rdx
-
-	xor	r12,r12
-	mov	rax,QWORD[((16+$L$p434p1))]
-	mul	r13
-	add	r10,rax
-	adc	r11,rdx
-
-	mov	rax,QWORD[((24+$L$p434p1))]
-	mul	r13
-	add	r11,rax
-	adc	r12,rdx
-
-	add	r8,QWORD[72+rdi]
-	adc	r9,QWORD[80+rdi]
-	adc	r10,QWORD[88+rdi]
-	adc	r11,QWORD[96+rdi]
-	adc	r12,QWORD[104+rdi]
-	mov	QWORD[16+rsi],r8
-	mov	QWORD[24+rsi],r9
-	mov	QWORD[32+rsi],r10
-	mov	QWORD[40+rsi],r11
-	mov	QWORD[48+rsi],r12
-
-
-	pop	r15
-
-	pop	r14
-
-	pop	r13
-
-	pop	r12
-
-	mov	rdi,QWORD[8+rsp]	;WIN64 epilogue
-	mov	rsi,QWORD[16+rsp]
-	DB	0F3h,0C3h		;repret
-
-$L$mul_bdw:
-
-
-
-
-
-
-
-
-
-	mov	rcx,rdx
-	xor	rax,rax
-
-
-	mov	r8,QWORD[rdi]
-	mov	r9,QWORD[8+rdi]
-	mov	r10,QWORD[16+rdi]
-	mov	r11,QWORD[24+rdi]
-
-	push	rbx
-
-
-	push	rbp
-
-
-	sub	rsp,96
-
-
-	add	r8,QWORD[32+rdi]
-	adc	r9,QWORD[40+rdi]
-	adc	r10,QWORD[48+rdi]
-	adc	r11,0x0
-	sbb	rax,0x0
-	mov	QWORD[rsp],r8
-	mov	QWORD[8+rsp],r9
-	mov	QWORD[16+rsp],r10
-	mov	QWORD[24+rsp],r11
-
-
-	xor	rbx,rbx
-	mov	r12,QWORD[rsi]
-	mov	r13,QWORD[8+rsi]
-	mov	r14,QWORD[16+rsi]
-	mov	r15,QWORD[24+rsi]
-	add	r12,QWORD[32+rsi]
-	adc	r13,QWORD[40+rsi]
-	adc	r14,QWORD[48+rsi]
-	adc	r15,0x0
-	sbb	rbx,0x0
-	mov	QWORD[32+rsp],r12
-	mov	QWORD[40+rsp],r13
-	mov	QWORD[48+rsp],r14
-	mov	QWORD[56+rsp],r15
-
-
-	and	r12,rax
-	and	r13,rax
-	and	r14,rax
-	and	r15,rax
-
-
-	and	r8,rbx
-	and	r9,rbx
-	and	r10,rbx
-	and	r11,rbx
-
-
-	add	r8,r12
-	adc	r9,r13
-	adc	r10,r14
-	adc	r11,r15
-	mov	QWORD[64+rsp],r8
-	mov	QWORD[72+rsp],r9
-	mov	QWORD[80+rsp],r10
-	mov	QWORD[88+rsp],r11
-
-
-	mov	rdx,QWORD[((0+0))+rsp]
-	mulx	r8,r9,QWORD[((32+0))+rsp]
-	mov	QWORD[((0+0))+rsp],r9
-	mulx	r9,r10,QWORD[((32+8))+rsp]
-	xor	rax,rax
-	adox	r8,r10
-	mulx	r10,r11,QWORD[((32+16))+rsp]
-	adox	r9,r11
-	mulx	r11,r12,QWORD[((32+24))+rsp]
-	adox	r10,r12
-
-	mov	rdx,QWORD[((0+8))+rsp]
-	mulx	r13,r12,QWORD[((32+0))+rsp]
-	adox	r11,rax
-	xor	rax,rax
-	mulx	r14,r15,QWORD[((32+8))+rsp]
-	adox	r12,r8
-	mov	QWORD[((0+8))+rsp],r12
-	adcx	r13,r15
-	mulx	r15,rbx,QWORD[((32+16))+rsp]
-	adcx	r14,rbx
-	adox	r13,r9
-	mulx	rbx,rbp,QWORD[((32+24))+rsp]
-	adcx	r15,rbp
-	adcx	rbx,rax
-	adox	r14,r10
-
-	mov	rdx,QWORD[((0+16))+rsp]
-	mulx	r9,r8,QWORD[((32+0))+rsp]
-	adox	r15,r11
-	adox	rbx,rax
-	xor	rax,rax
-	mulx	r10,r11,QWORD[((32+8))+rsp]
-	adox	r8,r13
-	mov	QWORD[((0+16))+rsp],r8
-	adcx	r9,r11
-	mulx	r11,r12,QWORD[((32+16))+rsp]
-	adcx	r10,r12
-	adox	r9,r14
-	mulx	r12,rbp,QWORD[((32+24))+rsp]
-	adcx	r11,rbp
-	adcx	r12,rax
-
-	adox	r10,r15
-	adox	r11,rbx
-	adox	r12,rax
-
-	mov	rdx,QWORD[((0+24))+rsp]
-	mulx	r13,r8,QWORD[((32+0))+rsp]
-	xor	rax,rax
-	mulx	r14,r15,QWORD[((32+8))+rsp]
-	adcx	r13,r15
-	adox	r9,r8
-	mulx	r15,rbx,QWORD[((32+16))+rsp]
-	adcx	r14,rbx
-	adox	r10,r13
-	mulx	rbx,rbp,QWORD[((32+24))+rsp]
-	adcx	r15,rbp
-	adcx	rbx,rax
-	adox	r11,r14
-	adox	r12,r15
-	adox	rbx,rax
-	mov	QWORD[((0+24))+rsp],r9
-	mov	QWORD[((0+32))+rsp],r10
-	mov	QWORD[((0+40))+rsp],r11
-	mov	QWORD[((0+48))+rsp],r12
-	mov	QWORD[((0+56))+rsp],rbx
-
-
-
-	mov	rdx,QWORD[((0+0))+rdi]
-	mulx	r8,r9,QWORD[((0+0))+rsi]
-	mov	QWORD[((0+0))+rcx],r9
-	mulx	r9,r10,QWORD[((0+8))+rsi]
-	xor	rax,rax
-	adox	r8,r10
-	mulx	r10,r11,QWORD[((0+16))+rsi]
-	adox	r9,r11
-	mulx	r11,r12,QWORD[((0+24))+rsi]
-	adox	r10,r12
-
-	mov	rdx,QWORD[((0+8))+rdi]
-	mulx	r13,r12,QWORD[((0+0))+rsi]
-	adox	r11,rax
-	xor	rax,rax
-	mulx	r14,r15,QWORD[((0+8))+rsi]
-	adox	r12,r8
-	mov	QWORD[((0+8))+rcx],r12
-	adcx	r13,r15
-	mulx	r15,rbx,QWORD[((0+16))+rsi]
-	adcx	r14,rbx
-	adox	r13,r9
-	mulx	rbx,rbp,QWORD[((0+24))+rsi]
-	adcx	r15,rbp
-	adcx	rbx,rax
-	adox	r14,r10
-
-	mov	rdx,QWORD[((0+16))+rdi]
-	mulx	r9,r8,QWORD[((0+0))+rsi]
-	adox	r15,r11
-	adox	rbx,rax
-	xor	rax,rax
-	mulx	r10,r11,QWORD[((0+8))+rsi]
-	adox	r8,r13
-	mov	QWORD[((0+16))+rcx],r8
-	adcx	r9,r11
-	mulx	r11,r12,QWORD[((0+16))+rsi]
-	adcx	r10,r12
-	adox	r9,r14
-	mulx	r12,rbp,QWORD[((0+24))+rsi]
-	adcx	r11,rbp
-	adcx	r12,rax
-
-	adox	r10,r15
-	adox	r11,rbx
-	adox	r12,rax
-
-	mov	rdx,QWORD[((0+24))+rdi]
-	mulx	r13,r8,QWORD[((0+0))+rsi]
-	xor	rax,rax
-	mulx	r14,r15,QWORD[((0+8))+rsi]
-	adcx	r13,r15
-	adox	r9,r8
-	mulx	r15,rbx,QWORD[((0+16))+rsi]
-	adcx	r14,rbx
-	adox	r10,r13
-	mulx	rbx,rbp,QWORD[((0+24))+rsi]
-	adcx	r15,rbp
-	adcx	rbx,rax
-	adox	r11,r14
-	adox	r12,r15
-	adox	rbx,rax
-	mov	QWORD[((0+24))+rcx],r9
-	mov	QWORD[((0+32))+rcx],r10
-	mov	QWORD[((0+40))+rcx],r11
-	mov	QWORD[((0+48))+rcx],r12
-	mov	QWORD[((0+56))+rcx],rbx
-
-
-
-	mov	rdx,QWORD[((32+0))+rdi]
-	mulx	r8,r9,QWORD[((32+0))+rsi]
-	mov	QWORD[((64+0))+rcx],r9
-	mulx	r9,r10,QWORD[((32+8))+rsi]
-	xor	rax,rax
-	adox	r8,r10
-	mulx	r10,r11,QWORD[((32+16))+rsi]
-	adox	r9,r11
-
-	mov	rdx,QWORD[((32+8))+rdi]
-	mulx	r11,r12,QWORD[((32+0))+rsi]
-	adox	r10,rax
-	xor	rax,rax
-
-	mulx	r13,r14,QWORD[((32+8))+rsi]
-	adox	r12,r8
-	mov	QWORD[((64+8))+rcx],r12
-	adcx	r11,r14
-
-	mulx	r14,r8,QWORD[((32+16))+rsi]
-	adox	r11,r9
-	adcx	r13,r8
-	adcx	r14,rax
-	adox	r13,r10
-
-	mov	rdx,QWORD[((32+16))+rdi]
-	mulx	r9,r8,QWORD[((32+0))+rsi]
-	adox	r14,rax
-	xor	rax,rax
-
-	mulx	r12,r10,QWORD[((32+8))+rsi]
-	adox	r8,r11
-	mov	QWORD[((64+16))+rcx],r8
-	adcx	r9,r13
-
-	mulx	r8,r11,QWORD[((32+16))+rsi]
-	adcx	r12,r14
-	adcx	r8,rax
-	adox	r9,r10
-	adox	r11,r12
-	adox	r8,rax
-	mov	QWORD[((64+24))+rcx],r9
-	mov	QWORD[((64+32))+rcx],r11
-	mov	QWORD[((64+40))+rcx],r8
-
-
-
-
-	mov	r8,QWORD[64+rsp]
-	mov	r9,QWORD[72+rsp]
-	mov	r10,QWORD[80+rsp]
-	mov	r11,QWORD[88+rsp]
-
-	mov	rax,QWORD[32+rsp]
-	add	r8,rax
-	mov	rax,QWORD[40+rsp]
-	adc	r9,rax
-	mov	rax,QWORD[48+rsp]
-	adc	r10,rax
-	mov	rax,QWORD[56+rsp]
-	adc	r11,rax
-
-
-	mov	r12,QWORD[rsp]
-	mov	r13,QWORD[8+rsp]
-	mov	r14,QWORD[16+rsp]
-	mov	r15,QWORD[24+rsp]
-	sub	r12,QWORD[rcx]
-	sbb	r13,QWORD[8+rcx]
-	sbb	r14,QWORD[16+rcx]
-	sbb	r15,QWORD[24+rcx]
-	sbb	r8,QWORD[32+rcx]
-	sbb	r9,QWORD[40+rcx]
-	sbb	r10,QWORD[48+rcx]
-	sbb	r11,QWORD[56+rcx]
-
-
-	sub	r12,QWORD[64+rcx]
-	sbb	r13,QWORD[72+rcx]
-	sbb	r14,QWORD[80+rcx]
-	sbb	r15,QWORD[88+rcx]
-	sbb	r8,QWORD[96+rcx]
-	sbb	r9,QWORD[104+rcx]
-	sbb	r10,0x0
-	sbb	r11,0x0
-
-	add	r12,QWORD[32+rcx]
-	mov	QWORD[32+rcx],r12
-	adc	r13,QWORD[40+rcx]
-	mov	QWORD[40+rcx],r13
-	adc	r14,QWORD[48+rcx]
-	mov	QWORD[48+rcx],r14
-	adc	r15,QWORD[56+rcx]
-	mov	QWORD[56+rcx],r15
-	adc	r8,QWORD[64+rcx]
-	mov	QWORD[64+rcx],r8
-	adc	r9,QWORD[72+rcx]
-	mov	QWORD[72+rcx],r9
-	adc	r10,QWORD[80+rcx]
-	mov	QWORD[80+rcx],r10
-	adc	r11,QWORD[88+rcx]
-	mov	QWORD[88+rcx],r11
-	mov	r12,QWORD[96+rcx]
-	adc	r12,0x0
-	mov	QWORD[96+rcx],r12
-	mov	r13,QWORD[104+rcx]
-	adc	r13,0x0
-	mov	QWORD[104+rcx],r13
-
-	add	rsp,96
-
-	pop	rbp
-
-
-	pop	rbx
-
-
-
-
-	pop	r15
-
-
-	pop	r14
-
-
-	pop	r13
-
-
-	pop	r12
-
-
-	mov	rdi,QWORD[8+rsp]	;WIN64 epilogue
-	mov	rsi,QWORD[16+rsp]
-	DB	0F3h,0C3h		;repret
-
-
-global	sike_mpmul
-
-sike_mpmul:
-	mov	QWORD[8+rsp],rdi	;WIN64 prologue
-	mov	QWORD[16+rsp],rsi
-	mov	rax,rsp
-$L$SEH_begin_sike_mpmul:
-	mov	rdi,rcx
-	mov	rsi,rdx
-	mov	rdx,r8
-
-
-
-	push	r12
-
-
-	push	r13
-
-
-	push	r14
-
-
-	push	r15
-
-
-
-
-
-	lea	rcx,[OPENSSL_ia32cap_P]
-	mov	rcx,QWORD[8+rcx]
-	and	ecx,0x80100
-	cmp	ecx,0x80100
-	je	NEAR $L$mul_bdw
-
-
-
-	mov	rcx,rdx
-
-	sub	rsp,112
-
-
-
-	xor	rax,rax
-	mov	r8,QWORD[32+rdi]
-	mov	r9,QWORD[40+rdi]
-	mov	r10,QWORD[48+rdi]
-	xor	r11,r11
-	add	r8,QWORD[rdi]
-	adc	r9,QWORD[8+rdi]
-	adc	r10,QWORD[16+rdi]
-	adc	r11,QWORD[24+rdi]
-
-	sbb	rax,0
-	mov	QWORD[64+rsp],rax
-
-	mov	QWORD[rcx],r8
-	mov	QWORD[8+rcx],r9
-	mov	QWORD[16+rcx],r10
-	mov	QWORD[24+rcx],r11
-
-
-	xor	rdx,rdx
-	mov	r12,QWORD[32+rsi]
-	mov	r13,QWORD[40+rsi]
-	mov	r14,QWORD[48+rsi]
-	xor	r15,r15
-	add	r12,QWORD[rsi]
-	adc	r13,QWORD[8+rsi]
-	adc	r14,QWORD[16+rsi]
-	adc	r15,QWORD[24+rsi]
-	sbb	rdx,0x0
-
-	mov	QWORD[72+rsp],rdx
-
-
-	mov	rax,QWORD[rcx]
-	mul	r12
-	mov	QWORD[rsp],rax
-	mov	r8,rdx
-
-	xor	r9,r9
-	mov	rax,QWORD[rcx]
-	mul	r13
-	add	r8,rax
-	adc	r9,rdx
-
-	xor	r10,r10
-	mov	rax,QWORD[8+rcx]
-	mul	r12
-	add	r8,rax
-	mov	QWORD[8+rsp],r8
-	adc	r9,rdx
-	adc	r10,0x0
-
-	xor	r8,r8
-	mov	rax,QWORD[rcx]
-	mul	r14
-	add	r9,rax
-	adc	r10,rdx
-	adc	r8,0x0
-
-	mov	rax,QWORD[16+rcx]
-	mul	r12
-	add	r9,rax
-	adc	r10,rdx
-	adc	r8,0x0
-
-	mov	rax,QWORD[8+rcx]
-	mul	r13
-	add	r9,rax
-	mov	QWORD[16+rsp],r9
-	adc	r10,rdx
-	adc	r8,0x0
-
-	xor	r9,r9
-	mov	rax,QWORD[rcx]
-	mul	r15
-	add	r10,rax
-	adc	r8,rdx
-	adc	r9,0x0
-
-	mov	rax,QWORD[24+rcx]
-	mul	r12
-	add	r10,rax
-	adc	r8,rdx
-	adc	r9,0x0
-
-	mov	rax,QWORD[8+rcx]
-	mul	r14
-	add	r10,rax
-	adc	r8,rdx
-	adc	r9,0x0
-
-	mov	rax,QWORD[16+rcx]
-	mul	r13
-	add	r10,rax
-	mov	QWORD[24+rsp],r10
-	adc	r8,rdx
-	adc	r9,0x0
-
-	xor	r10,r10
-	mov	rax,QWORD[8+rcx]
-	mul	r15
-	add	r8,rax
-	adc	r9,rdx
-	adc	r10,0x0
-
-	mov	rax,QWORD[24+rcx]
-	mul	r13
-	add	r8,rax
-	adc	r9,rdx
-	adc	r10,0x0
-
-	mov	rax,QWORD[16+rcx]
-	mul	r14
-	add	r8,rax
-	mov	QWORD[32+rsp],r8
-	adc	r9,rdx
-	adc	r10,0x0
-
-	xor	r11,r11
-	mov	rax,QWORD[16+rcx]
-	mul	r15
-	add	r9,rax
-	adc	r10,rdx
-	adc	r11,0x0
-
-	mov	rax,QWORD[24+rcx]
-	mul	r14
-	add	r9,rax
-	mov	QWORD[40+rsp],r9
-	adc	r10,rdx
-	adc	r11,0x0
-
-	mov	rax,QWORD[24+rcx]
-	mul	r15
-	add	r10,rax
-	mov	QWORD[48+rsp],r10
-	adc	r11,rdx
-	mov	QWORD[56+rsp],r11
-
-
-	mov	rax,QWORD[64+rsp]
-	and	r12,rax
-	and	r13,rax
-	and	r14,rax
-	and	r15,rax
-
-
-	mov	rax,QWORD[72+rsp]
-	mov	r8,QWORD[rcx]
-	and	r8,rax
-	mov	r9,QWORD[8+rcx]
-	and	r9,rax
-	mov	r10,QWORD[16+rcx]
-	and	r10,rax
-	mov	r11,QWORD[24+rcx]
-	and	r11,rax
-
-
-	add	r12,r8
-	adc	r13,r9
-	adc	r14,r10
-	adc	r15,r11
-
-
-	mov	rax,QWORD[32+rsp]
-	add	r12,rax
-	mov	rax,QWORD[40+rsp]
-	adc	r13,rax
-	mov	rax,QWORD[48+rsp]
-	adc	r14,rax
-	mov	rax,QWORD[56+rsp]
-	adc	r15,rax
-	mov	QWORD[80+rsp],r12
-	mov	QWORD[88+rsp],r13
-	mov	QWORD[96+rsp],r14
-	mov	QWORD[104+rsp],r15
-
-
-	mov	r11,QWORD[rdi]
-	mov	rax,QWORD[rsi]
-	mul	r11
-	xor	r9,r9
-	mov	QWORD[rcx],rax
-	mov	r8,rdx
-
-	mov	r14,QWORD[16+rdi]
-	mov	rax,QWORD[8+rsi]
-	mul	r11
-	xor	r10,r10
-	add	r8,rax
-	adc	r9,rdx
-
-	mov	r12,QWORD[8+rdi]
-	mov	rax,QWORD[rsi]
-	mul	r12
-	add	r8,rax
-	mov	QWORD[8+rcx],r8
-	adc	r9,rdx
-	adc	r10,0x0
-
-	xor	r8,r8
-	mov	rax,QWORD[16+rsi]
-	mul	r11
-	add	r9,rax
-	adc	r10,rdx
-	adc	r8,0x0
-
-	mov	r13,QWORD[rsi]
-	mov	rax,r14
-	mul	r13
-	add	r9,rax
-	adc	r10,rdx
-	adc	r8,0x0
-
-	mov	rax,QWORD[8+rsi]
-	mul	r12
-	add	r9,rax
-	mov	QWORD[16+rcx],r9
-	adc	r10,rdx
-	adc	r8,0x0
-
-	xor	r9,r9
-	mov	rax,QWORD[24+rsi]
-	mul	r11
-	mov	r15,QWORD[24+rdi]
-	add	r10,rax
-	adc	r8,rdx
-	adc	r9,0x0
-
-	mov	rax,r15
-	mul	r13
-	add	r10,rax
-	adc	r8,rdx
-	adc	r9,0x0
-
-	mov	rax,QWORD[16+rsi]
-	mul	r12
-	add	r10,rax
-	adc	r8,rdx
-	adc	r9,0x0
-
-	mov	rax,QWORD[8+rsi]
-	mul	r14
-	add	r10,rax
-	mov	QWORD[24+rcx],r10
-	adc	r8,rdx
-	adc	r9,0x0
-
-	xor	r10,r10
-	mov	rax,QWORD[24+rsi]
-	mul	r12
-	add	r8,rax
-	adc	r9,rdx
-	adc	r10,0x0
-
-	mov	rax,QWORD[8+rsi]
-	mul	r15
-	add	r8,rax
-	adc	r9,rdx
-	adc	r10,0x0
-
-	mov	rax,QWORD[16+rsi]
-	mul	r14
-	add	r8,rax
-	mov	QWORD[32+rcx],r8
-	adc	r9,rdx
-	adc	r10,0x0
-
-	xor	r8,r8
-	mov	rax,QWORD[24+rsi]
-	mul	r14
-	add	r9,rax
-	adc	r10,rdx
-	adc	r8,0x0
-
-	mov	rax,QWORD[16+rsi]
-	mul	r15
-	add	r9,rax
-	mov	QWORD[40+rcx],r9
-	adc	r10,rdx
-	adc	r8,0x0
-
-	mov	rax,QWORD[24+rsi]
-	mul	r15
-	add	r10,rax
-	mov	QWORD[48+rcx],r10
-	adc	r8,rdx
-	mov	QWORD[56+rcx],r8
-
-
-
-	mov	r11,QWORD[32+rdi]
-	mov	rax,QWORD[32+rsi]
-	mul	r11
-	xor	r9,r9
-	mov	QWORD[64+rcx],rax
-	mov	r8,rdx
-
-	mov	r14,QWORD[48+rdi]
-	mov	rax,QWORD[40+rsi]
-	mul	r11
-	xor	r10,r10
-	add	r8,rax
-	adc	r9,rdx
-
-	mov	r12,QWORD[40+rdi]
-	mov	rax,QWORD[32+rsi]
-	mul	r12
-	add	r8,rax
-	mov	QWORD[72+rcx],r8
-	adc	r9,rdx
-	adc	r10,0x0
-
-	xor	r8,r8
-	mov	rax,QWORD[48+rsi]
-	mul	r11
-	add	r9,rax
-	adc	r10,rdx
-	adc	r8,0x0
-
-	mov	r13,QWORD[32+rsi]
-	mov	rax,r14
-	mul	r13
-	add	r9,rax
-	adc	r10,rdx
-	adc	r8,0x0
-
-	mov	rax,QWORD[40+rsi]
-	mul	r12
-	add	r9,rax
-	mov	QWORD[80+rcx],r9
-	adc	r10,rdx
-	adc	r8,0x0
-
-	mov	rax,QWORD[48+rsi]
-	mul	r12
-	xor	r12,r12
-	add	r10,rax
-	adc	r8,rdx
-	adc	r12,0x0
-
-	mov	rax,QWORD[40+rsi]
-	mul	r14
-	add	r10,rax
-	adc	r8,rdx
-	adc	r12,0x0
-	mov	QWORD[88+rcx],r10
-
-	mov	rax,QWORD[48+rsi]
-	mul	r14
-	add	r8,rax
-	adc	r12,0x0
-	mov	QWORD[96+rcx],r8
-
-	add	rdx,r12
-
-
-	mov	r8,QWORD[rsp]
-	sub	r8,QWORD[rcx]
-	mov	r9,QWORD[8+rsp]
-	sbb	r9,QWORD[8+rcx]
-	mov	r10,QWORD[16+rsp]
-	sbb	r10,QWORD[16+rcx]
-	mov	r11,QWORD[24+rsp]
-	sbb	r11,QWORD[24+rcx]
-	mov	r12,QWORD[80+rsp]
-	sbb	r12,QWORD[32+rcx]
-	mov	r13,QWORD[88+rsp]
-	sbb	r13,QWORD[40+rcx]
-	mov	r14,QWORD[96+rsp]
-	sbb	r14,QWORD[48+rcx]
-	mov	r15,QWORD[104+rsp]
-	sbb	r15,QWORD[56+rcx]
-
-
-	mov	rax,QWORD[64+rcx]
-	sub	r8,rax
-	mov	rax,QWORD[72+rcx]
-	sbb	r9,rax
-	mov	rax,QWORD[80+rcx]
-	sbb	r10,rax
-	mov	rax,QWORD[88+rcx]
-	sbb	r11,rax
-	mov	rax,QWORD[96+rcx]
-	sbb	r12,rax
-	sbb	r13,rdx
-	sbb	r14,0x0
-	sbb	r15,0x0
-
-
-	add	r8,QWORD[32+rcx]
-	mov	QWORD[32+rcx],r8
-	adc	r9,QWORD[40+rcx]
-	mov	QWORD[40+rcx],r9
-	adc	r10,QWORD[48+rcx]
-	mov	QWORD[48+rcx],r10
-	adc	r11,QWORD[56+rcx]
-	mov	QWORD[56+rcx],r11
-	adc	r12,QWORD[64+rcx]
-	mov	QWORD[64+rcx],r12
-	adc	r13,QWORD[72+rcx]
-	mov	QWORD[72+rcx],r13
-	adc	r14,QWORD[80+rcx]
-	mov	QWORD[80+rcx],r14
-	adc	r15,QWORD[88+rcx]
-	mov	QWORD[88+rcx],r15
-	mov	r12,QWORD[96+rcx]
-	adc	r12,0x0
-	mov	QWORD[96+rcx],r12
-	adc	rdx,0x0
-	mov	QWORD[104+rcx],rdx
-
-	add	rsp,112
-
-
-
-	pop	r15
-
-	pop	r14
-
-	pop	r13
-
-	pop	r12
-
-	mov	rdi,QWORD[8+rsp]	;WIN64 epilogue
-	mov	rsi,QWORD[16+rsp]
-	DB	0F3h,0C3h		;repret
-